From 4a8cddce481d2dc03146a5de9a557a6c470aa6a2 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Thu, 25 Apr 2024 15:55:33 -0600 Subject: [PATCH 01/41] interim --- .vscode/settings.json | 9 + OLEDMenuImplementation.cpp | 11 +- framesync.h | 6 +- main.cpp | 10325 ++++++++++++++++ options.h | 4 + platformio.ini | 15 +- public/src/index.ts | 18 +- serial.cpp | 14 + serial.h | 108 + server.cpp | 557 + server.h | 60 + slot.h | 1 + src/WebSockets.h | 2 +- .../PersWiFiManager.cpp | 0 PersWiFiManager.h => tmp/PersWiFiManager.h | 0 gbs-control.ino => tmp/gbs-control.ino | 150 +- wifiman.cpp | 136 + wifiman.h | 68 + 18 files changed, 11386 insertions(+), 98 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 main.cpp create mode 100644 serial.cpp create mode 100644 serial.h create mode 100644 server.cpp create mode 100644 server.h rename PersWiFiManager.cpp => tmp/PersWiFiManager.cpp (100%) rename PersWiFiManager.h => tmp/PersWiFiManager.h (100%) rename gbs-control.ino => tmp/gbs-control.ino (98%) create mode 100644 wifiman.cpp create mode 100644 wifiman.h diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..cd8220bd --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "files.associations": { + ".env*": "dotenv", + "plyconfig.json": "jsonc", + "*.tcc": "cpp", + "fstream": "cpp", + "functional": "cpp" + } +} \ No newline at end of file diff --git a/OLEDMenuImplementation.cpp b/OLEDMenuImplementation.cpp index 72a9a7d6..2a488158 100644 --- a/OLEDMenuImplementation.cpp +++ b/OLEDMenuImplementation.cpp @@ -1,6 +1,7 @@ #define OSD_TIMEOUT 8000 -#include +#include +#include #include "OLEDMenuImplementation.h" #include "options.h" #include "tv5725.h" @@ -138,7 +139,7 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool) { SlotMetaArray slotsObject; - File slotsBinaryFileRead = SPIFFS.open(SLOTS_FILE, "r"); + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); manager->clearSubItems(item); int curNumSlot = 0; if (slotsBinaryFileRead) { @@ -160,7 +161,7 @@ bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL if (curNumSlot > OLED_MENU_MAX_SUBITEMS_NUM) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_TOO_MANY_PRESETS)); } - + if (!item->numSubItem) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_NO_PRESETS)); } @@ -237,8 +238,8 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav display.drawXbm(CENTER_IMAGE(TEXT_NO_INPUT)); } else { // TODO translations - boolean vsyncActive = 0; - boolean hsyncActive = 0; + bool vsyncActive = 0; + bool hsyncActive = 0; float ofr = getOutputFrameRate(); uint8_t currentInput = GBS::ADC_INPUT_SEL::read(); rto->presetID = GBS::GBS_PRESET_ID::read(); diff --git a/framesync.h b/framesync.h index 9e1939c5..853e013b 100644 --- a/framesync.h +++ b/framesync.h @@ -1,6 +1,8 @@ #ifndef FRAMESYNC_H_ #define FRAMESYNC_H_ +#include "wifiman.h" + // fast digitalRead() #if defined(ESP8266) #define digitalRead(x) ((GPIO_REG_READ(GPIO_IN_ADDRESS) >> x) & 1) @@ -78,7 +80,7 @@ void setExternalClockGenFrequencySmooth(uint32_t freq) { while (current > (rto->freqExtClockGen + STEP_SIZE_HZ)) { current -= STEP_SIZE_HZ; Si.setFreq(0, current); - handleWiFi(0); + wifiLoop(0); } } } else if (current < rto->freqExtClockGen) { @@ -86,7 +88,7 @@ void setExternalClockGenFrequencySmooth(uint32_t freq) { while ((current + STEP_SIZE_HZ) < rto->freqExtClockGen) { current += STEP_SIZE_HZ; Si.setFreq(0, current); - handleWiFi(0); + wifiLoop(0); } } } diff --git a/main.cpp b/main.cpp new file mode 100644 index 00000000..0117609f --- /dev/null +++ b/main.cpp @@ -0,0 +1,10325 @@ +#include +#include +#include "ntsc_240p.h" +#include "pal_240p.h" +#include "ntsc_720x480.h" +#include "pal_768x576.h" +#include "ntsc_1280x720.h" +#include "ntsc_1280x1024.h" +#include "ntsc_1920x1080.h" +#include "ntsc_downscale.h" +#include "pal_1280x720.h" +#include "pal_1280x1024.h" +#include "pal_1920x1080.h" +#include "pal_downscale.h" +#include "presetMdSection.h" +#include "presetDeinterlacerSection.h" +#include "presetHdBypassSection.h" +#include "ofw_RGBS.h" +#include "options.h" +#include "slot.h" + +#include "serial.h" +#include "tv5725.h" +#include "osd.h" +#include "SSD1306Wire.h" +#include "images.h" +#include "server.h" +#include "wifiman.h" + +#define HAVE_BUTTONS 0 +#define USE_NEW_OLED_MENU 1 + + +static inline void writeBytes(uint8_t slaveRegister, uint8_t *values, uint8_t numValues); +const uint8_t *loadPresetFromLFS(byte forVideoMode); + +SSD1306Wire display(0x3c, D2, D1); // inits I2C address & pins for OLED +const int pin_clk = 14; // D5 = GPIO14 (input of one direction for encoder) +const int pin_data = 13; // D7 = GPIO13 (input of one direction for encoder) +const int pin_switch = 0; // D3 = GPIO0 pulled HIGH, else boot fail (middle push button for encoder) + +#if USE_NEW_OLED_MENU +#include "OLEDMenuImplementation.h" +#include "OSDManager.h" +OLEDMenuManager oledMenu(&display); +OSDManager osdManager; +volatile OLEDMenuNav oledNav = OLEDMenuNav::IDLE; +volatile uint8_t rotaryIsrID = 0; +#else +String oled_menu[4] = {"Resolutions", "Presets", "Misc.", "Current Settings"}; +String oled_Resolutions[7] = {"1280x960", "1280x1024", "1280x720", "1920x1080", "480/576", "Downscale", "Pass-Through"}; +String oled_Presets[8] = {"1", "2", "3", "4", "5", "6", "7", "Back"}; +String oled_Misc[4] = {"Reset GBS", "Restore Factory", "-----Back"}; + +int oled_menuItem = 1; +int oled_subsetFrame = 0; +int oled_selectOption = 0; +int oled_page = 0; + +int oled_lastCount = 0; +volatile int oled_encoder_pos = 0; +volatile int oled_main_pointer = 0; // volatile vars change done with ISR +volatile int oled_pointer_count = 0; +volatile int oled_sub_pointer = 0; +#endif +// ESPAsyncTCP and ESPAsyncWebServer libraries by me-no-dev +// download (green "Clone or download" button) and extract to Arduino libraries folder +// Windows: "Documents\Arduino\libraries" or full path: "C:\Users\rama\Documents\Arduino\libraries" +// https://github.com/me-no-dev/ESPAsyncTCP +// https://github.com/me-no-dev/ESPAsyncWebServer +// #include +// #include +#include +#include +#include +#include // mDNS library for finding gbscontrol.local on the local network +#include + +// PersWiFiManager library by Ryan Downing +// https://github.com/r-downing/PersWiFiManager +// included in project root folder to allow modifications within limitations of the Arduino framework +// See 3rdparty/PersWiFiManager for unmodified source and license +// #include "PersWiFiManager.h" + +// WebSockets library by Markus Sattler +// https://github.com/Links2004/arduinoWebSockets +// included in src folder to allow header modifications within limitations of the Arduino framework +// See 3rdparty/WebSockets for unmodified source and license +#include "src/WebSockets.h" +#include "src/WebSocketsServer.h" + +// Optional: +// ESP8266-ping library to aid debugging WiFi issues, install via Arduino library manager +// #define HAVE_PINGER_LIBRARY +#ifdef HAVE_PINGER_LIBRARY +#include +#include +unsigned long pingLastTime; +Pinger pinger; // pinger global object to aid debugging WiFi issues +#endif + +typedef TV5725 GBS; + +unsigned long lastVsyncLock = millis(); + +// Si5351mcu library by Pavel Milanes +// https://github.com/pavelmc/Si5351mcu +// included in project root folder to allow modifications within limitations of the Arduino framework +// See 3rdparty/Si5351mcu for unmodified source and license +#include "src/si5351mcu.h" +Si5351mcu Si; + +ESP8266WebServer server(80); +// AsyncWebServer server(80); +DNSServer dnsServer; +WebSocketsServer webSocket(81); +// AsyncWebSocket webSocket("/ws"); +// PersWiFiManager persWM(server, dnsServer); + +#define DEBUG_IN_PIN D6 // marked "D12/MISO/D6" (Wemos D1) or D6 (Lolin NodeMCU) +// SCL = D1 (Lolin), D15 (Wemos D1) // ESP8266 Arduino default map: SCL +// SDA = D2 (Lolin), D14 (Wemos D1) // ESP8266 Arduino default map: SDA +#define LEDON \ + pinMode(LED_BUILTIN, OUTPUT); \ + digitalWrite(LED_BUILTIN, LOW) +#define LEDOFF \ + digitalWrite(LED_BUILTIN, HIGH); \ + pinMode(LED_BUILTIN, INPUT) + +// fast ESP8266 digitalRead (21 cycles vs 77), *should* work with all possible input pins +// but only "D7" and "D6" have been tested so far +#define digitalRead(x) ((GPIO_REG_READ(GPIO_IN_ADDRESS) >> x) & 1) + +// FIXME: temporary definions: mind the funct ordering +void handleType2Command(char argument); +void initUpdateOTA(); +void setAndLatchPhaseADC(); +void savePresetToFS(); +void startWebserver(); +void setOutModeHdBypass(bool regsInitialized); +float getOutputFrameRate(); +void setAndUpdateSogLevel(uint8_t level); +void setAdcParametersGainAndOffset(); +void resetPLL(); +void resetPLLAD(); +void resetDebugPort(); +void applyYuvPatches(); +void applyRGBPatches(); +void setAndLatchPhaseSP(); +void latchPLLAD(); +bool getStatus16SpHsStable(); +uint8_t getVideoMode(); +void applyPresets(uint8_t result); +void resetSyncProcessor(); +void resetModeDetect(); +bool getSyncPresent(); +void printVideoTimings(); +bool applyBestHTotal(uint16_t bestHTotal); +void updateSpDynamic(bool withCurrentVideoModeCheck); +void setOverSampleRatio(uint8_t newRatio, bool prepareOnly); +void updateCoastPosition(bool autoCoast); +void updateClampPosition(); +void unfreezeVideo(); +void bypassModeSwitch_RGBHV(); +void printInfo(); +// FIXME END + +// feed the current measurement, get back the moving average +uint8_t getMovingAverage(uint8_t item) +{ + static const uint8_t sz = 16; + static uint8_t arr[sz] = {0}; + static uint8_t pos = 0; + + arr[pos] = item; + if (pos < (sz - 1)) { + pos++; + } else { + pos = 0; + } + + uint16_t sum = 0; + for (uint8_t i = 0; i < sz; i++) { + sum += arr[i]; + } + return sum >> 4; // for array size 16 +} + +struct MenuAttrs +{ + static const int8_t shiftDelta = 4; + static const int8_t scaleDelta = 4; + static const int16_t vertShiftRange = 300; + static const int16_t horizShiftRange = 400; + static const int16_t vertScaleRange = 100; + static const int16_t horizScaleRange = 130; + static const int16_t barLength = 100; +}; +typedef MenuManager Menu; + +/// Video processing mode, loaded into register GBS_PRESET_ID by applyPresets() +/// and read to rto->presetID by doPostPresetLoadSteps(). Shown on web UI. +enum PresetID : uint8_t { + PresetHdBypass = 0x21, + PresetBypassRGBHV = 0x22, +}; +struct runTimeOptions rtos; +struct runTimeOptions *rto = &rtos; +struct userOptions uopts; +struct userOptions *uopt = &uopts; +struct adcOptions adcopts; +struct adcOptions *adco = &adcopts; + +char serialCommand; // Serial / Web Server commands +char userCommand; // Serial / Web Server commands +static uint8_t lastSegment = 0xFF; // GBS segment for direct access +// uint8_t globalDelay; // used for dev / debug + +#include "framesync.h" + +// +// Sync locking tunables/magic numbers +// +struct FrameSyncAttrs +{ + static const uint8_t debugInPin = DEBUG_IN_PIN; + static const uint32_t lockInterval = 100 * 16.70; // every 100 frames + static const int16_t syncCorrection = 2; // Sync correction in scanlines to apply when phase lags target + static const int32_t syncTargetPhase = 90; // Target vsync phase offset (output trails input) in degrees + // to debug: syncTargetPhase = 343 lockInterval = 15 * 16 +}; +typedef FrameSyncManager FrameSync; + +void externalClockGenResetClock() +{ + if (!rto->extClockGenDetected) { + return; + } + LOGN("externalClockGenResetClock()"); + + uint8_t activeDisplayClock = GBS::PLL648_CONTROL_01::read(); + + if (activeDisplayClock == 0x25) + rto->freqExtClockGen = 40500000; + else if (activeDisplayClock == 0x45) + rto->freqExtClockGen = 54000000; + else if (activeDisplayClock == 0x55) + rto->freqExtClockGen = 64800000; + else if (activeDisplayClock == 0x65) + rto->freqExtClockGen = 81000000; + else if (activeDisplayClock == 0x85) + rto->freqExtClockGen = 108000000; + else if (activeDisplayClock == 0x95) + rto->freqExtClockGen = 129600000; + else if (activeDisplayClock == 0xa5) + rto->freqExtClockGen = 162000000; + else if (activeDisplayClock == 0x35) + rto->freqExtClockGen = 81000000; // clock unused + else if (activeDisplayClock == 0) + rto->freqExtClockGen = 81000000; // no preset loaded + else if (!rto->outModeHdBypass) { + LOG(F("preset display clock: ")); + LOGF("0x%02X", activeDisplayClock); + } + + // problem: around 108MHz the library seems to double the clock + // maybe there are regs to check for this and resetPLL + if (rto->freqExtClockGen == 108000000) { + Si.setFreq(0, 87000000); + delay(1); // quick fix + } + // same thing it seems at 40500000 + if (rto->freqExtClockGen == 40500000) { + Si.setFreq(0, 48500000); + delay(1); // quick fix + } + + Si.setFreq(0, rto->freqExtClockGen); + GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) + FrameSync::clearFrequency(); + + LOG(F("clock gen reset: ")); + LOGN(rto->freqExtClockGen); +} + +/** + * @brief Get the Source Field Rate object + * + * @param useSPBus + * @return float + */ +float getSourceFieldRate(bool useSPBus) +{ + double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; + uint8_t testBusSelBackup = GBS::TEST_BUS_SEL::read(); + uint8_t spBusSelBackup = GBS::TEST_BUS_SP_SEL::read(); + uint8_t ifBusSelBackup = GBS::IF_TEST_SEL::read(); + uint8_t debugPinBackup = GBS::PAD_BOUT_EN::read(); + + if (debugPinBackup != 1) + GBS::PAD_BOUT_EN::write(1); // enable output to pin for test + + if (ifBusSelBackup != 3) + GBS::IF_TEST_SEL::write(3); // IF averaged frame time + + if (useSPBus) { + if (rto->syncTypeCsync) { + // Serial.println("TestBus for csync"); + if (testBusSelBackup != 0xa) + GBS::TEST_BUS_SEL::write(0xa); + } else { + // Serial.println("TestBus for HV Sync"); + if (testBusSelBackup != 0x0) + GBS::TEST_BUS_SEL::write(0x0); // RGBHV: TB 0x20 has vsync + } + if (spBusSelBackup != 0x0f) + GBS::TEST_BUS_SP_SEL::write(0x0f); + } else { + if (testBusSelBackup != 0) + GBS::TEST_BUS_SEL::write(0); // needs decimation + if + } + + float retVal = 0; + + uint32_t fieldTimeTicks = FrameSync::getPulseTicks(); + if (fieldTimeTicks == 0) { + // try again + fieldTimeTicks = FrameSync::getPulseTicks(); + } + + if (fieldTimeTicks > 0) { + retVal = esp8266_clock_freq / (double)fieldTimeTicks; + if (retVal < 47.0f || retVal > 86.0f) { + // try again + fieldTimeTicks = FrameSync::getPulseTicks(); + if (fieldTimeTicks > 0) { + retVal = esp8266_clock_freq / (double)fieldTimeTicks; + } + } + } + + GBS::TEST_BUS_SEL::write(testBusSelBackup); + GBS::PAD_BOUT_EN::write(debugPinBackup); + if (spBusSelBackup != 0x0f) + GBS::TEST_BUS_SP_SEL::write(spBusSelBackup); + if (ifBusSelBackup != 3) + GBS::IF_TEST_SEL::write(ifBusSelBackup); + + return retVal; +} + +void externalClockGenSyncInOutRate() +{ + LOGN("externalClockGenSyncInOutRate()"); + + if (!rto->extClockGenDetected) { + return; + } + if (GBS::PAD_CKIN_ENZ::read() != 0) { + return; + } + if (rto->outModeHdBypass) { + return; + } + if (GBS::PLL648_CONTROL_01::read() != 0x75) { + return; + } + + float sfr = getSourceFieldRate(0); + if (sfr < 47.0f || sfr > 86.0f) { + LOG(F("sync skipped sfr wrong: ")); + LOGN(sfr); + return; + } + + float ofr = getOutputFrameRate(); + if (ofr < 47.0f || ofr > 86.0f) { + LOG(F("sync skipped ofr wrong: ")); + LOGN(ofr); + return; + } + + uint32_t old = rto->freqExtClockGen; + FrameSync::initFrequency(ofr, old); + + setExternalClockGenFrequencySmooth((sfr / ofr) * rto->freqExtClockGen); + + int32_t diff = rto->freqExtClockGen - old; + + LOG(F("source Hz: ")); + LOGF("%.5f", sfr); + LOG(F(" new out: ")); + LOGF("%.5f", getOutputFrameRate()); + LOG(F(" clock: ")); + LOG(rto->freqExtClockGen); + LOG(F(" (")); + LOG(diff >= 0 ? "+" : ""); + LOG(diff); + LOGN(F(")")); + delay(1); +} + +void externalClockGenDetectAndInitialize() +{ + const uint8_t xtal_cl = 0xD2; // 10pF, other choices are 8pF (0x92) and 6pF (0x52) NOTE: Per AN619, the low bytes should be written 0b010010 + + // MHz: 27, 32.4, 40.5, 54, 64.8, 81, 108, 129.6, 162 + rto->freqExtClockGen = 81000000; + rto->extClockGenDetected = 0; + + if (uopt->disableExternalClockGenerator) { + LOGN(F("ExternalClockGenerator disabled, skipping detection")); + return; + } + + uint8_t retVal = 0; + Wire.beginTransmission(SIADDR); + retVal = Wire.endTransmission(); + + if (retVal != 0) { + return; + } + + Wire.beginTransmission(SIADDR); + Wire.write(0); // Device Status + Wire.endTransmission(); + size_t bytes_read = Wire.requestFrom((uint8_t)SIADDR, (size_t)1, false); + + if (bytes_read == 1) { + retVal = Wire.read(); + if ((retVal & 0x80) == 0) { + // SYS_INIT indicates device is ready. + rto->extClockGenDetected = 1; + } else { + return; + } + } else { + return; + } + + Si.init(25000000L); // many Si5351 boards come with 25MHz crystal; 27000000L for one with 27MHz + Wire.beginTransmission(SIADDR); + Wire.write(183); // XTAL_CL + Wire.write(xtal_cl); + Wire.endTransmission(); + Si.setPower(0, SIOUT_6mA); + Si.setFreq(0, rto->freqExtClockGen); + Si.disable(0); +} + +static inline void writeOneByte(uint8_t slaveRegister, uint8_t value) +{ + writeBytes(slaveRegister, &value, 1); +} + +static inline void writeBytes(uint8_t slaveRegister, uint8_t *values, uint8_t numValues) +{ + if (slaveRegister == 0xF0 && numValues == 1) { + lastSegment = *values; + } else + GBS::write(lastSegment, slaveRegister, values, numValues); +} + +void copyBank(uint8_t *bank, const uint8_t *programArray, uint16_t *index) +{ + for (uint8_t x = 0; x < 16; ++x) { + bank[x] = pgm_read_byte(programArray + *index); + (*index)++; + } +} + +bool videoStandardInputIsPalNtscSd() +{ + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) { + return true; + } + return false; +} + +void zeroAll() +{ + // turn processing units off first + writeOneByte(0xF0, 0); + writeOneByte(0x46, 0x00); // reset controls 1 + writeOneByte(0x47, 0x00); // reset controls 2 + + // zero out entire register space + for (int y = 0; y < 6; y++) { + writeOneByte(0xF0, (uint8_t)y); + for (int z = 0; z < 16; z++) { + uint8_t bank[16]; + for (int w = 0; w < 16; w++) { + bank[w] = 0; + // exceptions + // if (y == 5 && z == 0 && w == 2) { + // bank[w] = 0x51; // 5_02 + //} + // if (y == 5 && z == 5 && w == 6) { + // bank[w] = 0x01; // 5_56 + //} + // if (y == 5 && z == 5 && w == 7) { + // bank[w] = 0xC0; // 5_57 + //} + } + writeBytes(z * 16, bank, 16); + } + } +} + +void loadHdBypassSection() +{ + uint16_t index = 0; + uint8_t bank[16]; + writeOneByte(0xF0, 1); + for (int j = 3; j <= 5; j++) { // start at 0x30 + copyBank(bank, presetHdBypassSection, &index); + writeBytes(j * 16, bank, 16); + } +} + +void loadPresetDeinterlacerSection() +{ + uint16_t index = 0; + uint8_t bank[16]; + writeOneByte(0xF0, 2); + for (int j = 0; j <= 3; j++) { // start at 0x00 + copyBank(bank, presetDeinterlacerSection, &index); + writeBytes(j * 16, bank, 16); + } +} + +void loadPresetMdSection() +{ + uint16_t index = 0; + uint8_t bank[16]; + writeOneByte(0xF0, 1); + for (int j = 6; j <= 7; j++) { // start at 0x60 + copyBank(bank, presetMdSection, &index); + writeBytes(j * 16, bank, 16); + } + bank[0] = pgm_read_byte(presetMdSection + index); + bank[1] = pgm_read_byte(presetMdSection + index + 1); + bank[2] = pgm_read_byte(presetMdSection + index + 2); + bank[3] = pgm_read_byte(presetMdSection + index + 3); + writeBytes(8 * 16, bank, 4); // MD section ends at 0x83, not 0x90 +} + +// programs all valid registers (the register map has holes in it, so it's not straight forward) +// 'index' keeps track of the current preset data location. +void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) +{ + uint16_t index = 0; + uint8_t bank[16]; + uint8_t y = 0; + + // GBS::PAD_SYNC_OUT_ENZ::write(1); + // GBS::DAC_RGBS_PWDNZ::write(0); // no DAC + // GBS::SFTRST_MEM_FF_RSTZ::write(0); // stop mem fifos + + FrameSync::cleanup(); + + // should only be possible if previously was in RGBHV bypass, then hit a manual preset switch + if (rto->videoStandardInput == 15) { + rto->videoStandardInput = 0; + } + + rto->outModeHdBypass = 0; // the default at this stage + if (GBS::ADC_INPUT_SEL::read() == 0) { + // if (rto->inputIsYpBpR == 0) LOGN(F("rto->inputIsYpBpR was 0, fixing to 1"); + rto->inputIsYpBpR = 1; // new: update the var here, allow manual preset loads + } else { + // if (rto->inputIsYpBpR == 1) LOGN(F("rto->inputIsYpBpR was 1, fixing to 0"); + rto->inputIsYpBpR = 0; + } + + uint8_t reset46 = GBS::RESET_CONTROL_0x46::read(); // for keeping these as they are now + uint8_t reset47 = GBS::RESET_CONTROL_0x47::read(); + + for (; y < 6; y++) { + writeOneByte(0xF0, (uint8_t)y); + switch (y) { + case 0: + for (int j = 0; j <= 1; j++) { // 2 times + for (int x = 0; x <= 15; x++) { + if (j == 0 && x == 4) { + // keep DAC off + if (rto->useHdmiSyncFix) { + bank[x] = pgm_read_byte(programArray + index) & ~(1 << 0); + } else { + bank[x] = pgm_read_byte(programArray + index); + } + } else if (j == 0 && x == 6) { + bank[x] = reset46; + } else if (j == 0 && x == 7) { + bank[x] = reset47; + } else if (j == 0 && x == 9) { + // keep sync output off + if (rto->useHdmiSyncFix) { + bank[x] = pgm_read_byte(programArray + index) | (1 << 2); + } else { + bank[x] = pgm_read_byte(programArray + index); + } + } else { + // use preset values + bank[x] = pgm_read_byte(programArray + index); + } + + index++; + } + writeBytes(0x40 + (j * 16), bank, 16); + } + copyBank(bank, programArray, &index); + writeBytes(0x90, bank, 16); + break; + case 1: + for (int j = 0; j <= 2; j++) { // 3 times + copyBank(bank, programArray, &index); + if (j == 0) { + bank[0] = bank[0] & ~(1 << 5); // clear 1_00 5 + bank[1] = bank[1] | (1 << 0); // set 1_01 0 + bank[12] = bank[12] & 0x0f; // clear 1_0c upper bits + bank[13] = 0; // clear 1_0d + } + writeBytes(j * 16, bank, 16); + } + if (!skipMDSection) { + loadPresetMdSection(); + if (rto->syncTypeCsync) + GBS::MD_SEL_VGA60::write(0); // EDTV possible + else + GBS::MD_SEL_VGA60::write(1); // VGA 640x480 more likely + + GBS::MD_HD1250P_CNTRL::write(rto->medResLineCount); // patch med res support + } + break; + case 2: + loadPresetDeinterlacerSection(); + break; + case 3: + for (int j = 0; j <= 7; j++) { // 8 times + copyBank(bank, programArray, &index); + // if (rto->useHdmiSyncFix) { + // if (j == 0) { + // bank[0] = bank[0] | (1 << 0); // 3_00 0 sync lock + // } + // if (j == 1) { + // bank[10] = bank[10] | (1 << 4); // 3_1a 4 frame lock + // } + // } + writeBytes(j * 16, bank, 16); + } + // blank out VDS PIP registers, otherwise they can end up uninitialized + for (int x = 0; x <= 15; x++) { + writeOneByte(0x80 + x, 0x00); + } + break; + case 4: + for (int j = 0; j <= 5; j++) { // 6 times + copyBank(bank, programArray, &index); + writeBytes(j * 16, bank, 16); + } + break; + case 5: + for (int j = 0; j <= 6; j++) { // 7 times + for (int x = 0; x <= 15; x++) { + bank[x] = pgm_read_byte(programArray + index); + if (index == 322) { // s5_02 bit 6+7 = input selector (only bit 6 is relevant) + if (rto->inputIsYpBpR) + bitClear(bank[x], 6); + else + bitSet(bank[x], 6); + } + if (index == 323) { // s5_03 set clamps according to input channel + if (rto->inputIsYpBpR) { + bitClear(bank[x], 2); // G bottom clamp + bitSet(bank[x], 1); // R mid clamp + bitSet(bank[x], 3); // B mid clamp + } else { + bitClear(bank[x], 2); // G bottom clamp + bitClear(bank[x], 1); // R bottom clamp + bitClear(bank[x], 3); // B bottom clamp + } + } + // if (index == 324) { // s5_04 reset(0) for ADC REF init + // bank[x] = 0x00; + // } + if (index == 352) { // s5_20 always force to 0x02 (only SP_SOG_P_ATO) + bank[x] = 0x02; + } + if (index == 375) { // s5_37 + if (videoStandardInputIsPalNtscSd()) { + bank[x] = 0x6b; + } else { + bank[x] = 0x02; + } + } + if (index == 382) { // s5_3e + bitSet(bank[x], 5); // SP_DIS_SUB_COAST = 1 + } + if (index == 407) { // s5_57 + bitSet(bank[x], 0); // SP_NO_CLAMP_REG = 1 + } + index++; + } + writeBytes(j * 16, bank, 16); + } + break; + } + } + + // scaling RGBHV mode + if (uopt->preferScalingRgbhv && rto->isValidForScalingRGBHV) { + GBS::GBS_OPTION_SCALING_RGBHV::write(1); + rto->videoStandardInput = 3; + } +} + +void activeFrameTimeLockInitialSteps() +{ + // skip if using external clock gen + if (rto->extClockGenDetected) { + LOGN(F("Active FrameTime Lock enabled, adjusting external clock gen frequency")); + return; + } + // skip when out mode = bypass + if (rto->presetID != PresetHdBypass && rto->presetID != PresetBypassRGBHV) { + LOG(F("Active FrameTime Lock enabled, disable if display unstable or stays blank! Method: ")); + if (uopt->frameTimeLockMethod == 0) { + LOGN(F("0 (vtotal + VSST)")); + } + if (uopt->frameTimeLockMethod == 1) { + LOGN(F("1 (vtotal only)")); + } + if (GBS::VDS_VS_ST::read() == 0) { + // VS_ST needs to be at least 1, so method 1 can decrease it when needed (but currently only increases VS_ST) + // don't force this here, instead make sure to have all presets follow the rule (easier dev) + LOGN(F("Warning: Check VDS_VS_ST!")); + } + } +} + +void resetInterruptSogSwitchBit() +{ + GBS::INT_CONTROL_RST_SOGSWITCH::write(1); + GBS::INT_CONTROL_RST_SOGSWITCH::write(0); +} + +void resetInterruptSogBadBit() +{ + GBS::INT_CONTROL_RST_SOGBAD::write(1); + GBS::INT_CONTROL_RST_SOGBAD::write(0); +} + +void resetInterruptNoHsyncBadBit() +{ + GBS::INT_CONTROL_RST_NOHSYNC::write(1); + GBS::INT_CONTROL_RST_NOHSYNC::write(0); +} + +void setResetParameters() +{ + LOGN(F("")); + rto->videoStandardInput = 0; + rto->videoIsFrozen = false; + rto->applyPresetDoneStage = 0; + rto->presetVlineShift = 0; + rto->sourceDisconnected = true; + rto->outModeHdBypass = 0; + rto->clampPositionIsSet = 0; + rto->coastPositionIsSet = 0; + rto->phaseIsSet = 0; + rto->continousStableCounter = 0; + rto->noSyncCounter = 0; + rto->isInLowPowerMode = false; + rto->currentLevelSOG = 5; + rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run + rto->failRetryAttempts = 0; + rto->HPLLState = 0; + rto->motionAdaptiveDeinterlaceActive = false; + rto->scanlinesEnabled = false; + rto->syncTypeCsync = false; + rto->isValidForScalingRGBHV = false; + rto->medResLineCount = 0x33; // 51*8=408 + rto->osr = 0; + rto->useHdmiSyncFix = 0; + rto->notRecognizedCounter = 0; + + adco->r_gain = 0; + adco->g_gain = 0; + adco->b_gain = 0; + + // clear temp storage + GBS::ADC_UNUSED_64::write(0); + GBS::ADC_UNUSED_65::write(0); + GBS::ADC_UNUSED_66::write(0); + GBS::ADC_UNUSED_67::write(0); + GBS::GBS_PRESET_CUSTOM::write(0); + GBS::GBS_PRESET_ID::write(0); + GBS::GBS_OPTION_SCALING_RGBHV::write(0); + GBS::GBS_OPTION_PALFORCED60_ENABLED::write(0); + + // set minimum IF parameters + GBS::IF_VS_SEL::write(1); + GBS::IF_VS_FLIP::write(1); + GBS::IF_HSYNC_RST::write(0x3FF); + GBS::IF_VB_ST::write(0); + GBS::IF_VB_SP::write(2); + + // could stop ext clock gen output here? + FrameSync::cleanup(); + + GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD + GBS::DAC_RGBS_PWDNZ::write(0); // disable DAC + GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 1 // minor SOG clamp effect + GBS::ADC_TEST_04::write(0x02); // 5_04 + GBS::ADC_TEST_0C::write(0x12); // 5_0c 1 4 + GBS::ADC_CLK_PA::write(0); // 5_00 0/1 PA_ADC input clock = PLLAD CLKO2 + GBS::ADC_SOGEN::write(1); + GBS::SP_SOG_MODE::write(1); + GBS::ADC_INPUT_SEL::write(1); // 1 = RGBS / RGBHV adc data input + GBS::ADC_POWDZ::write(1); // ADC on + setAndUpdateSogLevel(rto->currentLevelSOG); + GBS::RESET_CONTROL_0x46::write(0x00); // all units off + GBS::RESET_CONTROL_0x47::write(0x00); + GBS::GPIO_CONTROL_00::write(0x67); // most GPIO pins regular GPIO + GBS::GPIO_CONTROL_01::write(0x00); // all GPIO outputs disabled + GBS::DAC_RGBS_PWDNZ::write(0); // disable DAC (output) + GBS::PLL648_CONTROL_01::write(0x00); // VCLK(1/2/4) display clock // needs valid for debug bus + GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) + GBS::PAD_CKOUT_ENZ::write(1); // clock output disable + GBS::IF_SEL_ADC_SYNC::write(1); // ! 1_28 2 + GBS::PLLAD_VCORST::write(1); // reset = 1 + GBS::PLL_ADS::write(1); // When = 1, input clock is from ADC ( otherwise, from unconnected clock at pin 40 ) + GBS::PLL_CKIS::write(0); // PLL use OSC clock + GBS::PLL_MS::write(2); // fb memory clock can go lower power + GBS::PAD_CONTROL_00_0x48::write(0x2b); // disable digital inputs, enable debug out pin + GBS::PAD_CONTROL_01_0x49::write(0x1f); // pad control pull down/up transistors on + loadHdBypassSection(); // 1_30 to 1_55 + loadPresetMdSection(); // 1_60 to 1_83 + setAdcParametersGainAndOffset(); + GBS::SP_PRE_COAST::write(9); // was 0x07 // need pre / poast to allow all sources to detect + GBS::SP_POST_COAST::write(18); // was 0x10 // ps2 1080p 18 + GBS::SP_NO_COAST_REG::write(0); // can be 1 in some soft reset situations, will prevent sog vsync decoding << really? + GBS::SP_CS_CLP_ST::write(32); // define it to something at start + GBS::SP_CS_CLP_SP::write(48); + GBS::SP_SOG_SRC_SEL::write(0); // SOG source = ADC + GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) + GBS::SP_NO_CLAMP_REG::write(1); + GBS::PLLAD_ICP::write(0); // lowest charge pump current + GBS::PLLAD_FS::write(0); // low gain (have to deal with cold and warm startups) + GBS::PLLAD_5_16::write(0x1f); + GBS::PLLAD_MD::write(0x700); + resetPLL(); // cycles PLL648 + delay(2); + resetPLLAD(); // same for PLLAD + GBS::PLL_VCORST::write(1); // reset on + GBS::PLLAD_CONTROL_00_5x11::write(0x01); // reset on + resetDebugPort(); + + // GBS::RESET_CONTROL_0x47::write(0x16); + GBS::RESET_CONTROL_0x46::write(0x41); // new 23.07.19 + GBS::RESET_CONTROL_0x47::write(0x17); // new 23.07.19 (was 0x16) + GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts + GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status + GBS::INTERRUPT_CONTROL_00::write(0x00); + GBS::PAD_SYNC_OUT_ENZ::write(0); // sync output enabled, will be low (HC125 fix) + rto->clampPositionIsSet = 0; // some functions override these, so make sure + rto->coastPositionIsSet = 0; + rto->phaseIsSet = 0; + rto->continousStableCounter = 0; + serialCommand = '@'; + userCommand = '@'; +} + +void OutputComponentOrVGA() +{ + + // TODO replace with rto->isCustomPreset? + bool isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); + if (uopt->wantOutputComponent) { + LOGN(F("Output Format: Component")); + GBS::VDS_SYNC_LEV::write(0x80); // 0.25Vpp sync (leave more room for Y) + GBS::VDS_CONVT_BYPS::write(1); // output YUV + GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD + } else { + GBS::VDS_SYNC_LEV::write(0); + GBS::VDS_CONVT_BYPS::write(0); // output RGB + GBS::OUT_SYNC_CNTRL::write(1); // H / V sync out enable + } + + if (!isCustomPreset) { + if (rto->inputIsYpBpR == true) { + applyYuvPatches(); + } else { + applyRGBPatches(); + } + } +} + +void applyComponentColorMixing() +{ + GBS::VDS_Y_GAIN::write(0x64); // 3_35 + GBS::VDS_UCOS_GAIN::write(0x19); // 3_36 + GBS::VDS_VCOS_GAIN::write(0x19); // 3_37 + GBS::VDS_Y_OFST::write(0xfe); // 3_3a + GBS::VDS_U_OFST::write(0x01); // 3_3b +} + +void toggleIfAutoOffset() +{ + if (GBS::IF_AUTO_OFST_EN::read() == 0) { + // and different ADC offsets + GBS::ADC_ROFCTRL::write(0x40); + GBS::ADC_GOFCTRL::write(0x42); + GBS::ADC_BOFCTRL::write(0x40); + // enable + GBS::IF_AUTO_OFST_EN::write(1); + GBS::IF_AUTO_OFST_PRD::write(0); // 0 = by line, 1 = by frame + } else { + if (adco->r_off != 0 && adco->g_off != 0 && adco->b_off != 0) { + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + } + // adco->r_off = 0: auto calibration on boot failed, leave at current values + GBS::IF_AUTO_OFST_EN::write(0); + GBS::IF_AUTO_OFST_PRD::write(0); // 0 = by line, 1 = by frame + } +} + +// blue only mode: t0t44t1 t0t44t4 +void applyYuvPatches() +{ + GBS::ADC_RYSEL_R::write(1); // midlevel clamp red + GBS::ADC_RYSEL_B::write(1); // midlevel clamp blue + GBS::ADC_RYSEL_G::write(0); // gnd clamp green + GBS::DEC_MATRIX_BYPS::write(1); // ADC + GBS::IF_MATRIX_BYPS::write(1); + + if (GBS::GBS_PRESET_CUSTOM::read() == 0) { + // colors + GBS::VDS_Y_GAIN::write(0x80); // 3_25 + GBS::VDS_UCOS_GAIN::write(0x1c); // 3_26 + GBS::VDS_VCOS_GAIN::write(0x29); // 3_27 + GBS::VDS_Y_OFST::write(0xFE); + GBS::VDS_U_OFST::write(0x03); + GBS::VDS_V_OFST::write(0x03); + if (rto->videoStandardInput >= 5 && rto->videoStandardInput <= 7) { + // todo: Rec. 709 (vs Rec. 601 used normally + // needs this on VDS and HDBypass + } + } + + // if using ADC auto offset for yuv input / rgb output + // GBS::ADC_AUTO_OFST_EN::write(1); + // GBS::VDS_U_OFST::write(0x36); //3_3b + // GBS::VDS_V_OFST::write(0x4d); //3_3c + + if (uopt->wantOutputComponent) { + applyComponentColorMixing(); + } +} + +// blue only mode: t0t44t1 t0t44t4 +void applyRGBPatches() +{ + GBS::ADC_RYSEL_R::write(0); // gnd clamp red + GBS::ADC_RYSEL_B::write(0); // gnd clamp blue + GBS::ADC_RYSEL_G::write(0); // gnd clamp green + GBS::DEC_MATRIX_BYPS::write(0); // 5_1f 2 = 1 for YUV / 0 for RGB << using DEC matrix + GBS::IF_MATRIX_BYPS::write(1); + + if (GBS::GBS_PRESET_CUSTOM::read() == 0) { + // colors + GBS::VDS_Y_GAIN::write(0x80); // 0x80 = 0 + GBS::VDS_UCOS_GAIN::write(0x1c); + GBS::VDS_VCOS_GAIN::write(0x29); // 0x27 when using IF matrix, 0x29 for DEC matrix + GBS::VDS_Y_OFST::write(0x00); // 0 + GBS::VDS_U_OFST::write(0x00); // 2 + GBS::VDS_V_OFST::write(0x00); // 2 + } + + if (uopt->wantOutputComponent) { + applyComponentColorMixing(); + } +} + +/// Write ADC gain registers, and save in adco->r_gain to properly transfer it +/// across loading presets or passthrough. +void setAdcGain(uint8_t gain) +{ + // gain is actually range, increasing it dims the image. + GBS::ADC_RGCTRL::write(gain); + GBS::ADC_GGCTRL::write(gain); + GBS::ADC_BGCTRL::write(gain); + + // Save gain for applying preset. (Gain affects passthrough presets, and + // loading a passthrough preset loads from adco but doesn't save to it.) + adco->r_gain = gain; + adco->g_gain = gain; + adco->b_gain = gain; +} + +void setAdcParametersGainAndOffset() +{ + GBS::ADC_ROFCTRL::write(0x40); + GBS::ADC_GOFCTRL::write(0x40); + GBS::ADC_BOFCTRL::write(0x40); + + // Do not call setAdcGain() and overwrite adco->r_gain. This function should + // only be called during startup, or during doPostPresetLoadSteps(), and if + // `uopt->enableAutoGain == 1` then doPostPresetLoadSteps() will revert + // these writes with `adco->r_gain`. + GBS::ADC_RGCTRL::write(0x7B); + GBS::ADC_GGCTRL::write(0x7B); + GBS::ADC_BGCTRL::write(0x7B); +} + +void updateHVSyncEdge() +{ + static uint8_t printHS = 0, printVS = 0; + uint16_t temp = 0; + + if (GBS::STATUS_INT_SOG_BAD::read() == 1) { + resetInterruptSogBadBit(); + return; + } + + uint8_t syncStatus = GBS::STATUS_16::read(); + if (rto->syncTypeCsync) { + // sog check, only check H + if ((syncStatus & 0x02) != 0x02) + return; + } else { + // HV check, check H + V + if ((syncStatus & 0x0a) != 0x0a) + return; + } + + if ((syncStatus & 0x02) != 0x02) // if !hs active + { + // LOGN(F("(SP) can't detect sync edge")); + } else { + if ((syncStatus & 0x01) == 0x00) { + if (printHS != 1) { + LOGN(F("(SP) HS active low")); + } + printHS = 1; + + temp = GBS::HD_HS_SP::read(); + if (GBS::HD_HS_ST::read() < temp) { // if out sync = ST < SP + GBS::HD_HS_SP::write(GBS::HD_HS_ST::read()); + GBS::HD_HS_ST::write(temp); + GBS::SP_HS2PLL_INV_REG::write(1); + // GBS::SP_SOG_P_INV::write(0); // 5_20 2 //could also use 5_20 1 "SP_SOG_P_ATO" + } + } else { + if (printHS != 2) { + LOGN(F("(SP) HS active high")); + } + printHS = 2; + + temp = GBS::HD_HS_SP::read(); + if (GBS::HD_HS_ST::read() > temp) { // if out sync = ST > SP + GBS::HD_HS_SP::write(GBS::HD_HS_ST::read()); + GBS::HD_HS_ST::write(temp); + GBS::SP_HS2PLL_INV_REG::write(0); + // GBS::SP_SOG_P_INV::write(1); // 5_20 2 //could also use 5_20 1 "SP_SOG_P_ATO" + } + } + + // VS check, but only necessary for separate sync (CS should have VS always active low) + if (rto->syncTypeCsync == false) { + if ((syncStatus & 0x08) != 0x08) // if !vs active + { + Serial.println(F("VS can't detect sync edge")); + } else { + if ((syncStatus & 0x04) == 0x00) { + if (printVS != 1) { + LOGN(F("(SP) VS active low")); + } + printVS = 1; + + temp = GBS::HD_VS_SP::read(); + if (GBS::HD_VS_ST::read() < temp) { // if out sync = ST < SP + GBS::HD_VS_SP::write(GBS::HD_VS_ST::read()); + GBS::HD_VS_ST::write(temp); + } + } else { + if (printVS != 2) { + LOGN(F("(SP) VS active high")); + } + printVS = 2; + + temp = GBS::HD_VS_SP::read(); + if (GBS::HD_VS_ST::read() > temp) { // if out sync = ST > SP + GBS::HD_VS_SP::write(GBS::HD_VS_ST::read()); + GBS::HD_VS_ST::write(temp); + } + } + } + } + } +} + +void prepareSyncProcessor() +{ + writeOneByte(0xF0, 5); + GBS::SP_SOG_P_ATO::write(0); // 5_20 disable sog auto polarity // hpw can be > ht, but auto is worse + GBS::SP_JITTER_SYNC::write(0); + // H active detect control + writeOneByte(0x21, 0x18); // SP_SYNC_TGL_THD H Sync toggle time threshold 0x20; lower than 5_33(not always); 0 to turn off (?) 0x18 for 53.69 system @ 33.33 + writeOneByte(0x22, 0x0F); // SP_L_DLT_REG Sync pulse width difference threshold (less than this = equal) + writeOneByte(0x23, 0x00); // UNDOCUMENTED range from 0x00 to at least 0x1d + writeOneByte(0x24, 0x40); // SP_T_DLT_REG H total width difference threshold rgbhv: b // range from 0x02 upwards + writeOneByte(0x25, 0x00); // SP_T_DLT_REG + writeOneByte(0x26, 0x04); // SP_SYNC_PD_THD H sync pulse width threshold // from 0(?) to 0x50 // in yuv 720p range only to 0x0a! + writeOneByte(0x27, 0x00); // SP_SYNC_PD_THD + writeOneByte(0x2a, 0x0F); // SP_PRD_EQ_THD How many legal lines as valid; scales with 5_33 (needs to be below) + // V active detect control + // these 4 only have effect with HV input; test: s5s2ds34 s5s2es24 s5s2fs16 s5s31s84 + writeOneByte(0x2d, 0x03); // SP_VSYNC_TGL_THD V sync toggle time threshold // at 5 starts to drop many 0_16 vsync events + writeOneByte(0x2e, 0x00); // SP_SYNC_WIDTH_DTHD V sync pulse width threshold + writeOneByte(0x2f, 0x02); // SP_V_PRD_EQ_THD How many continue legal v sync as valid // at 4 starts to drop 0_16 vsync events + writeOneByte(0x31, 0x2f); // SP_VT_DLT_REG V total difference threshold + // Timer value control + writeOneByte(0x33, 0x3a); // SP_H_TIMER_VAL H timer value for h detect (was 0x28) + writeOneByte(0x34, 0x06); // SP_V_TIMER_VAL V timer for V detect // 0_16 vsactive // was 0x05 + // Sync separation control + if (rto->videoStandardInput == 0) + GBS::SP_DLT_REG::write(0x70); // 5_35 130 too much for ps2 1080i, 0xb0 for 1080p + else if (rto->videoStandardInput <= 4) + GBS::SP_DLT_REG::write(0xC0); // old: extended to 0x150 later if mode = 1 or 2 + else if (rto->videoStandardInput <= 6) + GBS::SP_DLT_REG::write(0xA0); + else if (rto->videoStandardInput == 7) + GBS::SP_DLT_REG::write(0x70); + else + GBS::SP_DLT_REG::write(0x70); + + if (videoStandardInputIsPalNtscSd()) { + GBS::SP_H_PULSE_IGNOR::write(0x6b); + } else { + GBS::SP_H_PULSE_IGNOR::write(0x02); // test with MS / Genesis mode (wsog 2) vs ps2 1080p (0x13 vs 0x05) + } + // leave out pre / post coast here + // 5_3a attempted 2 for 1chip snes 239 mode intermittency, works fine except for MD in MS mode + // make sure this is stored in the presets as well, as it affects sync time + GBS::SP_H_TOTAL_EQ_THD::write(3); + + GBS::SP_SDCS_VSST_REG_H::write(0); + GBS::SP_SDCS_VSSP_REG_H::write(0); + GBS::SP_SDCS_VSST_REG_L::write(4); // 5_3f // was 12 + GBS::SP_SDCS_VSSP_REG_L::write(1); // 5_40 // was 11 + + GBS::SP_CS_HS_ST::write(0x10); // 5_45 + GBS::SP_CS_HS_SP::write(0x00); // 5_47 720p source needs ~20 range, may be necessary to adjust at runtime, based on source res + + writeOneByte(0x49, 0x00); // retime HS start for RGB+HV rgbhv: 20 + writeOneByte(0x4a, 0x00); // + writeOneByte(0x4b, 0x44); // retime HS stop rgbhv: 50 + writeOneByte(0x4c, 0x00); // + + writeOneByte(0x51, 0x02); // 0x00 rgbhv: 2 + writeOneByte(0x52, 0x00); // 0xc0 + writeOneByte(0x53, 0x00); // 0x05 rgbhv: 6 + writeOneByte(0x54, 0x00); // 0xc0 + + if (rto->videoStandardInput != 15 && (GBS::GBS_OPTION_SCALING_RGBHV::read() != 1)) { + GBS::SP_CLAMP_MANUAL::write(0); // 0 = automatic on/off possible + GBS::SP_CLP_SRC_SEL::write(0); // clamp source 1: pixel clock, 0: 27mhz // was 1 but the pixel clock isn't available at first + GBS::SP_NO_CLAMP_REG::write(1); // 5_57_0 unlock clamp + GBS::SP_SOG_MODE::write(1); + GBS::SP_H_CST_ST::write(0x10); // 5_4d + GBS::SP_H_CST_SP::write(0x100); // 5_4f + GBS::SP_DIS_SUB_COAST::write(0); // 5_3e 5 + GBS::SP_H_PROTECT::write(1); // SP_H_PROTECT on for detection + GBS::SP_HCST_AUTO_EN::write(0); + GBS::SP_NO_COAST_REG::write(0); + } + + GBS::SP_HS_REG::write(1); // 5_57 7 + GBS::SP_HS_PROC_INV_REG::write(0); // no SP sync inversion + GBS::SP_VS_PROC_INV_REG::write(0); // + + writeOneByte(0x58, 0x05); // rgbhv: 0 + writeOneByte(0x59, 0x00); // rgbhv: 0 + writeOneByte(0x5a, 0x01); // rgbhv: 0 // was 0x05 but 480p ps2 doesnt like it + writeOneByte(0x5b, 0x00); // rgbhv: 0 + writeOneByte(0x5c, 0x03); // rgbhv: 0 + writeOneByte(0x5d, 0x02); // rgbhv: 0 // range: 0 - 0x20 (how long should clamp stay off) +} + +// Sync detect resolution: 5bits; comparator voltage range 10mv~320mv. +// -> 10mV per step; if cables and source are to standard (level 6 = 60mV) +void setAndUpdateSogLevel(uint8_t level) +{ + rto->currentLevelSOG = level & 0x1f; + GBS::ADC_SOGCTRL::write(level); + setAndLatchPhaseSP(); + setAndLatchPhaseADC(); + latchPLLAD(); + GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status + GBS::INTERRUPT_CONTROL_00::write(0x00); + // Serial.print("sog: "); Serial.println(rto->currentLevelSOG); +} + +// in operation: t5t04t1 for 10% lower power on ADC +// also: s0s40s1c for 5% (lower memclock of 108mhz) +// for some reason: t0t45t2 t0t45t4 (enable SDAC, output max voltage) 5% lower done in presets +// t0t4ft4 clock out should be off +// s4s01s20 (was 30) faster latency // unstable at 108mhz +// both phase controls off saves some power 506ma > 493ma +// oversample ratio can save 10% at 1x +// t3t24t3 VDS_TAP6_BYPS on can save 2% + +// Generally, the ADC has to stay enabled to perform SOG separation and thus "see" a source. +// It is possible to run in low power mode. +// Function should not further nest, so it can be called in syncwatcher +void goLowPowerWithInputDetection() +{ + GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD + GBS::DAC_RGBS_PWDNZ::write(0); // direct disableDAC() + // zeroAll(); + setResetParameters(); // includes rto->videoStandardInput = 0 + prepareSyncProcessor(); + delay(100); + rto->isInLowPowerMode = true; + LOGN(F("Scanning inputs for sources ...")); + LEDOFF; +} + +bool optimizePhaseSP() +{ + uint16_t pixelClock = GBS::PLLAD_MD::read(); + uint8_t badHt = 0, prevBadHt = 0, worstBadHt = 0, worstPhaseSP = 0, prevPrevBadHt = 0, goodHt = 0; + bool runTest = 1; + + if (GBS::STATUS_SYNC_PROC_HTOTAL::read() < (pixelClock - 8)) { + return 0; + } + if (GBS::STATUS_SYNC_PROC_HTOTAL::read() > (pixelClock + 8)) { + return 0; + } + + if (rto->currentLevelSOG <= 2) { + // not very stable, use fixed values + rto->phaseSP = 16; + rto->phaseADC = 16; + if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { + if (rto->osr == 4) { + rto->phaseADC += 16; + rto->phaseADC &= 0x1f; + } + } + delay(8); // a bit longer, to match default run time + runTest = 0; // skip to end + } + + // unsigned long startTime = millis(); + + if (runTest) { + // 32 distinct phase settings, 3 average samples (missing 2 phase steps) > 34 + for (uint8_t u = 0; u < 34; u++) { + rto->phaseSP++; + rto->phaseSP &= 0x1f; + setAndLatchPhaseSP(); + badHt = 0; + delayMicroseconds(256); + for (uint8_t i = 0; i < 20; i++) { + if (GBS::STATUS_SYNC_PROC_HTOTAL::read() != pixelClock) { + badHt++; + delayMicroseconds(384); + } + } + // if average 3 samples has more badHt than seen yet, this phase step is worse + if ((badHt + prevBadHt + prevPrevBadHt) > worstBadHt) { + worstBadHt = (badHt + prevBadHt + prevPrevBadHt); + worstPhaseSP = (rto->phaseSP - 1) & 0x1f; // medium of 3 samples + } + + if (badHt == 0) { + // count good readings as well, to know whether the entire run is valid + goodHt++; + } + + prevPrevBadHt = prevBadHt; + prevBadHt = badHt; + // Serial.print(rto->phaseSP); Serial.print(" badHt: "); Serial.println(badHt); + } + + // Serial.println(goodHt); + + if (goodHt < 17) { + // Serial.println("pxClk unstable"); + return 0; + } + + // adjust global phase values according to test results + if (worstBadHt != 0) { + rto->phaseSP = (worstPhaseSP + 16) & 0x1f; + // assume color signals arrive at same time: phase adc = phase sp + // test in hdbypass mode shows this is more related to sog.. the assumptions seem fine at sog = 8 + rto->phaseADC = 16; //(rto->phaseSP) & 0x1f; + + // different OSR require different phase angles, also depending on bypass, etc + // shift ADC phase 180 degrees for the following + if (rto->videoStandardInput >= 5 && rto->videoStandardInput <= 7) { + if (rto->osr == 2) { + // Serial.println("shift adc phase"); + rto->phaseADC += 16; + rto->phaseADC &= 0x1f; + } + } else if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { + if (rto->osr == 4) { + // Serial.println("shift adc phase"); + rto->phaseADC += 16; + rto->phaseADC &= 0x1f; + } + } + } else { + // test was always good, so choose any reasonable value + rto->phaseSP = 16; + rto->phaseADC = 16; + if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { + if (rto->osr == 4) { + rto->phaseADC += 16; + rto->phaseADC &= 0x1f; + } + } + } + } + + // Serial.println(millis() - startTime); + // Serial.print("worstPhaseSP: "); Serial.println(worstPhaseSP); + + /*static uint8_t lastLevelSOG = 99; + if (lastLevelSOG != rto->currentLevelSOG) { + LOG(F("Phase: ")); LOG(rto->phaseSP); + LOG(F(" SOG: ")); LOG(rto->currentLevelSOG); + LOGN(); + } + lastLevelSOG = rto->currentLevelSOG;*/ + + setAndLatchPhaseSP(); + delay(1); + setAndLatchPhaseADC(); + + return 1; +} + +void optimizeSogLevel() +{ + if (rto->boardHasPower == false) // checkBoardPower is too invasive now + { + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; + return; + } + if (rto->videoStandardInput == 15 || GBS::SP_SOG_MODE::read() != 1 || rto->syncTypeCsync == false) { + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; + return; + } + + if (rto->inputIsYpBpR) { + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 14; + } else { + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; // similar to yuv, allow variations + } + setAndUpdateSogLevel(rto->currentLevelSOG); + + uint8_t debug_backup = GBS::TEST_BUS_SEL::read(); + uint8_t debug_backup_SP = GBS::TEST_BUS_SP_SEL::read(); + if (debug_backup != 0xa) { + GBS::TEST_BUS_SEL::write(0xa); + delay(1); + } + if (debug_backup_SP != 0x0f) { + GBS::TEST_BUS_SP_SEL::write(0x0f); + delay(1); + } + + GBS::TEST_BUS_EN::write(1); + + delay(100); + while (1) { + uint16_t syncGoodCounter = 0; + unsigned long timeout = millis(); + while ((millis() - timeout) < 60) { + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + syncGoodCounter++; + if (syncGoodCounter >= 60) { + break; + } + } else if (syncGoodCounter >= 4) { + syncGoodCounter -= 3; + } + } + + if (syncGoodCounter >= 60) { + syncGoodCounter = 0; + // if (getVideoMode() != 0) + if (GBS::TEST_BUS_2F::read() > 0) { + delay(20); + for (int a = 0; a < 50; a++) { + syncGoodCounter++; + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 0 || GBS::TEST_BUS_2F::read() == 0) { + syncGoodCounter = 0; + break; + } + } + if (syncGoodCounter >= 49) { + // LOG(F("OK @SOG ")); LOGN(rto->currentLevelSOG); printInfo(); + break; // found, exit + } else { + // Serial.print(" inner test failed syncGoodCounter: "); Serial.println(syncGoodCounter); + } + } else { // getVideoMode() == 0 + // Serial.print("sog-- syncGoodCounter: "); Serial.println(syncGoodCounter); + } + } else { // syncGoodCounter < 40 + // Serial.print("outer test failed syncGoodCounter: "); Serial.println(syncGoodCounter); + } + + if (rto->currentLevelSOG >= 2) { + rto->currentLevelSOG -= 1; + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(8); // time for sog to settle + } else { + rto->currentLevelSOG = 13; // leave at default level + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(8); + break; // break and exit + } + } + + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG; + if (rto->thisSourceMaxLevelSOG == 0) { + rto->thisSourceMaxLevelSOG = 1; // fail safe + } + + if (debug_backup != 0xa) { + GBS::TEST_BUS_SEL::write(debug_backup); + } + if (debug_backup_SP != 0x0f) { + GBS::TEST_BUS_SP_SEL::write(debug_backup_SP); + } +} + +// GBS boards have 2 potential sync sources: +// - RCA connectors +// - VGA input / 5 pin RGBS header / 8 pin VGA header (all 3 are shared electrically) +// This routine looks for sync on the currently active input. If it finds it, the input is returned. +// If it doesn't find sync, it switches the input and returns 0, so that an active input will be found eventually. +uint8_t detectAndSwitchToActiveInput() +{ // if any + uint8_t currentInput = GBS::ADC_INPUT_SEL::read(); + unsigned long timeout = millis(); + while (millis() - timeout < 450) { + delay(10); + wifiLoop(0); + + bool stable = getStatus16SpHsStable(); + if (stable) { + currentInput = GBS::ADC_INPUT_SEL::read(); + LOG(F("Activity detected, input: ")); + if (currentInput == 1) + LOGN(F("RGB")); + else + LOGN(F("Component")); + + if (currentInput == 1) { // RGBS or RGBHV + bool vsyncActive = 0; + rto->inputIsYpBpR = false; // declare for MD + rto->currentLevelSOG = 13; // test startup with MD and MS separately! + setAndUpdateSogLevel(rto->currentLevelSOG); + + unsigned long timeOutStart = millis(); + // vsync test + // 360ms good up to 5_34 SP_V_TIMER_VAL = 0x0b + while (!vsyncActive && ((millis() - timeOutStart) < 360)) { + vsyncActive = GBS::STATUS_SYNC_PROC_VSACT::read(); + wifiLoop(0); // wifi stack + delay(1); + } + + // if VSync is active, it's RGBHV or RGBHV with CSync on HS pin + if (vsyncActive) { + LOGN(F("VSync: present")); + GBS::MD_SEL_VGA60::write(1); // VGA 640x480 more likely than EDTV + bool hsyncActive = 0; + + timeOutStart = millis(); + while (!hsyncActive && millis() - timeOutStart < 400) { + hsyncActive = GBS::STATUS_SYNC_PROC_HSACT::read(); + wifiLoop(0); // wifi stack + delay(1); + } + + if (hsyncActive) { + LOG(F("HSync: present")); + // The HSync and SOG pins are setup to detect CSync, if present + // (SOG mode on, coasting setup, debug bus setup, etc) + // SP_H_PROTECT is needed for CSync with a VS source present as well + GBS::SP_H_PROTECT::write(1); + delay(120); + + short decodeSuccess = 0; + for (int i = 0; i < 3; i++) { + // no success if: no signal at all (returns 0.0f), no embedded VSync (returns ~18.5f) + // todo: this takes a while with no csync present + rto->syncTypeCsync = 1; // temporary for test + float sfr = getSourceFieldRate(1); + rto->syncTypeCsync = 0; // undo + if (sfr > 40.0f) + decodeSuccess++; // properly decoded vsync from 40 to xx Hz + } + + if (decodeSuccess >= 2) { + LOGN(F(" (with CSync)")); + GBS::SP_PRE_COAST::write(0x10); // increase from 9 to 16 (EGA 364) + delay(40); + rto->syncTypeCsync = true; + } else { + LOGN(); + rto->syncTypeCsync = false; + } + + // check for 25khz, all regular SOG modes first // update: only check for mode 8 + // MD reg for medium res starts at 0x2C and needs 16 loops to ramp to max of 0x3C (vt 360 .. 496) + // if source is HS+VS, can't detect via MD unit, need to set 5_11=0x92 and look at vt: counter + for (uint8_t i = 0; i < 16; i++) { + // printInfo(); + uint8_t innerVideoMode = getVideoMode(); + if (innerVideoMode == 8) { + setAndUpdateSogLevel(rto->currentLevelSOG); + rto->medResLineCount = GBS::MD_HD1250P_CNTRL::read(); + LOGN(F("med res")); + + return 1; + } + // update 25khz detection + GBS::MD_HD1250P_CNTRL::write(GBS::MD_HD1250P_CNTRL::read() + 1); + // LOGF("0x%04X", GBS::MD_HD1250P_CNTRL::read()); + delay(30); + } + + rto->videoStandardInput = 15; + // exception: apply preset here, not later in syncwatcher + applyPresets(rto->videoStandardInput); + delay(100); + + return 3; + } else { + // need to continue looking + LOGN(F("but no HSync!")); + } + } + + if (!vsyncActive) { // then do RGBS check + rto->syncTypeCsync = true; + GBS::MD_SEL_VGA60::write(0); // EDTV60 more likely than VGA60 + uint16_t testCycle = 0; + timeOutStart = millis(); + while ((millis() - timeOutStart) < 6000) { + delay(2); + if (getVideoMode() > 0) { + if (getVideoMode() != 8) { // if it's mode 8, need to set stuff first + return 1; + } + } + testCycle++; + // post coast 18 can mislead occasionally (SNES 239 mode) + // but even then it still detects the video mode pretty well + if ((testCycle % 150) == 0) { + if (rto->currentLevelSOG == 1) { + rto->currentLevelSOG = 2; + } else { + rto->currentLevelSOG += 2; + } + if (rto->currentLevelSOG >= 15) { + rto->currentLevelSOG = 1; + } + setAndUpdateSogLevel(rto->currentLevelSOG); + } + + // new: check for 25khz, use regular scaling route for those + if (getVideoMode() == 8) { + rto->currentLevelSOG = rto->thisSourceMaxLevelSOG = 13; + setAndUpdateSogLevel(rto->currentLevelSOG); + rto->medResLineCount = GBS::MD_HD1250P_CNTRL::read(); + LOGN(F("med res")); + return 1; + } + + uint8_t currentMedResLineCount = GBS::MD_HD1250P_CNTRL::read(); + if (currentMedResLineCount < 0x3c) { + GBS::MD_HD1250P_CNTRL::write(currentMedResLineCount + 1); + } else { + GBS::MD_HD1250P_CNTRL::write(0x33); + } + // LOGF("0x%04X", GBS::MD_HD1250P_CNTRL::read()); + } + + // rto->currentLevelSOG = rto->thisSourceMaxLevelSOG = 13; + // setAndUpdateSogLevel(rto->currentLevelSOG); + + return 1; // anyway, let later stage deal with it + } + + GBS::SP_SOG_MODE::write(1); + resetSyncProcessor(); + resetModeDetect(); // there was some signal but we lost it. MD is stuck anyway, so reset + delay(40); + } else if (currentInput == 0) { // YUV + uint16_t testCycle = 0; + rto->inputIsYpBpR = true; // declare for MD + GBS::MD_SEL_VGA60::write(0); // EDTV more likely than VGA 640x480 + + unsigned long timeOutStart = millis(); + while ((millis() - timeOutStart) < 6000) { + delay(2); + if (getVideoMode() > 0) { + return 2; + } + + testCycle++; + if ((testCycle % 180) == 0) { + if (rto->currentLevelSOG == 1) { + rto->currentLevelSOG = 2; + } else { + rto->currentLevelSOG += 2; + } + if (rto->currentLevelSOG >= 16) { + rto->currentLevelSOG = 1; + } + setAndUpdateSogLevel(rto->currentLevelSOG); + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG; + } + } + + rto->currentLevelSOG = rto->thisSourceMaxLevelSOG = 14; + setAndUpdateSogLevel(rto->currentLevelSOG); + + return 2; // anyway, let later stage deal with it + } + + LOGN(F(" lost..")); + rto->currentLevelSOG = 2; + setAndUpdateSogLevel(rto->currentLevelSOG); + } + + GBS::ADC_INPUT_SEL::write(!currentInput); // can only be 1 or 0 + delay(200); + + return 0; // don't do the check on the new input here, wait till next run + } + + return 0; +} + +uint8_t inputAndSyncDetect() +{ + uint8_t syncFound = detectAndSwitchToActiveInput(); + + if (syncFound == 0) { + if (!getSyncPresent()) { + if (rto->isInLowPowerMode == false) { + rto->sourceDisconnected = true; + rto->videoStandardInput = 0; + // reset to base settings, then go to low power + GBS::SP_SOG_MODE::write(1); + goLowPowerWithInputDetection(); + rto->isInLowPowerMode = true; + } + } + return 0; + } else if (syncFound == 1) { // input is RGBS + rto->inputIsYpBpR = 0; + rto->sourceDisconnected = false; + rto->isInLowPowerMode = false; + resetDebugPort(); + applyRGBPatches(); + LEDON; + return 1; + } else if (syncFound == 2) { + rto->inputIsYpBpR = 1; + rto->sourceDisconnected = false; + rto->isInLowPowerMode = false; + resetDebugPort(); + applyYuvPatches(); + LEDON; + return 2; + } else if (syncFound == 3) { // input is RGBHV + // already applied + rto->isInLowPowerMode = false; + rto->inputIsYpBpR = 0; + rto->sourceDisconnected = false; + rto->videoStandardInput = 15; + resetDebugPort(); + LEDON; + return 3; + } + + return 0; +} + +uint8_t getSingleByteFromPreset(const uint8_t *programArray, unsigned int offset) +{ + return pgm_read_byte(programArray + offset); +} + +static inline void readFromRegister(uint8_t reg, int bytesToRead, uint8_t *output) +{ + return GBS::read(lastSegment, reg, output, bytesToRead); +} + +void printReg(uint8_t seg, uint8_t reg) +{ + uint8_t readout; + readFromRegister(reg, 1, &readout); + // didn't think this HEX trick would work, but it does! (?) + LOGF("0x%02X", readout); + LOG(F(", // s")); + LOG(seg); + LOG(F("_")); + LOGF("0x%04X\n", reg); + // old: + // LOG(readout); LOG(F(", // s")); LOG(seg); LOG(F("_")); LOGF("0x%04X", reg); +} + +// dumps the current chip configuration in a format that's ready to use as new preset :) +void dumpRegisters(byte segment) +{ + if (segment > 5) + return; + writeOneByte(0xF0, segment); + + switch (segment) { + case 0: + for (int x = 0x40; x <= 0x5F; x++) { + printReg(0, x); + } + for (int x = 0x90; x <= 0x9F; x++) { + printReg(0, x); + } + break; + case 1: + for (int x = 0x0; x <= 0x2F; x++) { + printReg(1, x); + } + break; + case 2: + for (int x = 0x0; x <= 0x3F; x++) { + printReg(2, x); + } + break; + case 3: + for (int x = 0x0; x <= 0x7F; x++) { + printReg(3, x); + } + break; + case 4: + for (int x = 0x0; x <= 0x5F; x++) { + printReg(4, x); + } + break; + case 5: + for (int x = 0x0; x <= 0x6F; x++) { + printReg(5, x); + } + break; + } +} + +void resetPLLAD() +{ + GBS::PLLAD_VCORST::write(1); + GBS::PLLAD_PDZ::write(1); // in case it was off + latchPLLAD(); + GBS::PLLAD_VCORST::write(0); + delay(1); + latchPLLAD(); + rto->clampPositionIsSet = 0; // test, but should be good + rto->continousStableCounter = 1; +} + +void latchPLLAD() +{ + GBS::PLLAD_LAT::write(0); + delayMicroseconds(128); + GBS::PLLAD_LAT::write(1); +} + +void resetPLL() +{ + GBS::PLL_VCORST::write(1); + delay(1); + GBS::PLL_VCORST::write(0); + delay(1); + rto->clampPositionIsSet = 0; // test, but should be good + rto->continousStableCounter = 1; +} + +void ResetSDRAM() +{ + // GBS::SDRAM_RESET_CONTROL::write(0x87); // enable "Software Control SDRAM Idle Period" and "SDRAM_START_INITIAL_CYCLE" + // GBS::SDRAM_RESET_SIGNAL::write(1); + // GBS::SDRAM_RESET_SIGNAL::write(0); + // GBS::SDRAM_START_INITIAL_CYCLE::write(0); + GBS::SDRAM_RESET_CONTROL::write(0x02); + GBS::SDRAM_RESET_SIGNAL::write(1); + GBS::SDRAM_RESET_SIGNAL::write(0); + GBS::SDRAM_RESET_CONTROL::write(0x82); +} + +// soft reset cycle +// This restarts all chip units, which is sometimes required when important config bits are changed. +void resetDigital() +{ + bool keepBypassActive = 0; + if (GBS::SFTRST_HDBYPS_RSTZ::read() == 1) { // if HDBypass enabled + keepBypassActive = 1; + } + + // GBS::RESET_CONTROL_0x47::write(0x00); + GBS::RESET_CONTROL_0x47::write(0x17); // new, keep 0,1,2,4 on (DEC,MODE,SYNC,INT) //MODE okay? + + if (rto->outModeHdBypass) { // if currently in bypass + GBS::RESET_CONTROL_0x46::write(0x00); + GBS::RESET_CONTROL_0x47::write(0x1F); + return; // 0x46 stays all 0 + } + + GBS::RESET_CONTROL_0x46::write(0x41); // keep VDS (6) + IF (0) enabled, reset rest + if (keepBypassActive == 1) { // if HDBypass enabled + GBS::RESET_CONTROL_0x47::write(0x1F); + } + // else { + // GBS::RESET_CONTROL_0x47::write(0x17); + // } + GBS::RESET_CONTROL_0x46::write(0x7f); +} + +void resetSyncProcessor() +{ + GBS::SFTRST_SYNC_RSTZ::write(0); + delayMicroseconds(10); + GBS::SFTRST_SYNC_RSTZ::write(1); + // rto->clampPositionIsSet = false; // resetSyncProcessor is part of autosog + // rto->coastPositionIsSet = false; +} + +void resetModeDetect() +{ + GBS::SFTRST_MODE_RSTZ::write(0); + delay(1); // needed + GBS::SFTRST_MODE_RSTZ::write(1); + // rto->clampPositionIsSet = false; + // rto->coastPositionIsSet = false; +} + +void shiftHorizontal(uint16_t amountToShift, bool subtracting) +{ + uint16_t hrst = GBS::VDS_HSYNC_RST::read(); + uint16_t hbst = GBS::VDS_HB_ST::read(); + uint16_t hbsp = GBS::VDS_HB_SP::read(); + + // Perform the addition/subtraction + if (subtracting) { + if ((int16_t)hbst - amountToShift >= 0) { + hbst -= amountToShift; + } else { + hbst = hrst - (amountToShift - hbst); + } + if ((int16_t)hbsp - amountToShift >= 0) { + hbsp -= amountToShift; + } else { + hbsp = hrst - (amountToShift - hbsp); + } + } else { + if ((int16_t)hbst + amountToShift <= hrst) { + hbst += amountToShift; + // also extend hbst_d to maximum hrst-1 + if (hbst > GBS::VDS_DIS_HB_ST::read()) { + GBS::VDS_DIS_HB_ST::write(hbst); + } + } else { + hbst = 0 + (amountToShift - (hrst - hbst)); + } + if ((int16_t)hbsp + amountToShift <= hrst) { + hbsp += amountToShift; + } else { + hbsp = 0 + (amountToShift - (hrst - hbsp)); + } + } + + GBS::VDS_HB_ST::write(hbst); + GBS::VDS_HB_SP::write(hbsp); + // Serial.print("hbst: "); Serial.println(hbst); + // Serial.print("hbsp: "); Serial.println(hbsp); +} + +void shiftHorizontalLeft() +{ + shiftHorizontal(4, true); +} + +void shiftHorizontalRight() +{ + shiftHorizontal(4, false); +} + +// unused but may become useful +void shiftHorizontalLeftIF(uint8_t amount) +{ + uint16_t IF_HB_ST2 = GBS::IF_HB_ST2::read() + amount; + uint16_t IF_HB_SP2 = GBS::IF_HB_SP2::read() + amount; + uint16_t PLLAD_MD = GBS::PLLAD_MD::read(); + + if (rto->videoStandardInput <= 2) { + GBS::IF_HSYNC_RST::write(PLLAD_MD / 2); // input line length from pll div + } else if (rto->videoStandardInput <= 7) { + GBS::IF_HSYNC_RST::write(PLLAD_MD); + } + uint16_t IF_HSYNC_RST = GBS::IF_HSYNC_RST::read(); + + GBS::IF_LINE_SP::write(IF_HSYNC_RST + 1); + + // start + if (IF_HB_ST2 < IF_HSYNC_RST) { + GBS::IF_HB_ST2::write(IF_HB_ST2); + } else { + GBS::IF_HB_ST2::write(IF_HB_ST2 - IF_HSYNC_RST); + } + // LOG(F("IF_HB_ST2: ")); LOGN(GBS::IF_HB_ST2::read()); + + // stop + if (IF_HB_SP2 < IF_HSYNC_RST) { + GBS::IF_HB_SP2::write(IF_HB_SP2); + } else { + GBS::IF_HB_SP2::write((IF_HB_SP2 - IF_HSYNC_RST) + 1); + } + // LOG(F("IF_HB_SP2: ")); LOGN(GBS::IF_HB_SP2::read()); +} + +// unused but may become useful +void shiftHorizontalRightIF(uint8_t amount) +{ + int16_t IF_HB_ST2 = GBS::IF_HB_ST2::read() - amount; + int16_t IF_HB_SP2 = GBS::IF_HB_SP2::read() - amount; + uint16_t PLLAD_MD = GBS::PLLAD_MD::read(); + + if (rto->videoStandardInput <= 2) { + GBS::IF_HSYNC_RST::write(PLLAD_MD / 2); // input line length from pll div + } else if (rto->videoStandardInput <= 7) { + GBS::IF_HSYNC_RST::write(PLLAD_MD); + } + int16_t IF_HSYNC_RST = GBS::IF_HSYNC_RST::read(); + + GBS::IF_LINE_SP::write(IF_HSYNC_RST + 1); + + if (IF_HB_ST2 > 0) { + GBS::IF_HB_ST2::write(IF_HB_ST2); + } else { + GBS::IF_HB_ST2::write(IF_HSYNC_RST - 1); + } + // LOG(F("IF_HB_ST2: ")); LOGN(GBS::IF_HB_ST2::read()); + + if (IF_HB_SP2 > 0) { + GBS::IF_HB_SP2::write(IF_HB_SP2); + } else { + GBS::IF_HB_SP2::write(IF_HSYNC_RST - 1); + // GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 2); + } + // LOG(F("IF_HB_SP2: ")); LOGN(GBS::IF_HB_SP2::read()); +} + +void scaleHorizontal(uint16_t amountToScale, bool subtracting) +{ + uint16_t hscale = GBS::VDS_HSCALE::read(); + + // smooth out areas of interest + if (subtracting && (hscale == 513 || hscale == 512)) + amountToScale = 1; + if (!subtracting && (hscale == 511 || hscale == 512)) + amountToScale = 1; + + if (subtracting && (((int)hscale - amountToScale) <= 256)) { + hscale = 256; + GBS::VDS_HSCALE::write(hscale); + LOGN(F("limit")); + return; + } + + if (subtracting && (hscale - amountToScale > 255)) { + hscale -= amountToScale; + } else if (hscale + amountToScale < 1023) { + hscale += amountToScale; + } else if (hscale + amountToScale == 1023) { // exact max > bypass but apply VDS fetch changes + hscale = 1023; + GBS::VDS_HSCALE::write(hscale); + GBS::VDS_HSCALE_BYPS::write(1); + } else if (hscale + amountToScale > 1023) { // max + overshoot > bypass and no VDS fetch adjust + hscale = 1023; + GBS::VDS_HSCALE::write(hscale); + GBS::VDS_HSCALE_BYPS::write(1); + LOGN(F("limit")); + return; + } + + // will be scaling + GBS::VDS_HSCALE_BYPS::write(0); + + // move within VDS VB fetch area (within reason) + uint16_t htotal = GBS::VDS_HSYNC_RST::read(); + uint16_t toShift = 0; + if (hscale < 540) + toShift = 4; + else if (hscale < 640) + toShift = 3; + else + toShift = 2; + + if (subtracting) { + shiftHorizontal(toShift, true); + if ((GBS::VDS_HB_ST::read() + 5) < GBS::VDS_DIS_HB_ST::read()) { + GBS::VDS_HB_ST::write(GBS::VDS_HB_ST::read() + 5); + } else if ((GBS::VDS_DIS_HB_ST::read() + 5) < htotal) { + GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() + 5); + GBS::VDS_HB_ST::write(GBS::VDS_DIS_HB_ST::read()); // dis_hbst = hbst + } + + // fix HB_ST > HB_SP conditions + if (GBS::VDS_HB_SP::read() < (GBS::VDS_HB_ST::read() + 16)) { // HB_SP < HB_ST + if ((GBS::VDS_HB_SP::read()) > (htotal / 2)) { // but HB_SP > some small value + GBS::VDS_HB_ST::write(GBS::VDS_HB_SP::read() - 16); + } + } + } + + // !subtracting check just for readability + if (!subtracting) { + shiftHorizontal(toShift, false); + if ((GBS::VDS_HB_ST::read() - 5) > 0) { + GBS::VDS_HB_ST::write(GBS::VDS_HB_ST::read() - 5); + } + } + + // fix scaling < 512 glitch: factor even, htotal even: hbst / hbsp should be even, etc + if (hscale < 512) { + if (hscale % 2 == 0) { // hscale 512 / even + if (GBS::VDS_HB_ST::read() % 2 == 1) { + GBS::VDS_HB_ST::write(GBS::VDS_HB_ST::read() + 1); + } + if (htotal % 2 == 1) { + if (GBS::VDS_HB_SP::read() % 2 == 0) { + GBS::VDS_HB_SP::write(GBS::VDS_HB_SP::read() - 1); + } + } else { + if (GBS::VDS_HB_SP::read() % 2 == 1) { + GBS::VDS_HB_SP::write(GBS::VDS_HB_SP::read() - 1); + } + } + } else { // hscale 499 / uneven + if (GBS::VDS_HB_ST::read() % 2 == 1) { + GBS::VDS_HB_ST::write(GBS::VDS_HB_ST::read() + 1); + } + if (htotal % 2 == 0) { + if (GBS::VDS_HB_SP::read() % 2 == 1) { + GBS::VDS_HB_SP::write(GBS::VDS_HB_SP::read() - 1); + } + } else { + if (GBS::VDS_HB_SP::read() % 2 == 0) { + GBS::VDS_HB_SP::write(GBS::VDS_HB_SP::read() - 1); + } + } + } + // if scaling was < 512 and HB_ST moved, align with VDS_DIS_HB_ST + if (GBS::VDS_DIS_HB_ST::read() < GBS::VDS_HB_ST::read()) { + GBS::VDS_DIS_HB_ST::write(GBS::VDS_HB_ST::read()); + } + } + + // LOG(F("HB_ST: ")); LOGN(GBS::VDS_HB_ST::read()); + // LOG(F("HB_SP: ")); LOGN(GBS::VDS_HB_SP::read()); + LOGF("HScale: %d\n", hscale); + GBS::VDS_HSCALE::write(hscale); +} + +// moves horizontal sync (VDS or HDB as needed) +void moveHS(uint16_t amountToAdd, bool subtracting) +{ + if (rto->outModeHdBypass) { + uint16_t SP_CS_HS_ST = GBS::SP_CS_HS_ST::read(); + uint16_t SP_CS_HS_SP = GBS::SP_CS_HS_SP::read(); + uint16_t htotal = GBS::HD_HSYNC_RST::read(); + + if (videoStandardInputIsPalNtscSd()) { + htotal -= 8; // account for the way hdbypass is setup in setOutModeHdBypass() + htotal *= 2; + } + + if (htotal == 0) + return; // safety + int16_t amount = subtracting ? (0 - amountToAdd) : amountToAdd; + + if (SP_CS_HS_ST + amount < 0) { + SP_CS_HS_ST = htotal + SP_CS_HS_ST; // yep, this works :p + } + if (SP_CS_HS_SP + amount < 0) { + SP_CS_HS_SP = htotal + SP_CS_HS_SP; + } + + GBS::SP_CS_HS_ST::write((SP_CS_HS_ST + amount) % htotal); + GBS::SP_CS_HS_SP::write((SP_CS_HS_SP + amount) % htotal); + + LOG(F("HSST: ")); + LOG(GBS::SP_CS_HS_ST::read()); + LOG(F(" HSSP: ")); + LOGN(GBS::SP_CS_HS_SP::read()); + } else { + uint16_t VDS_HS_ST = GBS::VDS_HS_ST::read(); + uint16_t VDS_HS_SP = GBS::VDS_HS_SP::read(); + uint16_t htotal = GBS::VDS_HSYNC_RST::read(); + + if (htotal == 0) + return; // safety + int16_t amount = subtracting ? (0 - amountToAdd) : amountToAdd; + + if (VDS_HS_ST + amount < 0) { + VDS_HS_ST = htotal + VDS_HS_ST; // yep, this works :p + } + if (VDS_HS_SP + amount < 0) { + VDS_HS_SP = htotal + VDS_HS_SP; + } + + GBS::VDS_HS_ST::write((VDS_HS_ST + amount) % htotal); + GBS::VDS_HS_SP::write((VDS_HS_SP + amount) % htotal); + + // LOG(F("HSST: ")); LOG(GBS::VDS_HS_ST::read()); + // LOG(F(" HSSP: ")); LOGN(GBS::VDS_HS_SP::read()); + } + printVideoTimings(); +} + +void moveVS(uint16_t amountToAdd, bool subtracting) +{ + uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); + if (vtotal == 0) + return; // safety + uint16_t VDS_DIS_VB_ST = GBS::VDS_DIS_VB_ST::read(); + uint16_t newVDS_VS_ST = GBS::VDS_VS_ST::read(); + uint16_t newVDS_VS_SP = GBS::VDS_VS_SP::read(); + + if (subtracting) { + if ((newVDS_VS_ST - amountToAdd) > VDS_DIS_VB_ST) { + newVDS_VS_ST -= amountToAdd; + newVDS_VS_SP -= amountToAdd; + } else + LOGN(F("limit")); + } else { + if ((newVDS_VS_SP + amountToAdd) < vtotal) { + newVDS_VS_ST += amountToAdd; + newVDS_VS_SP += amountToAdd; + } else + LOGN(F("limit")); + } + // LOG(F("VSST: ")); LOG(newVDS_VS_ST); + // LOG(F(" VSSP: ")); LOGN(newVDS_VS_SP); + + GBS::VDS_VS_ST::write(newVDS_VS_ST); + GBS::VDS_VS_SP::write(newVDS_VS_SP); +} + +void invertHS() +{ + uint8_t high, low; + uint16_t newST, newSP; + + writeOneByte(0xf0, 3); + readFromRegister(0x0a, 1, &low); + readFromRegister(0x0b, 1, &high); + newST = ((((uint16_t)high) & 0x000f) << 8) | (uint16_t)low; + readFromRegister(0x0b, 1, &low); + readFromRegister(0x0c, 1, &high); + newSP = ((((uint16_t)high) & 0x00ff) << 4) | ((((uint16_t)low) & 0x00f0) >> 4); + + uint16_t temp = newST; + newST = newSP; + newSP = temp; + + writeOneByte(0x0a, (uint8_t)(newST & 0x00ff)); + writeOneByte(0x0b, ((uint8_t)(newSP & 0x000f) << 4) | ((uint8_t)((newST & 0x0f00) >> 8))); + writeOneByte(0x0c, (uint8_t)((newSP & 0x0ff0) >> 4)); +} + +void invertVS() +{ + uint8_t high, low; + uint16_t newST, newSP; + + writeOneByte(0xf0, 3); + readFromRegister(0x0d, 1, &low); + readFromRegister(0x0e, 1, &high); + newST = ((((uint16_t)high) & 0x000f) << 8) | (uint16_t)low; + readFromRegister(0x0e, 1, &low); + readFromRegister(0x0f, 1, &high); + newSP = ((((uint16_t)high) & 0x00ff) << 4) | ((((uint16_t)low) & 0x00f0) >> 4); + + uint16_t temp = newST; + newST = newSP; + newSP = temp; + + writeOneByte(0x0d, (uint8_t)(newST & 0x00ff)); + writeOneByte(0x0e, ((uint8_t)(newSP & 0x000f) << 4) | ((uint8_t)((newST & 0x0f00) >> 8))); + writeOneByte(0x0f, (uint8_t)((newSP & 0x0ff0) >> 4)); +} + +void scaleVertical(uint16_t amountToScale, bool subtracting) +{ + uint16_t vscale = GBS::VDS_VSCALE::read(); + + // least invasive "is vscaling enabled" check + if (vscale == 1023) { + GBS::VDS_VSCALE_BYPS::write(0); + } + + // smooth out areas of interest + if (subtracting && (vscale == 513 || vscale == 512)) + amountToScale = 1; + if (subtracting && (vscale == 684 || vscale == 683)) + amountToScale = 1; + if (!subtracting && (vscale == 511 || vscale == 512)) + amountToScale = 1; + if (!subtracting && (vscale == 682 || vscale == 683)) + amountToScale = 1; + + if (subtracting && (vscale - amountToScale > 128)) { + vscale -= amountToScale; + } else if (subtracting) { + vscale = 128; + } else if (vscale + amountToScale <= 1023) { + vscale += amountToScale; + } else if (vscale + amountToScale > 1023) { + vscale = 1023; + // don't enable vscale bypass here, since that disables ie line filter + } + + LOGF("VScale: %d\n", vscale); + GBS::VDS_VSCALE::write(vscale); +} + +// modified to move VBSP, set VBST to VBSP-2 +void shiftVertical(uint16_t amountToAdd, bool subtracting) +{ + typedef GBS::Tie Regs; + uint16_t vrst = GBS::VDS_VSYNC_RST::read() - FrameSync::getSyncLastCorrection(); + uint16_t vbst = 0, vbsp = 0; + int16_t newVbst = 0, newVbsp = 0; + + Regs::read(vbst, vbsp); + newVbst = vbst; + newVbsp = vbsp; + + if (subtracting) { + // newVbst -= amountToAdd; + newVbsp -= amountToAdd; + } else { + // newVbst += amountToAdd; + newVbsp += amountToAdd; + } + + // handle the case where hbst or hbsp have been decremented below 0 + if (newVbst < 0) { + newVbst = vrst + newVbst; + } + if (newVbsp < 0) { + newVbsp = vrst + newVbsp; + } + + // handle the case where vbst or vbsp have been incremented above vrstValue + if (newVbst > (int16_t)vrst) { + newVbst = newVbst - vrst; + } + if (newVbsp > (int16_t)vrst) { + newVbsp = newVbsp - vrst; + } + + // mod: newVbsp needs to be at least newVbst+2 + if (newVbsp < (newVbst + 2)) { + newVbsp = newVbst + 2; + } + // mod: -= 2 + newVbst = newVbsp - 2; + + Regs::write(newVbst, newVbsp); + // LOG(F("VSST: ")); LOG(newVbst); LOG(F(" VSSP: ")); LOGN(newVbsp); +} + +void shiftVerticalUp() +{ + shiftVertical(1, true); +} + +void shiftVerticalDown() +{ + shiftVertical(1, false); +} + +void shiftVerticalUpIF() +{ + // -4 to allow variance in source line count + uint8_t offset = rto->videoStandardInput == 2 ? 4 : 1; + uint16_t sourceLines = GBS::VPERIOD_IF::read() - offset; + // add an override for sourceLines, in case where the IF data is not available + if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { + sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + } + int16_t stop = GBS::IF_VB_SP::read(); + int16_t start = GBS::IF_VB_ST::read(); + + if (stop < (sourceLines - 1) && start < (sourceLines - 1)) { + stop += 2; + start += 2; + } else { + start = 0; + stop = 2; + } + GBS::IF_VB_SP::write(stop); + GBS::IF_VB_ST::write(start); +} + +void shiftVerticalDownIF() +{ + uint8_t offset = rto->videoStandardInput == 2 ? 4 : 1; + uint16_t sourceLines = GBS::VPERIOD_IF::read() - offset; + // add an override for sourceLines, in case where the IF data is not available + if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { + sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + } + + int16_t stop = GBS::IF_VB_SP::read(); + int16_t start = GBS::IF_VB_ST::read(); + + if (stop > 1 && start > 1) { + stop -= 2; + start -= 2; + } else { + start = sourceLines - 2; + stop = sourceLines; + } + GBS::IF_VB_SP::write(stop); + GBS::IF_VB_ST::write(start); +} + +void setHSyncStartPosition(uint16_t value) +{ + if (rto->outModeHdBypass) { + // GBS::HD_HS_ST::write(value); + GBS::SP_CS_HS_ST::write(value); + } else { + GBS::VDS_HS_ST::write(value); + } +} + +void setHSyncStopPosition(uint16_t value) +{ + if (rto->outModeHdBypass) { + // GBS::HD_HS_SP::write(value); + GBS::SP_CS_HS_SP::write(value); + } else { + GBS::VDS_HS_SP::write(value); + } +} + +void setMemoryHblankStartPosition(uint16_t value) +{ + GBS::VDS_HB_ST::write(value); + GBS::HD_HB_ST::write(value); +} + +void setMemoryHblankStopPosition(uint16_t value) +{ + GBS::VDS_HB_SP::write(value); + GBS::HD_HB_SP::write(value); +} + +void setDisplayHblankStartPosition(uint16_t value) +{ + GBS::VDS_DIS_HB_ST::write(value); +} + +void setDisplayHblankStopPosition(uint16_t value) +{ + GBS::VDS_DIS_HB_SP::write(value); +} + +void setVSyncStartPosition(uint16_t value) +{ + GBS::VDS_VS_ST::write(value); + GBS::HD_VS_ST::write(value); +} + +void setVSyncStopPosition(uint16_t value) +{ + GBS::VDS_VS_SP::write(value); + GBS::HD_VS_SP::write(value); +} + +void setMemoryVblankStartPosition(uint16_t value) +{ + GBS::VDS_VB_ST::write(value); + GBS::HD_VB_ST::write(value); +} + +void setMemoryVblankStopPosition(uint16_t value) +{ + GBS::VDS_VB_SP::write(value); + GBS::HD_VB_SP::write(value); +} + +void setDisplayVblankStartPosition(uint16_t value) +{ + GBS::VDS_DIS_VB_ST::write(value); +} + +void setDisplayVblankStopPosition(uint16_t value) +{ + GBS::VDS_DIS_VB_SP::write(value); +} + +uint16_t getCsVsStart() +{ + return (GBS::SP_SDCS_VSST_REG_H::read() << 8) + GBS::SP_SDCS_VSST_REG_L::read(); +} + +uint16_t getCsVsStop() +{ + return (GBS::SP_SDCS_VSSP_REG_H::read() << 8) + GBS::SP_SDCS_VSSP_REG_L::read(); +} + +void setCsVsStart(uint16_t start) +{ + GBS::SP_SDCS_VSST_REG_H::write(start >> 8); + GBS::SP_SDCS_VSST_REG_L::write(start & 0xff); +} + +void setCsVsStop(uint16_t stop) +{ + GBS::SP_SDCS_VSSP_REG_H::write(stop >> 8); + GBS::SP_SDCS_VSSP_REG_L::write(stop & 0xff); +} + +void printVideoTimings() +{ + if (rto->presetID < 0x20) { + LOGN(); + LOG(F("HT / scale : ")); + LOG(GBS::VDS_HSYNC_RST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_HSCALE::read()); + LOG(F("HS ST/SP : ")); + LOG(GBS::VDS_HS_ST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_HS_SP::read()); + LOG(F("HB ST/SP(d) : ")); + LOG(GBS::VDS_DIS_HB_ST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_DIS_HB_SP::read()); + LOG(F("HB ST/SP : ")); + LOG(GBS::VDS_HB_ST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_HB_SP::read()); + LOGN(F("------")); + // vertical + LOG(F("VT / scale : ")); + LOG(GBS::VDS_VSYNC_RST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_VSCALE::read()); + LOG(F("VS ST/SP : ")); + LOG(GBS::VDS_VS_ST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_VS_SP::read()); + LOG(F("VB ST/SP(d) : ")); + LOG(GBS::VDS_DIS_VB_ST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_DIS_VB_SP::read()); + LOG(F("VB ST/SP : ")); + LOG(GBS::VDS_VB_ST::read()); + LOG(F(" ")); + LOGN(GBS::VDS_VB_SP::read()); + // IF V offset + LOG(F("IF VB ST/SP : ")); + LOG(GBS::IF_VB_ST::read()); + LOG(F(" ")); + LOGN(GBS::IF_VB_SP::read()); + } else { + LOGN(F("")); + LOG(F("HD_HSYNC_RST : ")); + LOGN(GBS::HD_HSYNC_RST::read()); + LOG(F("HD_INI_ST : ")); + LOGN(GBS::HD_INI_ST::read()); + LOG(F("HS ST/SP : ")); + LOG(GBS::SP_CS_HS_ST::read()); + LOG(F(" ")); + LOGN(GBS::SP_CS_HS_SP::read()); + LOG(F("HB ST/SP : ")); + LOG(GBS::HD_HB_ST::read()); + LOG(F(" ")); + LOGN(GBS::HD_HB_SP::read()); + LOGN(F("------")); + // vertical + LOG(F("VS ST/SP : ")); + LOG(GBS::HD_VS_ST::read()); + LOG(F(" ")); + LOGN(GBS::HD_VS_SP::read()); + LOG(F("VB ST/SP : ")); + LOG(GBS::HD_VB_ST::read()); + LOG(F(" ")); + LOGN(GBS::HD_VB_SP::read()); + } + + LOG(F("CsVT : ")); + LOGN(GBS::STATUS_SYNC_PROC_VTOTAL::read()); + LOG(F("CsVS_ST/SP : ")); + LOG(getCsVsStart()); + LOG(F(" ")); + LOGN(getCsVsStop()); +} + +void set_htotal(uint16_t htotal) +{ + // ModeLine "1280x960" 108.00 1280 1376 1488 1800 960 961 964 1000 +HSync +VSync + // front porch: H2 - H1: 1376 - 1280 + // back porch : H4 - H3: 1800 - 1488 + // sync pulse : H3 - H2: 1488 - 1376 + + uint16_t h_blank_display_start_position = htotal - 1; + uint16_t h_blank_display_stop_position = htotal - ((htotal * 3) / 4); + uint16_t center_blank = ((h_blank_display_stop_position / 2) * 3) / 4; // a bit to the left + uint16_t h_sync_start_position = center_blank - (center_blank / 2); + uint16_t h_sync_stop_position = center_blank + (center_blank / 2); + uint16_t h_blank_memory_start_position = h_blank_display_start_position - 1; + uint16_t h_blank_memory_stop_position = h_blank_display_stop_position - (h_blank_display_stop_position / 50); + + GBS::VDS_HSYNC_RST::write(htotal); + GBS::VDS_HS_ST::write(h_sync_start_position); + GBS::VDS_HS_SP::write(h_sync_stop_position); + GBS::VDS_DIS_HB_ST::write(h_blank_display_start_position); + GBS::VDS_DIS_HB_SP::write(h_blank_display_stop_position); + GBS::VDS_HB_ST::write(h_blank_memory_start_position); + GBS::VDS_HB_SP::write(h_blank_memory_stop_position); +} + +void set_vtotal(uint16_t vtotal) +{ + uint16_t VDS_DIS_VB_ST = vtotal - 2; // just below vtotal + uint16_t VDS_DIS_VB_SP = (vtotal >> 6) + 8; // positive, above new sync stop position + uint16_t VDS_VB_ST = ((uint16_t)(vtotal * 0.016f)) & 0xfffe; // small fraction of vtotal + uint16_t VDS_VB_SP = VDS_VB_ST + 2; // always VB_ST + 2 + uint16_t v_sync_start_position = 1; + uint16_t v_sync_stop_position = 5; + // most low line count formats have negative sync! + // exception: 1024x768 (1344x806 total) has both sync neg. // also 1360x768 (1792x795 total) + if ((vtotal < 530) || (vtotal >= 803 && vtotal <= 809) || (vtotal >= 793 && vtotal <= 798)) { + uint16_t temp = v_sync_start_position; + v_sync_start_position = v_sync_stop_position; + v_sync_stop_position = temp; + } + + GBS::VDS_VSYNC_RST::write(vtotal); + GBS::VDS_VS_ST::write(v_sync_start_position); + GBS::VDS_VS_SP::write(v_sync_stop_position); + GBS::VDS_VB_ST::write(VDS_VB_ST); + GBS::VDS_VB_SP::write(VDS_VB_SP); + GBS::VDS_DIS_VB_ST::write(VDS_DIS_VB_ST); + GBS::VDS_DIS_VB_SP::write(VDS_DIS_VB_SP); + + // VDS_VSYN_SIZE1 + VDS_VSYN_SIZE2 to VDS_VSYNC_RST + 2 + GBS::VDS_VSYN_SIZE1::write(GBS::VDS_VSYNC_RST::read() + 2); + GBS::VDS_VSYN_SIZE2::write(GBS::VDS_VSYNC_RST::read() + 2); +} + +void resetDebugPort() +{ + GBS::PAD_BOUT_EN::write(1); // output to pad enabled + GBS::IF_TEST_EN::write(1); + GBS::IF_TEST_SEL::write(3); // IF vertical period signal + GBS::TEST_BUS_SEL::write(0xa); // test bus to SP + GBS::TEST_BUS_EN::write(1); + GBS::TEST_BUS_SP_SEL::write(0x0f); // SP test signal select (vsync in, after SOG separation) + GBS::MEM_FF_TOP_FF_SEL::write(1); // g0g13/14 shows FIFO stats (capture, rff, wff, etc) + // SP test bus enable bit is included in TEST_BUS_SP_SEL + GBS::VDS_TEST_EN::write(1); // VDS test enable +} + +void readEeprom() +{ + int addr = 0; + const uint8_t eepromAddr = 0x50; + Wire.beginTransmission(eepromAddr); + // if (addr >= 0x1000) { addr = 0; } + Wire.write(addr >> 8); // high addr byte, 4 bits + + Wire.write((uint8_t)addr); // low addr byte, 8 bits = 12 bits (0xfff max) + Wire.endTransmission(); + Wire.requestFrom(eepromAddr, (uint8_t)128); + uint8_t readData = 0; + uint8_t i = 0; + while (Wire.available()) { + LOG(F("addr 0x")); + LOGF("0x%04X", i); + LOG(F(": 0x")); + readData = Wire.read(); + LOGF("0x%04X\n", readData); + // addr++; + i++; + } +} + +void setIfHblankParameters() +{ + if (!rto->outModeHdBypass) { + uint16_t pll_divider = GBS::PLLAD_MD::read(); + + // if line doubling (PAL, NTSC), div 2 + a couple pixels + GBS::IF_HSYNC_RST::write(((pll_divider >> 1) + 13) & 0xfffe); // 1_0e + GBS::IF_LINE_SP::write(GBS::IF_HSYNC_RST::read() + 1); // 1_22 + if (rto->presetID == 0x05) { + // override for 1080p manually for now (pll_divider alone isn't correct :/) + GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() + 32); + GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() + 32); + } + if (rto->presetID == 0x15) { + GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() + 20); + GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() + 20); + } + + if (GBS::IF_LD_RAM_BYPS::read()) { + // no LD = EDTV or similar + GBS::IF_HB_SP2::write((uint16_t)((float)pll_divider * 0.06512f) & 0xfffe); // 1_1a // 0.06512f + // pll_divider / 2 - 3 is minimum IF_HB_ST2 + GBS::IF_HB_ST2::write((uint16_t)((float)pll_divider * 0.4912f) & 0xfffe); // 1_18 + } else { + // LD mode (PAL, NTSC) + GBS::IF_HB_SP2::write(4 + ((uint16_t)((float)pll_divider * 0.0224f) & 0xfffe)); // 1_1a + GBS::IF_HB_ST2::write((uint16_t)((float)pll_divider * 0.4550f) & 0xfffe); // 1_18 + + if (GBS::IF_HB_ST2::read() >= 0x420) { + // limit (fifo?) (0x420 = 1056) (might be 0x424 instead) + // limit doesn't apply to EDTV modes, where 1_18 typically = 0x4B0 + GBS::IF_HB_ST2::write(0x420); + } + + if (rto->presetID == 0x05 || rto->presetID == 0x15) { + // override 1_1a for 1080p manually for now (pll_divider alone isn't correct :/) + GBS::IF_HB_SP2::write(0x2A); + } + + // position move via 1_26 and reserve for deinterlacer: add IF RST pixels + // seems no extra pixels available at around PLLAD:84A or 2122px + // uint16_t currentRst = GBS::IF_HSYNC_RST::read(); + // GBS::IF_HSYNC_RST::write((currentRst + (currentRst / 15)) & 0xfffe); // 1_0e + // GBS::IF_LINE_SP::write(GBS::IF_HSYNC_RST::read() + 1); // 1_22 + } + } +} + +void fastGetBestHtotal() +{ + uint32_t inStart, inStop; + signed long inPeriod = 1; + double inHz = 1.0; + GBS::TEST_BUS_SEL::write(0xa); + if (FrameSync::vsyncInputSample(&inStart, &inStop)) { + inPeriod = (inStop - inStart) >> 1; + if (inPeriod > 1) { + inHz = (double)1000000 / (double)inPeriod; + } + LOG(F("inPeriod: ")); + LOGN(inPeriod); + LOG(F("in hz: ")); + LOGN(inHz); + } else { + LOGN(F("error")); + } + + uint16_t newVtotal = GBS::VDS_VSYNC_RST::read(); + double bestHtotal = 108000000 / ((double)newVtotal * inHz); // 107840000 + double bestHtotal50 = 108000000 / ((double)newVtotal * 50); + double bestHtotal60 = 108000000 / ((double)newVtotal * 60); + LOG(F("newVtotal: ")); + LOGN(newVtotal); + // display clock probably not exact 108mhz + LOG(F("bestHtotal: ")); + LOGN(bestHtotal); + LOG(F("bestHtotal50: ")); + LOGN(bestHtotal50); + LOG(F("bestHtotal60: ")); + LOGN(bestHtotal60); + if (bestHtotal > 800 && bestHtotal < 3200) { + // applyBestHTotal((uint16_t)bestHtotal); + // FrameSync::resetWithoutRecalculation(); // was single use of this function, function has changed since + } +} + +bool runAutoBestHTotal() +{ + if (!FrameSync::ready() && rto->autoBestHtotalEnabled == true && rto->videoStandardInput > 0 && rto->videoStandardInput < 15) { + + // Serial.println("running"); + // unsigned long startTime = millis(); + + bool stableNow = 1; + + for (uint8_t i = 0; i < 64; i++) { + if (!getStatus16SpHsStable()) { + stableNow = 0; + // Serial.println("prevented: !getStatus16SpHsStable"); + break; + } + } + + if (stableNow) { + if (GBS::STATUS_INT_SOG_BAD::read()) { + // Serial.println("prevented_2!"); + resetInterruptSogBadBit(); + delay(40); + stableNow = false; + } + resetInterruptSogBadBit(); + + if (stableNow && (getVideoMode() == rto->videoStandardInput)) { + uint8_t testBusSelBackup = GBS::TEST_BUS_SEL::read(); + uint8_t vdsBusSelBackup = GBS::VDS_TEST_BUS_SEL::read(); + uint8_t ifBusSelBackup = GBS::IF_TEST_SEL::read(); + + if (testBusSelBackup != 0) + GBS::TEST_BUS_SEL::write(0); // needs decimation + if + if (vdsBusSelBackup != 0) + GBS::VDS_TEST_BUS_SEL::write(0); // VDS test # 0 = VBlank + if (ifBusSelBackup != 3) + GBS::IF_TEST_SEL::write(3); // IF averaged frame time + + yield(); + uint16_t bestHTotal = FrameSync::init(); // critical task + yield(); + + GBS::TEST_BUS_SEL::write(testBusSelBackup); // always restore from backup (TB has changed) + if (vdsBusSelBackup != 0) + GBS::VDS_TEST_BUS_SEL::write(vdsBusSelBackup); + if (ifBusSelBackup != 3) + GBS::IF_TEST_SEL::write(ifBusSelBackup); + + if (GBS::STATUS_INT_SOG_BAD::read()) { + // Serial.println("prevented_5 INT_SOG_BAD!"); + stableNow = false; + } + for (uint8_t i = 0; i < 16; i++) { + if (!getStatus16SpHsStable()) { + stableNow = 0; + // Serial.println("prevented_5: !getStatus16SpHsStable"); + break; + } + } + resetInterruptSogBadBit(); + + if (bestHTotal > 4095) { + if (!rto->forceRetime) { + stableNow = false; + } else { + // roll with it + bestHTotal = 4095; + } + } + + if (stableNow) { + for (uint8_t i = 0; i < 24; i++) { + delay(1); + if (!getStatus16SpHsStable()) { + stableNow = false; + // Serial.println("prevented_3!"); + break; + } + } + } + + if (bestHTotal > 0 && stableNow) { + bool success = applyBestHTotal(bestHTotal); + if (success) { + rto->syncLockFailIgnore = 16; + // Serial.print("ok, took: "); + // Serial.println(millis() - startTime); + return true; // success + } + } + } + } + + // reaching here can happen even if stableNow == 1 + if (!stableNow) { + FrameSync::reset(uopt->frameTimeLockMethod); + + if (rto->syncLockFailIgnore > 0) { + rto->syncLockFailIgnore--; + if (rto->syncLockFailIgnore == 0) { + GBS::DAC_RGBS_PWDNZ::write(1); // xth chance + if (!uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // xth chance + } + rto->autoBestHtotalEnabled = false; + } + } + Serial.print(F("bestHtotal retry (")); + Serial.print(rto->syncLockFailIgnore); + Serial.println(")"); + } + } else if (FrameSync::ready()) { + // FS ready but mode is 0 or 15 or autoBestHtotal is off + return true; + } + + if (rto->continousStableCounter != 0 && rto->continousStableCounter != 255) { + rto->continousStableCounter++; // stop repetitions + } + + return false; +} + +bool applyBestHTotal(uint16_t bestHTotal) +{ + if (rto->outModeHdBypass) { + return true; // false? doesn't matter atm + } + + uint16_t orig_htotal = GBS::VDS_HSYNC_RST::read(); + int diffHTotal = bestHTotal - orig_htotal; + uint16_t diffHTotalUnsigned = abs(diffHTotal); + + if (((diffHTotalUnsigned == 0) || (rto->extClockGenDetected && diffHTotalUnsigned == 1)) && // all this + !rto->forceRetime) // and that + { + if (!uopt->enableFrameTimeLock) { // FTL can double throw this when it resets to adjust + LOG(F("HTotal Adjust (skipped)")); + + if (!rto->extClockGenDetected) { + float sfr = getSourceFieldRate(0); + yield(); // wifi + float ofr = getOutputFrameRate(); + if (sfr < 1.0f) { + sfr = getSourceFieldRate(0); // retry + } + if (ofr < 1.0f) { + ofr = getOutputFrameRate(); // retry + } + LOG(F(", source Hz: ")); + LOGF("%.3f", sfr); // prec. 3 + LOG(F(", output Hz: ")); + LOGF("%.3f", ofr); // prec. 3 + } else { + LOGN(); + } + } + return true; // nothing to do + } + + if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() == 1) { + // source is 50Hz, preset has to stay at 60Hz: return + return true; + } + + bool isLargeDiff = (diffHTotalUnsigned > (orig_htotal * 0.06f)) ? true : false; // typical diff: 1802 to 1794 (=8) + + if (isLargeDiff && (getVideoMode() == 8 || rto->videoStandardInput == 14)) { + // arcade stuff syncs down from 60 to 52 Hz.. + isLargeDiff = (diffHTotalUnsigned > (orig_htotal * 0.16f)) ? true : false; + } + + if (isLargeDiff) { + LOGN(F("ABHT: large diff")); + } + + // rto->forceRetime = true means the correction should be forced (command '.') + if (isLargeDiff && (rto->forceRetime == false)) { + if (rto->videoStandardInput != 14) { + rto->failRetryAttempts++; + if (rto->failRetryAttempts < 8) { + LOGN(F("retry")); + FrameSync::reset(uopt->frameTimeLockMethod); + delay(60); + } else { + LOGN(F("give up")); + rto->autoBestHtotalEnabled = false; + } + } + return false; // large diff, no forced + } + + // bestHTotal 0? could be an invald manual retime + if (bestHTotal == 0) { + Serial.println(F("bestHTotal 0")); + return false; + } + + if (rto->forceRetime == false) { + if (GBS::STATUS_INT_SOG_BAD::read() == 1) { + // Serial.println("prevented in apply"); + return false; + } + } + + rto->failRetryAttempts = 0; // else all okay!, reset to 0 + + // move blanking (display) + uint16_t h_blank_display_start_position = GBS::VDS_DIS_HB_ST::read(); + uint16_t h_blank_display_stop_position = GBS::VDS_DIS_HB_SP::read(); + uint16_t h_blank_memory_start_position = GBS::VDS_HB_ST::read(); + uint16_t h_blank_memory_stop_position = GBS::VDS_HB_SP::read(); + + // new 25.10.2019 + // uint16_t blankingAreaTotal = bestHTotal * 0.233f; + // h_blank_display_start_position += (diffHTotal / 2); + // h_blank_display_stop_position += (diffHTotal / 2); + // h_blank_memory_start_position = bestHTotal - (blankingAreaTotal * 0.212f); + // h_blank_memory_stop_position = blankingAreaTotal * 0.788f; + + // h_blank_memory_start_position usually is == h_blank_display_start_position + if (h_blank_memory_start_position == h_blank_display_start_position) { + h_blank_display_start_position += (diffHTotal / 2); + h_blank_display_stop_position += (diffHTotal / 2); + h_blank_memory_start_position = h_blank_display_start_position; // normal case + h_blank_memory_stop_position += (diffHTotal / 2); + } else { + h_blank_display_start_position += (diffHTotal / 2); + h_blank_display_stop_position += (diffHTotal / 2); + h_blank_memory_start_position += (diffHTotal / 2); // the exception (currently 1280x1024) + h_blank_memory_stop_position += (diffHTotal / 2); + } + + if (diffHTotal < 0) { + h_blank_display_start_position &= 0xfffe; + h_blank_display_stop_position &= 0xfffe; + h_blank_memory_start_position &= 0xfffe; + h_blank_memory_stop_position &= 0xfffe; + } else if (diffHTotal > 0) { + h_blank_display_start_position += 1; + h_blank_display_start_position &= 0xfffe; + h_blank_display_stop_position += 1; + h_blank_display_stop_position &= 0xfffe; + h_blank_memory_start_position += 1; + h_blank_memory_start_position &= 0xfffe; + h_blank_memory_stop_position += 1; + h_blank_memory_stop_position &= 0xfffe; + } + + // don't move HSync with small diffs + uint16_t h_sync_start_position = GBS::VDS_HS_ST::read(); + uint16_t h_sync_stop_position = GBS::VDS_HS_SP::read(); + + // fix over / underflows + if (h_blank_display_start_position > (bestHTotal - 8) || isLargeDiff) { + // typically happens when scaling Hz up (60 to 70) + // Serial.println("overflow h_blank_display_start_position"); + h_blank_display_start_position = bestHTotal * 0.936f; + } + if (h_blank_display_stop_position > bestHTotal || isLargeDiff) { + // Serial.println("overflow h_blank_display_stop_position"); + h_blank_display_stop_position = bestHTotal * 0.178f; + } + if ((h_blank_memory_start_position > bestHTotal) || (h_blank_memory_start_position > h_blank_display_start_position) || isLargeDiff) { + // Serial.println("overflow h_blank_memory_start_position"); + h_blank_memory_start_position = h_blank_display_start_position * 0.971f; + } + if (h_blank_memory_stop_position > bestHTotal || isLargeDiff) { + // Serial.println("overflow h_blank_memory_stop_position"); + h_blank_memory_stop_position = h_blank_display_stop_position * 0.64f; + } + + // check whether HS spills over HBSPD + if (h_sync_start_position > h_sync_stop_position && (h_sync_start_position < (bestHTotal / 2))) { // is neg HSync + if (h_sync_start_position >= h_blank_display_stop_position) { + h_sync_start_position = h_blank_display_stop_position * 0.8f; + h_sync_stop_position = 4; // good idea to move this close to 0 as well + } + } else { + if (h_sync_stop_position >= h_blank_display_stop_position) { + h_sync_stop_position = h_blank_display_stop_position * 0.8f; + h_sync_start_position = 4; // + } + } + + // just fix HS + if (isLargeDiff) { + if (h_sync_start_position > h_sync_stop_position && (h_sync_start_position < (bestHTotal / 2))) { // is neg HSync + h_sync_stop_position = 4; + // stop = at least start, then a bit outwards + h_sync_start_position = 16 + (h_blank_display_stop_position * 0.3f); + } else { + h_sync_start_position = 4; + h_sync_stop_position = 16 + (h_blank_display_stop_position * 0.3f); + } + } + + // finally, fix forced timings with large diff + // update: doesn't seem necessary anymore + // if (isLargeDiff) { + // h_blank_display_start_position = bestHTotal * 0.946f; + // h_blank_display_stop_position = bestHTotal * 0.22f; + // h_blank_memory_start_position = h_blank_display_start_position * 0.971f; + // h_blank_memory_stop_position = h_blank_display_stop_position * 0.64f; + + // if (h_sync_start_position > h_sync_stop_position && (h_sync_start_position < (bestHTotal / 2))) { // is neg HSync + // h_sync_stop_position = 0; + // // stop = at least start, then a bit outwards + // h_sync_start_position = 16 + (h_blank_display_stop_position * 0.4f); + // } + // else { + // h_sync_start_position = 0; + // h_sync_stop_position = 16 + (h_blank_display_stop_position * 0.4f); + // } + //} + + if (diffHTotal != 0) { // apply + // delay the change to field start, a bit more compatible + uint16_t timeout = 0; + while ((GBS::STATUS_VDS_FIELD::read() == 1) && (++timeout < 400)) + ; + while ((GBS::STATUS_VDS_FIELD::read() == 0) && (++timeout < 800)) + ; + + GBS::VDS_HSYNC_RST::write(bestHTotal); + GBS::VDS_DIS_HB_ST::write(h_blank_display_start_position); + GBS::VDS_DIS_HB_SP::write(h_blank_display_stop_position); + GBS::VDS_HB_ST::write(h_blank_memory_start_position); + GBS::VDS_HB_SP::write(h_blank_memory_stop_position); + GBS::VDS_HS_ST::write(h_sync_start_position); + GBS::VDS_HS_SP::write(h_sync_stop_position); + } + + bool print = 1; + if (uopt->enableFrameTimeLock) { + if ((GBS::GBS_RUNTIME_FTL_ADJUSTED::read() == 1) && !rto->forceRetime) { + // FTL enabled and regular update, so don't print + print = 0; + } + GBS::GBS_RUNTIME_FTL_ADJUSTED::write(0); + } + + rto->forceRetime = false; + + if (print) { + LOG(F("HTotal Adjust: ")); + if (diffHTotal >= 0) { + LOG(F(" ")); // formatting to align with negative value readouts + } + LOG(diffHTotal); + + if (!rto->extClockGenDetected) { + float sfr = getSourceFieldRate(0); + delay(0); + float ofr = getOutputFrameRate(); + if (sfr < 1.0f) { + sfr = getSourceFieldRate(0); // retry + } + if (ofr < 1.0f) { + ofr = getOutputFrameRate(); // retry + } + LOG(F(", source Hz: ")); + LOGF("%.3f", sfr); // prec. 3 + LOG(F(", output Hz: ")); + LOGF("%.3f", ofr); // prec. 3 + } else { + LOGN(); + } + } + + return true; +} + +float getOutputFrameRate() +{ + double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; + uint8_t testBusSelBackup = GBS::TEST_BUS_SEL::read(); + uint8_t debugPinBackup = GBS::PAD_BOUT_EN::read(); + + if (debugPinBackup != 1) + GBS::PAD_BOUT_EN::write(1); // enable output to pin for test + + if (testBusSelBackup != 2) + GBS::TEST_BUS_SEL::write(2); // 0x4d = 0x22 VDS test + + float retVal = 0; + + uint32_t fieldTimeTicks = FrameSync::getPulseTicks(); + if (fieldTimeTicks == 0) { + // try again + fieldTimeTicks = FrameSync::getPulseTicks(); + } + + if (fieldTimeTicks > 0) { + retVal = esp8266_clock_freq / (double)fieldTimeTicks; + if (retVal < 47.0f || retVal > 86.0f) { + // try again + fieldTimeTicks = FrameSync::getPulseTicks(); + if (fieldTimeTicks > 0) { + retVal = esp8266_clock_freq / (double)fieldTimeTicks; + } + } + } + + GBS::TEST_BUS_SEL::write(testBusSelBackup); + GBS::PAD_BOUT_EN::write(debugPinBackup); + + return retVal; +} + +// used for RGBHV to determine the ADPLL speed "level" / can jitter with SOG Sync +uint32_t getPllRate() +{ + uint32_t esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; + uint8_t testBusSelBackup = GBS::TEST_BUS_SEL::read(); + uint8_t spBusSelBackup = GBS::TEST_BUS_SP_SEL::read(); + uint8_t debugPinBackup = GBS::PAD_BOUT_EN::read(); + + if (testBusSelBackup != 0xa) { + GBS::TEST_BUS_SEL::write(0xa); + } + if (rto->syncTypeCsync) { + if (spBusSelBackup != 0x6b) + GBS::TEST_BUS_SP_SEL::write(0x6b); + } else { + if (spBusSelBackup != 0x09) + GBS::TEST_BUS_SP_SEL::write(0x09); + } + GBS::PAD_BOUT_EN::write(1); // enable output to pin for test + yield(); // BOUT signal and wifi + delayMicroseconds(200); + uint32_t ticks = FrameSync::getPulseTicks(); + + // restore + GBS::PAD_BOUT_EN::write(debugPinBackup); + if (testBusSelBackup != 0xa) { + GBS::TEST_BUS_SEL::write(testBusSelBackup); + } + GBS::TEST_BUS_SP_SEL::write(spBusSelBackup); + + uint32_t retVal = 0; + if (ticks > 0) { + retVal = esp8266_clock_freq / ticks; + } + + return retVal; +} + +#define AUTO_GAIN_INIT 0x48 + +void doPostPresetLoadSteps() +{ + // unsigned long postLoadTimer = millis(); + + // adco->r_gain gets applied if uopt->enableAutoGain is set. + if (uopt->enableAutoGain) { + if (uopt->presetPreference == OutputCustomized) { + // Loaded custom preset, we want to keep newly loaded gain. Save + // gain written by loadPresetFromLFS -> writeProgramArrayNew. + adco->r_gain = GBS::ADC_RGCTRL::read(); + adco->g_gain = GBS::ADC_GGCTRL::read(); + adco->b_gain = GBS::ADC_BGCTRL::read(); + } else { + // Loaded fixed preset. Keep adco->r_gain from before overwriting + // registers. + } + } + + // GBS::PAD_SYNC_OUT_ENZ::write(1); // no sync out + // GBS::DAC_RGBS_PWDNZ::write(0); // no DAC + // GBS::SFTRST_MEM_FF_RSTZ::write(0); // mem fifos keep in reset + + if (rto->videoStandardInput == 0) { + uint8_t videoMode = getVideoMode(); + LOG(F("post preset: rto->videoStandardInput 0 > ")); + LOGN(videoMode); + if (videoMode > 0) { + rto->videoStandardInput = videoMode; + } + } + rto->presetID = GBS::GBS_PRESET_ID::read(); + rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); + + GBS::ADC_UNUSED_64::write(0); + GBS::ADC_UNUSED_65::write(0); // clear temp storage + GBS::ADC_UNUSED_66::write(0); + GBS::ADC_UNUSED_67::write(0); // clear temp storage + GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) + + if (!rto->isCustomPreset) { + prepareSyncProcessor(); // todo: handle modes 14 and 15 better, now that they support scaling + } + if (rto->videoStandardInput == 14) { + // copy of code in bypassModeSwitch_RGBHV + if (rto->syncTypeCsync == false) { + GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: from hs // use ADC and turn it off = no SOG + GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG // having it 0 drags down the SOG (hsync) input; = 1: need to supress SOG decoding + GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) + GBS::SP_SOG_MODE::write(0); // 5_56 bit 0 // 0: normal, 1: SOG + GBS::SP_NO_COAST_REG::write(1); // vblank coasting off + GBS::SP_PRE_COAST::write(0); + GBS::SP_POST_COAST::write(0); + GBS::SP_H_PULSE_IGNOR::write(0xff); // cancel out SOG decoding + GBS::SP_SYNC_BYPS::write(0); // external H+V sync for decimator (+ sync out) | 1 to mirror in sync, 0 to output processed sync + GBS::SP_HS_POL_ATO::write(1); // 5_55 4 auto polarity for retiming + GBS::SP_VS_POL_ATO::write(1); // 5_55 6 + GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS + GBS::SP_H_PROTECT::write(0); // 5_3e 4 disable for H/V + rto->phaseADC = 16; + rto->phaseSP = 8; + } else { + // todo: SOG SRC can be ADC or HS input pin. HS requires TTL level, ADC can use lower levels + // HS seems to have issues at low PLL speeds + // maybe add detection whether ADC Sync is needed + GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: hs is sog source + GBS::SP_EXT_SYNC_SEL::write(1); // disconnect HV input + GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG + GBS::SP_SOG_MODE::write(1); // apparently needs to be off for HS input (on for ADC) + GBS::SP_NO_COAST_REG::write(0); // vblank coasting on + GBS::SP_PRE_COAST::write(4); // 5_38, > 4 can be seen with clamp invert on the lower lines + GBS::SP_POST_COAST::write(7); + GBS::SP_SYNC_BYPS::write(0); // use regular sync for decimator (and sync out) path + GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS + GBS::SP_H_PROTECT::write(1); // 5_3e 4 enable for SOG + rto->currentLevelSOG = 24; + rto->phaseADC = 16; + rto->phaseSP = 8; + } + } + + GBS::SP_H_PROTECT::write(0); + GBS::SP_COAST_INV_REG::write(0); // just in case + if (!rto->outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) { + // setOutModeHdBypass has it's own and needs to update later + updateSpDynamic(0); // remember: rto->videoStandardInput for RGB(C/HV) in scaling is 1, 2 or 3 here + } + + GBS::SP_NO_CLAMP_REG::write(1); // (keep) clamp disabled, to be enabled when position determined + GBS::OUT_SYNC_CNTRL::write(1); // prepare sync out to PAD + + // auto offset adc prep + GBS::ADC_AUTO_OFST_PRD::write(1); // by line (0 = by frame) + GBS::ADC_AUTO_OFST_DELAY::write(0); // sample delay 0 (1 to 4 pipes) + GBS::ADC_AUTO_OFST_STEP::write(0); // 0 = abs diff, then 1 to 3 steps + GBS::ADC_AUTO_OFST_TEST::write(1); + GBS::ADC_AUTO_OFST_RANGE_REG::write(0x00); // 5_0f U/V ranges = 0 (full range, 1 to 15) + + if (rto->inputIsYpBpR == true) { + applyYuvPatches(); + } else { + applyRGBPatches(); + } + + if (rto->outModeHdBypass) { + GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP + rto->autoBestHtotalEnabled = false; + } else { + rto->autoBestHtotalEnabled = true; + } + + rto->phaseADC = GBS::PA_ADC_S::read(); // we can't know which is right, get from preset + rto->phaseSP = 8; // get phase into global variables early: before latching + + if (rto->inputIsYpBpR) { + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 14; + } else { + rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; // similar to yuv, allow variations + } + + setAndUpdateSogLevel(rto->currentLevelSOG); + + if (!rto->isCustomPreset) { + // Writes ADC_RGCTRL. If auto gain is enabled, ADC_RGCTRL will be + // overwritten further down at `uopt->enableAutoGain == 1`. + setAdcParametersGainAndOffset(); + } + + GBS::GPIO_CONTROL_00::write(0x67); // most GPIO pins regular GPIO + GBS::GPIO_CONTROL_01::write(0x00); // all GPIO outputs disabled + rto->clampPositionIsSet = 0; + rto->coastPositionIsSet = 0; + rto->phaseIsSet = 0; + rto->continousStableCounter = 0; + rto->noSyncCounter = 0; + rto->motionAdaptiveDeinterlaceActive = false; + rto->scanlinesEnabled = false; + rto->failRetryAttempts = 0; + rto->videoIsFrozen = true; // ensures unfreeze + rto->sourceDisconnected = false; // this must be true if we reached here (no syncwatcher operation) + rto->boardHasPower = true; // same + + if (rto->presetID == 0x06 || rto->presetID == 0x16) { + rto->isCustomPreset = 0; // override so it applies section 2 deinterlacer settings + } + + if (!rto->isCustomPreset) { + if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || + rto->videoStandardInput == 8 || rto->videoStandardInput == 9) { + GBS::IF_LD_RAM_BYPS::write(1); // 1_0c 0 no LD, do this before setIfHblankParameters + } + + // setIfHblankParameters(); // 1_0e, 1_18, 1_1a + GBS::IF_INI_ST::write(0); // 16.08.19: don't calculate, use fixed to 0 + // the following sets a field offset that eliminates 240p content forced to 480i flicker + // GBS::IF_INI_ST::write(GBS::PLLAD_MD::read() * 0.4261f); // upper: * 0.4282f lower: 0.424f + + GBS::IF_HS_INT_LPF_BYPS::write(0); // 1_02 2 + // 0 allows int/lpf for smoother scrolling with non-ideal scaling, also reduces jailbars and even noise + // interpolation or lpf available, lpf looks better + GBS::IF_HS_SEL_LPF::write(1); // 1_02 1 + GBS::IF_HS_PSHIFT_BYPS::write(1); // 1_02 3 nonlinear scale phase shift bypass + // 1_28 1 1:hbin generated write reset 0:line generated write reset + GBS::IF_LD_WRST_SEL::write(1); // at 1 fixes output position regardless of 1_24 + // GBS::MADPT_Y_DELAY_UV_DELAY::write(0); // 2_17 default: 0 // don't overwrite + + GBS::SP_RT_HS_ST::write(0); // 5_49 // retiming hs ST, SP + GBS::SP_RT_HS_SP::write(GBS::PLLAD_MD::read() * 0.93f); + + GBS::VDS_PK_LB_CORE::write(0); // 3_44 0-3 // 1 for anti source jailbars + GBS::VDS_PK_LH_CORE::write(0); // 3_46 0-3 // 1 for anti source jailbars + if (rto->presetID == 0x05 || rto->presetID == 0x15) { + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 // peaking HF + GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 + } else { + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 + } + GBS::VDS_PK_VL_HL_SEL::write(0); // 3_43 0 if 1 then 3_45 HF almost no effect (coring 0xf9) + GBS::VDS_PK_VL_HH_SEL::write(0); // 3_43 1 + + GBS::VDS_STEP_GAIN::write(1); // step response, max 15 (VDS_STEP_DLY_CNTRL set in presets) + + // DAC filters / keep in presets for now + // GBS::VDS_1ST_INT_BYPS::write(1); // disable RGB stage interpolator + // GBS::VDS_2ND_INT_BYPS::write(1); // disable YUV stage interpolator + + // most cases will use osr 2 + setOverSampleRatio(2, true); // prepare only = true + + // full height option + if (uopt->wantFullHeight) { + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) { + // if (rto->presetID == 0x5) + //{ // out 1080p 60 + // GBS::VDS_DIS_VB_ST::write(GBS::VDS_VSYNC_RST::read() - 1); + // GBS::VDS_DIS_VB_SP::write(42); + // GBS::VDS_VB_SP::write(42 - 10); // is VDS_DIS_VB_SP - 10 = 32 // watch for vblank overflow (ps3) + // GBS::VDS_VSCALE::write(455); + // GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + 4); + // GBS::IF_VB_ST::write(GBS::IF_VB_ST::read() + 4); + // LOGN(F("full height")); + // } + } else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) { + if (rto->presetID == 0x15) { // out 1080p 50 + GBS::VDS_VSCALE::write(455); + GBS::VDS_DIS_VB_ST::write(GBS::VDS_VSYNC_RST::read()); // full = 1125 of 1125 + GBS::VDS_DIS_VB_SP::write(42); + GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + 22); + GBS::IF_VB_ST::write(GBS::IF_VB_ST::read() + 22); + LOGN(F("full height")); + } + } + } + + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) { + // GBS::PLLAD_ICP::write(5); // 5 rather than 6 to work well with CVBS sync as well as CSync + + GBS::ADC_FLTR::write(3); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + GBS::PLLAD_KS::write(2); // 5_16 + setOverSampleRatio(4, true); // prepare only = true + GBS::IF_SEL_WEN::write(0); // 1_02 0; 0 for SD, 1 for EDTV + if (rto->inputIsYpBpR) { // todo: check other videoStandardInput in component vs rgb + GBS::IF_HS_TAP11_BYPS::write(0); // 1_02 4 Tap11 LPF bypass in YUV444to422 + GBS::IF_HS_Y_PDELAY::write(2); // 1_02 5+6 delays + GBS::VDS_V_DELAY::write(0); // 3_24 2 + GBS::VDS_Y_DELAY::write(3); // 3_24 4/5 delays + } + + // downscale preset: source is SD + if (rto->presetID == 0x06 || rto->presetID == 0x16) { + setCsVsStart(2); // or 3, 0 + setCsVsStop(0); // fixes field position + GBS::IF_VS_SEL::write(1); // 1_00 5 // turn off VHS sync feature + GBS::IF_VS_FLIP::write(0); // 1_01 0 + GBS::IF_LD_RAM_BYPS::write(0); // 1_0c 0 + GBS::IF_HS_DEC_FACTOR::write(1); // 1_0b 4 + GBS::IF_LD_SEL_PROV::write(0); // 1_0b 7 + GBS::IF_HB_ST::write(2); // 1_10 deinterlace offset + GBS::MADPT_Y_VSCALE_BYPS::write(0); // 2_02 6 + GBS::MADPT_UV_VSCALE_BYPS::write(0); // 2_02 7 + GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 one line fifo for line phase adjust + GBS::MADPT_VSCALE_DEC_FACTOR::write(1); // 2_31 0..1 + GBS::MADPT_SEL_PHASE_INI::write(0); // 2_31 2 disable for SD (check 240p content) + if (rto->videoStandardInput == 1) { + GBS::IF_HB_ST2::write(0x490); // 1_18 + GBS::IF_HB_SP2::write(0x80); // 1_1a + GBS::IF_HB_SP::write(0x4A); // 1_12 deinterlace offset, green bar + GBS::IF_HBIN_SP::write(0xD0); // 1_26 + } else if (rto->videoStandardInput == 2) { + GBS::IF_HB_SP2::write(0x74); // 1_1a + GBS::IF_HB_SP::write(0x50); // 1_12 deinterlace offset, green bar + GBS::IF_HBIN_SP::write(0xD0); // 1_26 + } + } + } + if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || + rto->videoStandardInput == 8 || rto->videoStandardInput == 9) { + // EDTV p-scan, need to either double adc data rate and halve vds scaling + // or disable line doubler (better) (50 / 60Hz shared) + + GBS::ADC_FLTR::write(3); // 5_03 4/5 + GBS::PLLAD_KS::write(1); // 5_16 + + if (rto->presetID != 0x06 && rto->presetID != 0x16) { + setCsVsStart(14); // pal // hm + setCsVsStop(11); // probably setting these for modes 8,9 + GBS::IF_HB_SP::write(0); // 1_12 deinterlace offset, fixes colors (downscale needs diff) + } + setOverSampleRatio(2, true); // with KS = 1 for modes 3, 4, 8 + GBS::IF_HS_DEC_FACTOR::write(0); // 1_0b 4+5 + GBS::IF_LD_SEL_PROV::write(1); // 1_0b 7 + GBS::IF_PRGRSV_CNTRL::write(1); // 1_00 6 + GBS::IF_SEL_WEN::write(1); // 1_02 0 + GBS::IF_HS_SEL_LPF::write(0); // 1_02 1 0 = use interpolator not lpf for EDTV + GBS::IF_HS_TAP11_BYPS::write(0); // 1_02 4 filter + GBS::IF_HS_Y_PDELAY::write(3); // 1_02 5+6 delays (ps2 test on one board clearly says 3, not 2) + GBS::VDS_V_DELAY::write(1); // 3_24 2 // new 24.07.2019 : 1, also set 2_17 to 1 + GBS::MADPT_Y_DELAY_UV_DELAY::write(1); // 2_17 : 1 + GBS::VDS_Y_DELAY::write(3); // 3_24 4/5 delays (ps2 test saying 3 for 1_02 goes with 3 here) + if (rto->videoStandardInput == 9) { + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) { + delay(20); + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) { + GBS::PLLAD_KS::write(0); // 5_16 + GBS::VDS_VSCALE_BYPS::write(1); // 3_00 5 no vscale + } + } + } + + // downscale preset: source is EDTV + if (rto->presetID == 0x06 || rto->presetID == 0x16) { + GBS::MADPT_Y_VSCALE_BYPS::write(0); // 2_02 6 + GBS::MADPT_UV_VSCALE_BYPS::write(0); // 2_02 7 + GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 one line fifo for line phase adjust + GBS::MADPT_VSCALE_DEC_FACTOR::write(1); // 2_31 0..1 + GBS::MADPT_SEL_PHASE_INI::write(1); // 2_31 2 enable + GBS::MADPT_SEL_PHASE_INI::write(0); // 2_31 2 disable + } + } + if (rto->videoStandardInput == 3 && rto->presetID != 0x06) { // ED YUV 60 + setCsVsStart(16); // ntsc + setCsVsStop(13); // + GBS::IF_HB_ST::write(30); // 1_10; magic number + GBS::IF_HBIN_ST::write(0x20); // 1_24 + GBS::IF_HBIN_SP::write(0x60); // 1_26 + if (rto->presetID == 0x5) { // out 1080p + GBS::IF_HB_SP2::write(0xB0); // 1_1a + GBS::IF_HB_ST2::write(0x4BC); // 1_18 + } else if (rto->presetID == 0x3) { // out 720p + GBS::VDS_VSCALE::write(683); // same as base preset + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x84); // 1_1a + } else if (rto->presetID == 0x2) { // out x1024 + GBS::IF_HB_SP2::write(0x84); // 1_1a + GBS::IF_HB_ST2::write(0x478); // 1_18 + } else if (rto->presetID == 0x1) { // out x960 + GBS::IF_HB_SP2::write(0x84); // 1_1a + GBS::IF_HB_ST2::write(0x478); // 1_18 + } else if (rto->presetID == 0x4) { // out x480 + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x90); // 1_1a + } + } else if (rto->videoStandardInput == 4 && rto->presetID != 0x16) { // ED YUV 50 + GBS::IF_HBIN_SP::write(0x40); // 1_26 was 0x80 test: ps2 videomodetester 576p mode + GBS::IF_HBIN_ST::write(0x20); // 1_24, odd but need to set this here (blue bar) + GBS::IF_HB_ST::write(0x30); // 1_10 + if (rto->presetID == 0x15) { // out 1080p + GBS::IF_HB_ST2::write(0x4C0); // 1_18 + GBS::IF_HB_SP2::write(0xC8); // 1_1a + } else if (rto->presetID == 0x13) { // out 720p + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x88); // 1_1a + } else if (rto->presetID == 0x12) { // out x1024 + // VDS_VB_SP -= 12 used to shift pic up, but seems not necessary anymore + // GBS::VDS_VB_SP::write(GBS::VDS_VB_SP::read() - 12); + GBS::IF_HB_ST2::write(0x454); // 1_18 + GBS::IF_HB_SP2::write(0x88); // 1_1a + } else if (rto->presetID == 0x11) { // out x960 + GBS::IF_HB_ST2::write(0x454); // 1_18 + GBS::IF_HB_SP2::write(0x88); // 1_1a + } else if (rto->presetID == 0x14) { // out x576 + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x90); // 1_1a + } + } else if (rto->videoStandardInput == 5) { // 720p + GBS::ADC_FLTR::write(1); // 5_03 + GBS::IF_PRGRSV_CNTRL::write(1); // progressive + GBS::IF_HS_DEC_FACTOR::write(0); + GBS::INPUT_FORMATTER_02::write(0x74); + GBS::VDS_Y_DELAY::write(3); + } else if (rto->videoStandardInput == 6 || rto->videoStandardInput == 7) { // 1080i/p + GBS::ADC_FLTR::write(1); // 5_03 + GBS::PLLAD_KS::write(0); // 5_16 + GBS::IF_PRGRSV_CNTRL::write(1); + GBS::IF_HS_DEC_FACTOR::write(0); + GBS::INPUT_FORMATTER_02::write(0x74); + GBS::VDS_Y_DELAY::write(3); + } else if (rto->videoStandardInput == 8) { // 25khz + // todo: this mode for HV sync + uint32_t pllRate = 0; + for (int i = 0; i < 8; i++) { + pllRate += getPllRate(); + } + pllRate /= 8; + LOG(F("(H-PLL) rate: ")); + LOGN(pllRate); + if (pllRate > 200) { // is PLL even working? + if (pllRate < 1800) { // rate very low? + GBS::PLLAD_FS::write(0); // then low gain + } + } + GBS::PLLAD_ICP::write(6); // all 25khz submodes have more lines than NTSC + GBS::ADC_FLTR::write(1); // 5_03 + GBS::IF_HB_ST::write(30); // 1_10; magic number + // GBS::IF_HB_ST2::write(0x60); // 1_18 + // GBS::IF_HB_SP2::write(0x88); // 1_1a + GBS::IF_HBIN_SP::write(0x60); // 1_26 works for all output presets + if (rto->presetID == 0x1) { // out x960 + GBS::VDS_VSCALE::write(410); + } else if (rto->presetID == 0x2) { // out x1024 + GBS::VDS_VSCALE::write(402); + } else if (rto->presetID == 0x3) { // out 720p + GBS::VDS_VSCALE::write(546); + } else if (rto->presetID == 0x5) { // out 1080p + GBS::VDS_VSCALE::write(400); + } + } + } + + if (rto->presetID == 0x06 || rto->presetID == 0x16) { + rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); // override back + } + + resetDebugPort(); + + bool avoidAutoBest = 0; + if (rto->syncTypeCsync) { + if (GBS::TEST_BUS_2F::read() == 0) { + delay(4); + if (GBS::TEST_BUS_2F::read() == 0) { + optimizeSogLevel(); + avoidAutoBest = 1; + delay(4); + } + } + } + + latchPLLAD(); // besthtotal reliable with this (EDTV modes, possibly others) + + if (rto->isCustomPreset) { + // patch in segments not covered in custom preset files (currently seg 2) + if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || rto->videoStandardInput == 8) { + GBS::MADPT_Y_DELAY_UV_DELAY::write(1); // 2_17 : 1 + } + + // get OSR + if (GBS::DEC1_BYPS::read() && GBS::DEC2_BYPS::read()) { + rto->osr = 1; + } else if (GBS::DEC1_BYPS::read() && !GBS::DEC2_BYPS::read()) { + rto->osr = 2; + } else { + rto->osr = 4; + } + + // always start with internal clock active first + if (GBS::PLL648_CONTROL_01::read() == 0x75 && GBS::GBS_PRESET_DISPLAY_CLOCK::read() != 0) { + GBS::PLL648_CONTROL_01::write(GBS::GBS_PRESET_DISPLAY_CLOCK::read()); + } else if (GBS::GBS_PRESET_DISPLAY_CLOCK::read() == 0) { + LOGN(F("no stored display clock to use!")); + } + } + + if (rto->presetIsPalForce60) { + if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() != 1) { + LOGN(F("pal forced 60hz: apply vshift")); + uint16_t vshift = 56; // default shift + if (rto->presetID == 0x5) { + GBS::IF_VB_SP::write(4); + } // out 1080p + else { + GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + vshift); + } + GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); + GBS::GBS_OPTION_PALFORCED60_ENABLED::write(1); + } + } + + // freezeVideo(); + + GBS::ADC_TEST_04::write(0x02); // 5_04 + GBS::ADC_TEST_0C::write(0x12); // 5_0c 1 4 + GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 + + // auto ADC gain + if (uopt->enableAutoGain == 1) { + if (adco->r_gain == 0) { + // SerialM.printf("ADC gain: reset %x := %x\n", GBS::ADC_RGCTRL::read(), AUTO_GAIN_INIT); + setAdcGain(AUTO_GAIN_INIT); + GBS::DEC_TEST_ENABLE::write(1); + } else { + // SerialM.printf("ADC gain: transferred %x := %x\n", GBS::ADC_RGCTRL::read(), adco->r_gain); + GBS::ADC_RGCTRL::write(adco->r_gain); + GBS::ADC_GGCTRL::write(adco->g_gain); + GBS::ADC_BGCTRL::write(adco->b_gain); + GBS::DEC_TEST_ENABLE::write(1); + } + } else { + GBS::DEC_TEST_ENABLE::write(0); // no need for decimation test to be enabled + } + + // ADC offset if measured + if (adco->r_off != 0 && adco->g_off != 0 && adco->b_off != 0) { + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + } + + LOG(F("ADC offset: R:")); + LOGF("0x%04X", GBS::ADC_ROFCTRL::read()); + LOG(F(" G:")); + LOGF("0x%04X", GBS::ADC_GOFCTRL::read()); + LOG(F(" B:")); + LOGF("0x%04X", GBS::ADC_BOFCTRL::read()); + + GBS::IF_AUTO_OFST_U_RANGE::write(0); // 0 seems to be full range, else 1 to 15 + GBS::IF_AUTO_OFST_V_RANGE::write(0); // 0 seems to be full range, else 1 to 15 + GBS::IF_AUTO_OFST_PRD::write(0); // 0 = by line, 1 = by frame ; by line is easier to spot + GBS::IF_AUTO_OFST_EN::write(0); // not reliable yet + // to get it working with RGB: + // leave RGB to YUV at the ADC DEC stage (s5_1f 2 = 0) + // s5s07s42, 1_2a to 0, s5_06 + s5_08 to 0x40 + // 5_06 + 5_08 will be the target center value, 5_07 sets general offset + // s3s3as00 s3s3bs00 s3s3cs00 + + if (uopt->wantVdsLineFilter) { + GBS::VDS_D_RAM_BYPS::write(0); + } else { + GBS::VDS_D_RAM_BYPS::write(1); + } + + if (uopt->wantPeaking) { + GBS::VDS_PK_Y_H_BYPS::write(0); + } else { + GBS::VDS_PK_Y_H_BYPS::write(1); + } + + // unused now + GBS::VDS_TAP6_BYPS::write(0); + /*if (uopt->wantTap6) { GBS::VDS_TAP6_BYPS::write(0); } + else { + GBS::VDS_TAP6_BYPS::write(1); + if (!isCustomPreset) { + GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() + 1); + } + }*/ + + if (uopt->wantStepResponse) { + // step response requested, but exclude 1080p presets + if (rto->presetID != 0x05 && rto->presetID != 0x15) { + GBS::VDS_UV_STEP_BYPS::write(0); + } else { + GBS::VDS_UV_STEP_BYPS::write(1); + } + } else { + GBS::VDS_UV_STEP_BYPS::write(1); + } + + // transfer preset's display clock to ext. gen + externalClockGenResetClock(); + + // unfreezeVideo(); + Menu::init(); + FrameSync::cleanup(); + rto->syncLockFailIgnore = 16; + + // undo eventual rto->useHdmiSyncFix (not using this method atm) + GBS::VDS_SYNC_EN::write(0); + GBS::VDS_FLOCK_EN::write(0); + + if (!rto->outModeHdBypass && rto->autoBestHtotalEnabled && + GBS::GBS_OPTION_SCALING_RGBHV::read() == 0 && !avoidAutoBest && + (rto->videoStandardInput >= 1 && rto->videoStandardInput <= 4)) { + // autobesthtotal + updateCoastPosition(0); + delay(1); + resetInterruptNoHsyncBadBit(); + resetInterruptSogBadBit(); + delay(10); + // works reliably now on my test HDMI dongle + if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out + } + delay(70); // minimum delay without random failures: TBD + + for (uint8_t i = 0; i < 4; i++) { + if (GBS::STATUS_INT_SOG_BAD::read() == 1) { + optimizeSogLevel(); + resetInterruptSogBadBit(); + delay(40); + } else if (getStatus16SpHsStable() && getStatus16SpHsStable()) { + delay(1); // wifi + if (getVideoMode() == rto->videoStandardInput) { + bool ok = 0; + float sfr = getSourceFieldRate(0); + // Serial.println(sfr, 3); + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) { + if (sfr > 58.6f && sfr < 61.4f) + ok = 1; + } else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) { + if (sfr > 49.1f && sfr < 51.1f) + ok = 1; + } + if (ok) { // else leave it for later + runAutoBestHTotal(); + delay(1); // wifi + break; + } + } + } + delay(10); + } + } else { + // scaling rgbhv, HD modes, no autobesthtotal + delay(10); + // works reliably now on my test HDMI dongle + if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out + } + delay(20); + updateCoastPosition(0); + updateClampPosition(); + } + + // LOG(F("pp time: ")); LOGN(millis() - postLoadTimer); + + // make sure + if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out + } + + // late adjustments that require some delay time first + if (!rto->isCustomPreset) { + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { + // SNES has less total lines and a slight offset (only relevant in 60Hz) + if (GBS::VPERIOD_IF::read() == 523) { + GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + 4); + GBS::IF_VB_ST::write(GBS::IF_VB_ST::read() + 4); + } + } + } + + // new, might be useful (3_6D - 3_72) + GBS::VDS_EXT_HB_ST::write(GBS::VDS_DIS_HB_ST::read()); + GBS::VDS_EXT_HB_SP::write(GBS::VDS_DIS_HB_SP::read()); + GBS::VDS_EXT_VB_ST::write(GBS::VDS_DIS_VB_ST::read()); + GBS::VDS_EXT_VB_SP::write(GBS::VDS_DIS_VB_SP::read()); + // VDS_VSYN_SIZE1 + VDS_VSYN_SIZE2 to VDS_VSYNC_RST + 2 + GBS::VDS_VSYN_SIZE1::write(GBS::VDS_VSYNC_RST::read() + 2); + GBS::VDS_VSYN_SIZE2::write(GBS::VDS_VSYNC_RST::read() + 2); + GBS::VDS_FRAME_RST::write(4); // 3_19 + // VDS_FRAME_NO, VDS_FR_SELECT + GBS::VDS_FRAME_NO::write(1); // 3_1f 0-3 + GBS::VDS_FR_SELECT::write(1); // 3_1b, 3_1c, 3_1d, 3_1e + + // noise starts here! + resetDigital(); + + resetPLLAD(); // also turns on pllad + GBS::PLLAD_LEN::write(1); // 5_11 1 + + if (!rto->isCustomPreset) { + GBS::VDS_IN_DREG_BYPS::write(0); // 3_40 2 // 0 = input data triggered on falling clock edge, 1 = bypass + GBS::PLLAD_R::write(3); + GBS::PLLAD_S::write(3); + GBS::PLL_R::write(1); // PLL lock detector skew + GBS::PLL_S::write(2); + GBS::DEC_IDREG_EN::write(1); // 5_1f 7 + GBS::DEC_WEN_MODE::write(1); // 5_1e 7 // 1 keeps ADC phase consistent. around 4 lock positions vs totally random + + // 4 segment + GBS::CAP_SAFE_GUARD_EN::write(0); // 4_21_5 // does more harm than good + // memory timings, anti noise + GBS::PB_CUT_REFRESH::write(1); // helps with PLL=ICLK mode artefacting + GBS::RFF_LREQ_CUT::write(0); // was in motionadaptive toggle function but on, off seems nicer + GBS::CAP_REQ_OVER::write(0); // 4_22 0 1=capture stop at hblank 0=free run + GBS::CAP_STATUS_SEL::write(1); // 4_22 1 1=capture request when FIFO 50%, 0= FIFO 100% + GBS::PB_REQ_SEL::write(3); // PlayBack 11 High request Low request + // 4_2C, 4_2D should be set by preset + GBS::RFF_WFF_OFFSET::write(0x0); // scanline fix + if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4) { + // this also handles mode 14 csync rgbhv + GBS::PB_CAP_OFFSET::write(GBS::PB_FETCH_NUM::read() + 4); // 4_37 to 4_39 (green bar) + } + // 4_12 should be set by preset + } + + if (!rto->outModeHdBypass) { + ResetSDRAM(); + } + + setAndUpdateSogLevel(rto->currentLevelSOG); // use this to cycle SP / ADPLL latches + + if (rto->presetID != 0x06 && rto->presetID != 0x16) { + // IF_VS_SEL = 1 for SD/HD SP mode in HD mode (5_3e 1) + GBS::IF_VS_SEL::write(0); // 0 = "VCR" IF sync, requires VS_FLIP to be on, more stable? + GBS::IF_VS_FLIP::write(1); + } + + GBS::SP_CLP_SRC_SEL::write(0); // 0: 27Mhz clock; 1: pixel clock + GBS::SP_CS_CLP_ST::write(32); + GBS::SP_CS_CLP_SP::write(48); // same as reset parameters + + if (!uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out if needed + } + GBS::DAC_RGBS_PWDNZ::write(1); // DAC on if needed + GBS::DAC_RGBS_SPD::write(0); // 0_45 2 DAC_SVM power down disable, somehow less jailbars + GBS::DAC_RGBS_S0ENZ::write(0); // + GBS::DAC_RGBS_S1EN::write(1); // these 2 also help + + rto->useHdmiSyncFix = 0; // reset flag + + GBS::SP_H_PROTECT::write(0); + if (rto->videoStandardInput >= 5) { + GBS::SP_DIS_SUB_COAST::write(1); // might not disable it at all soon + } + + if (rto->syncTypeCsync) { + GBS::SP_EXT_SYNC_SEL::write(1); // 5_20 3 disconnect HV input + // stays disconnected until reset condition + } + + rto->coastPositionIsSet = false; // re-arm these + rto->clampPositionIsSet = false; + + if (rto->outModeHdBypass) { + GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts + GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status + GBS::INTERRUPT_CONTROL_00::write(0x00); + unfreezeVideo(); // eventhough not used atm + // DAC and Sync out will be enabled later + return; // to setOutModeHdBypass(); + } + + if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) { + rto->videoStandardInput = 14; + } + + if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) { + unsigned long timeout = millis(); + while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { + delay(4); + wifiLoop(0); + updateSpDynamic(0); + } + while ((getVideoMode() == 0) && (millis() - timeout < 1505)) { + delay(4); + wifiLoop(0); + updateSpDynamic(0); + } + + timeout = millis() - timeout; + if (timeout > 1000) { + Serial.print(F("to1 is: ")); + Serial.println(timeout); + } + if (timeout >= 1500) { + if (rto->currentLevelSOG >= 7) { + optimizeSogLevel(); + delay(300); + } + } + } + + // early attempt + updateClampPosition(); + if (rto->clampPositionIsSet) { + if (GBS::SP_NO_CLAMP_REG::read() == 1) { + GBS::SP_NO_CLAMP_REG::write(0); + } + } + + updateSpDynamic(0); + + if (!rto->syncWatcherEnabled) { + GBS::SP_NO_CLAMP_REG::write(0); + } + + // this was used with ADC write enable, producing about (exactly?) 4 lock positions + // cycling through the phase let it land favorably + // for (uint8_t i = 0; i < 8; i++) { + // advancePhase(); + //} + + setAndUpdateSogLevel(rto->currentLevelSOG); // use this to cycle SP / ADPLL latches + // optimizePhaseSP(); // do this later in run loop + + GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts + GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status + GBS::INTERRUPT_CONTROL_00::write(0x00); + + OutputComponentOrVGA(); + + // presetPreference 10 means the user prefers bypass mode at startup + // it's best to run a normal format detect > apply preset loop, then enter bypass mode + // this can lead to an endless loop, so applyPresetDoneStage = 10 applyPresetDoneStage = 11 + // are introduced to break out of it. + // also need to check for mode 15 + // also make sure to turn off autoBestHtotal + if (uopt->presetPreference == 10 && rto->videoStandardInput != 15) { + rto->autoBestHtotalEnabled = 0; + if (rto->applyPresetDoneStage == 11) { + // we were here before, stop the loop + rto->applyPresetDoneStage = 1; + } else { + rto->applyPresetDoneStage = 10; + } + } else { + // normal modes + rto->applyPresetDoneStage = 1; + } + + unfreezeVideo(); + + if (uopt->enableFrameTimeLock) { + activeFrameTimeLockInitialSteps(); + } + + LOG(F("\npreset applied: ")); + if (rto->presetID == 0x01 || rto->presetID == 0x11) + LOG(F("1280x960")); + else if (rto->presetID == 0x02 || rto->presetID == 0x12) + LOG(F("1280x1024")); + else if (rto->presetID == 0x03 || rto->presetID == 0x13) + LOG(F("1280x720")); + else if (rto->presetID == 0x05 || rto->presetID == 0x15) + LOG(F("1920x1080")); + else if (rto->presetID == 0x06 || rto->presetID == 0x16) + LOG(F("downscale")); + else if (rto->presetID == 0x04) + LOG(F("720x480")); + else if (rto->presetID == 0x14) + LOG(F("768x576")); + else + LOG(F("bypass")); + + if (rto->outModeHdBypass) { + LOG(F(" (bypass)")); + } else if (rto->isCustomPreset) { + LOG(F(" (custom)")); + } + + LOG(F(" for ")); + if (rto->videoStandardInput == 1) + LOG(F("NTSC 60Hz ")); + else if (rto->videoStandardInput == 2) + LOG(F("PAL 50Hz ")); + else if (rto->videoStandardInput == 3) + LOG(F("EDTV 60Hz")); + else if (rto->videoStandardInput == 4) + LOG(F("EDTV 50Hz")); + else if (rto->videoStandardInput == 5) + LOG(F("720p 60Hz HDTV ")); + else if (rto->videoStandardInput == 6) + LOG(F("1080i 60Hz HDTV ")); + else if (rto->videoStandardInput == 7) + LOG(F("1080p 60Hz HDTV ")); + else if (rto->videoStandardInput == 8) + LOG(F("Medium Res ")); + else if (rto->videoStandardInput == 13) + LOG(F("VGA/SVGA/XGA/SXGA")); + else if (rto->videoStandardInput == 14) { + if (rto->syncTypeCsync) + LOG(F("scaling RGB (CSync)")); + else + LOG(F("scaling RGB (HV Sync)")); + } else if (rto->videoStandardInput == 15) { + if (rto->syncTypeCsync) + LOG(F("RGB Bypass (CSync)")); + else + LOG(F("RGB Bypass (HV Sync)")); + } else if (rto->videoStandardInput == 0) + LOG(F("!should not go here!")); + + if (rto->presetID == 0x05 || rto->presetID == 0x15) { + LOG(F("(set your TV aspect ratio to 16:9!)")); + } + if (rto->videoStandardInput == 14) { + LOG(F("\nNote: scaling RGB is still in development")); + } + // presetPreference = OutputCustomized may fail to load (missing) preset file and arrive here with defaults + LOGN(F("\n")); +} + +// TODO replace result with VideoStandardInput enum +void applyPresets(uint8_t result) +{ + if (!rto->boardHasPower) { + LOGN(F("GBS board not responding!")); + return; + } + + // if RGBHV scaling and invoked through web ui or custom preset + // need to know syncTypeCsync + if (result == 14) { + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + rto->inputIsYpBpR = 0; + if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) { + rto->syncTypeCsync = 1; + } else { + rto->syncTypeCsync = 0; + } + } + } + + bool waitExtra = 0; + if (rto->outModeHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) { + waitExtra = 1; + if (result <= 4 || result == 14 || result == 8 || result == 9) { + GBS::SFTRST_IF_RSTZ::write(1); // early init + GBS::SFTRST_VDS_RSTZ::write(1); + GBS::SFTRST_DEC_RSTZ::write(1); + } + } + rto->presetIsPalForce60 = 0; // the default + rto->outModeHdBypass = 0; // the default at this stage + + // in case it is set; will get set appropriately later in doPostPresetLoadSteps() + GBS::GBS_PRESET_CUSTOM::write(0); + rto->isCustomPreset = false; + + // carry over debug view if possible + if (GBS::ADC_UNUSED_62::read() != 0x00) { + // only if the preset to load isn't custom + // (else the command will instantly disable debug view) + if (uopt->presetPreference != 2) { + serialCommand = 'D'; + } + } + + if (result == 0) { + // Unknown + LOGN(F("Source format not properly recognized, using fallback preset!")); + result = 3; // in case of success: override to 480p60 + GBS::ADC_INPUT_SEL::write(1); // RGB + delay(100); + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + rto->inputIsYpBpR = 0; + rto->syncWatcherEnabled = 1; + if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) { + rto->syncTypeCsync = 1; + } else { + rto->syncTypeCsync = 0; + } + } else { + GBS::ADC_INPUT_SEL::write(0); // YPbPr + delay(100); + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + rto->inputIsYpBpR = 1; + rto->syncTypeCsync = 1; + rto->syncWatcherEnabled = 1; + } else { + // found nothing at all, turn off output + + // If we call setResetParameters(), soon afterwards loop() -> + // inputAndSyncDetect() -> goLowPowerWithInputDetection() will + // call setResetParameters() again. But if we don't call + // setResetParameters() here, the second call will never happen. + setResetParameters(); + + // Deselect the output resolution in the web UI. We cannot call + // doPostPresetLoadSteps() to select the right resolution, since + // it *enables* the output (showing a green screen) even if + // previously disabled, and we want to *disable* it. + rto->presetID = 0; + return; + } + } + } + + if (uopt->PalForce60 == 1) { + if (uopt->presetPreference != 2) { // != custom. custom saved as pal preset has ntsc customization + if (result == 2 || result == 4) { + Serial.println(F("PAL@50 to 60Hz")); + rto->presetIsPalForce60 = 1; + } + if (result == 2) { + result = 1; + } + if (result == 4) { + result = 3; + } + } + } + + /// If uopt->presetPreference == OutputCustomized and we load a custom + /// preset, check if it's intended to bypass scaling at the current input + /// resolution. If so, setup bypass and skip the rest of applyPresets(). + auto applySavedBypassPreset = [&result]() -> bool { + /* + Types: + + - Registers: + - Written by applyPresets() -> writeProgramArrayNew(), + loadHdBypassSection(), etc. + - GBS_PRESET_ID @ S1_2B[0:6] + - GBS_PRESET_CUSTOM @ S1_2B[7] + - uopt is source of truth, rto is derived cached state??? + - uopt->presetPreference + - Read by applyPresets() to pick an output resolution. + - rto->presetID + - Written by applyPresets() -> doPostPresetLoadSteps(). + - = register GBS_PRESET_ID. + - rto->isCustomPreset + - Written by applyPresets() -> doPostPresetLoadSteps(). + - = register GBS_PRESET_CUSTOM. + - rto->isCustomPreset and rto->presetID control which button is + highlighted in the web UI (updateWebSocketData() -> + GBSControl.buttonMapping). + + Control flow: + + applyPresets(): + - If uopt->presetPreference == OutputCustomized (yes): + - loadPresetFromLFS() + - All custom presets are saved with GBS_PRESET_CUSTOM = 1. + - writeProgramArrayNew() + - GBS_PRESET_ID = output resolution ID + - GBS_PRESET_CUSTOM = 1 + - applySavedBypassPreset(): + - If GBS_PRESET_ID == PresetHdBypass (yes): + - rto->videoStandardInput = result; (not sure why) + - setOutModeHdBypass(regsInitialized=true) + - rto->outModeHdBypass = 1; + - loadHdBypassSection() + - Overwrites S1_30..5F. + - GBS::GBS_PRESET_ID::write(PresetHdBypass); + - if (!regsInitialized) (false) + - ~~GBS::GBS_PRESET_CUSTOM::write(0);~~ (skipped) + - doPostPresetLoadSteps() + - rto->presetID = GBS::GBS_PRESET_ID::read(); + - PresetHdBypass + - rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); + - true + - Branches based on rto->presetID + - if (rto->outModeHdBypass) (yes) return. + - ... + - rto->outModeHdBypass = 1; (again?!) + */ + + uint8_t rawPresetId = GBS::GBS_PRESET_ID::read(); + if (rawPresetId == PresetHdBypass) { + // Required for switching from 240p to 480p to work. + rto->videoStandardInput = result; + + // Setup video mode passthrough. + setOutModeHdBypass(true); + return true; + } + if (rawPresetId == PresetBypassRGBHV) { + // TODO implement bypassModeSwitch_RGBHV (I don't have RGBHV inputs to verify) + } + return false; + }; + + if (result == 1 || result == 3 || result == 8 || result == 9 || result == 14) { + // NTSC input + if (uopt->presetPreference == 0) { + writeProgramArrayNew(ntsc_240p, false); + } else if (uopt->presetPreference == 1) { + writeProgramArrayNew(ntsc_720x480, false); + } else if (uopt->presetPreference == 3) { + writeProgramArrayNew(ntsc_1280x720, false); + } +#if defined(ESP8266) + else if (uopt->presetPreference == OutputCustomized) { + const uint8_t *preset = loadPresetFromLFS(result); + writeProgramArrayNew(preset, false); + if (applySavedBypassPreset()) { + return; + } + } else if (uopt->presetPreference == 4) { + if (uopt->matchPresetSource && (result != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) { + LOGN(F("matched preset override > 1280x960")); + writeProgramArrayNew(ntsc_240p, false); // pref = x1024 override to x960 + } else { + writeProgramArrayNew(ntsc_1280x1024, false); + } + } +#endif + else if (uopt->presetPreference == 5) { + writeProgramArrayNew(ntsc_1920x1080, false); + } else if (uopt->presetPreference == 6) { + writeProgramArrayNew(ntsc_downscale, false); + } + } else if (result == 2 || result == 4) { + // PAL input + if (uopt->presetPreference == 0) { + if (uopt->matchPresetSource) { + LOGN(F("matched preset override > 1280x1024")); + writeProgramArrayNew(pal_1280x1024, false); // pref = x960 override to x1024 + } else { + writeProgramArrayNew(pal_240p, false); + } + } else if (uopt->presetPreference == 1) { + writeProgramArrayNew(pal_768x576, false); + } else if (uopt->presetPreference == 3) { + writeProgramArrayNew(pal_1280x720, false); + } +#if defined(ESP8266) + else if (uopt->presetPreference == OutputCustomized) { + const uint8_t *preset = loadPresetFromLFS(result); + writeProgramArrayNew(preset, false); + if (applySavedBypassPreset()) { + return; + } + } else if (uopt->presetPreference == 4) { + writeProgramArrayNew(pal_1280x1024, false); + } +#endif + else if (uopt->presetPreference == 5) { + writeProgramArrayNew(pal_1920x1080, false); + } else if (uopt->presetPreference == 6) { + writeProgramArrayNew(pal_downscale, false); + } + } else if (result == 5 || result == 6 || result == 7 || result == 13) { + // use bypass mode for these HD sources + rto->videoStandardInput = result; + setOutModeHdBypass(false); + return; + } else if (result == 15) { + LOG(F("RGB/HV ")); + if (rto->syncTypeCsync) { + LOG(F("(CSync) ")); + } + // if (uopt->preferScalingRgbhv) { + // LOG(F("(prefer scaling mode)"); + // } + LOGN(); + bypassModeSwitch_RGBHV(); + // don't go through doPostPresetLoadSteps + return; + } + + rto->videoStandardInput = result; + if (waitExtra) { + // extra time needed for digital resets, so that autobesthtotal works first attempt + // Serial.println("waitExtra 400ms"); + delay(400); // min ~ 300 + } + doPostPresetLoadSteps(); +} + +void unfreezeVideo() +{ + /*if (rto->videoIsFrozen == true) { + GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); + } + rto->videoIsFrozen = false;*/ + // Serial.print("u"); + GBS::CAPTURE_ENABLE::write(1); +} + +void freezeVideo() +{ + /*if (rto->videoIsFrozen == false) { + GBS::IF_VB_ST::write(GBS::IF_VB_SP::read()); + } + rto->videoIsFrozen = true;*/ + // Serial.print("f"); + GBS::CAPTURE_ENABLE::write(0); +} + +uint8_t getVideoMode() +{ + uint8_t detectedMode = 0; + + if (rto->videoStandardInput >= 14) { // check RGBHV first // not mode 13 here, else mode 13 can't reliably exit + detectedMode = GBS::STATUS_16::read(); + if ((detectedMode & 0x0a) > 0) { // bit 1 or 3 active? + return rto->videoStandardInput; // still RGBHV bypass, 14 or 15 + } else { + return 0; + } + } + + detectedMode = GBS::STATUS_00::read(); + + // note: if stat0 == 0x07, it's supposedly stable. if we then can't find a mode, it must be an MD problem + if ((detectedMode & 0x07) == 0x07) { + if ((detectedMode & 0x80) == 0x80) { // bit 7: SD flag (480i, 480P, 576i, 576P) + if ((detectedMode & 0x08) == 0x08) + return 1; // ntsc interlace + if ((detectedMode & 0x20) == 0x20) + return 2; // pal interlace + if ((detectedMode & 0x10) == 0x10) + return 3; // edtv 60 progressive + if ((detectedMode & 0x40) == 0x40) + return 4; // edtv 50 progressive + } + + detectedMode = GBS::STATUS_03::read(); + if ((detectedMode & 0x10) == 0x10) { + return 5; + } // hdtv 720p + + if (rto->videoStandardInput == 4) { + detectedMode = GBS::STATUS_04::read(); + if ((detectedMode & 0xFF) == 0x80) { + return 4; // still edtv 50 progressive + } + } + } + + detectedMode = GBS::STATUS_04::read(); + if ((detectedMode & 0x20) == 0x20) { // hd mode on + if ((detectedMode & 0x61) == 0x61) { + // hdtv 1080i // 576p mode tends to get misdetected as this, even with all the checks + // real 1080i (PS2): h:199 v:1124 + // misdetected 576p (PS2): h:215 v:1249 + if (GBS::VPERIOD_IF::read() < 1160) { + return 6; + } + } + if ((detectedMode & 0x10) == 0x10) { + if ((detectedMode & 0x04) == 0x04) { // normally HD2376_1250P (PAL FHD?), but using this for 24k + return 8; + } + return 7; // hdtv 1080p + } + } + + // graphic modes, mostly used for ps2 doing rgb over yuv with sog + if ((GBS::STATUS_05::read() & 0x0c) == 0x00) // 2: Horizontal unstable AND 3: Vertical unstable are 0? + { + if (GBS::STATUS_00::read() == 0x07) { // the 3 stat0 stable indicators on, none of the SD indicators on + if ((GBS::STATUS_03::read() & 0x02) == 0x02) // Graphic mode bit on (any of VGA/SVGA/XGA/SXGA at all detected Hz) + { + if (rto->inputIsYpBpR) + return 13; + else + return 15; // switch to RGBS/HV handling + } else { + // this mode looks like it wants to be graphic mode, but the horizontal counter target in MD is very strict + static uint8_t XGA_60HZ = GBS::MD_XGA_60HZ_CNTRL::read(); + static uint8_t XGA_70HZ = GBS::MD_XGA_70HZ_CNTRL::read(); + static uint8_t XGA_75HZ = GBS::MD_XGA_75HZ_CNTRL::read(); + static uint8_t XGA_85HZ = GBS::MD_XGA_85HZ_CNTRL::read(); + + static uint8_t SXGA_60HZ = GBS::MD_SXGA_60HZ_CNTRL::read(); + static uint8_t SXGA_75HZ = GBS::MD_SXGA_75HZ_CNTRL::read(); + static uint8_t SXGA_85HZ = GBS::MD_SXGA_85HZ_CNTRL::read(); + + static uint8_t SVGA_60HZ = GBS::MD_SVGA_60HZ_CNTRL::read(); + static uint8_t SVGA_75HZ = GBS::MD_SVGA_75HZ_CNTRL::read(); + static uint8_t SVGA_85HZ = GBS::MD_SVGA_85HZ_CNTRL::read(); + + static uint8_t VGA_75HZ = GBS::MD_VGA_75HZ_CNTRL::read(); + static uint8_t VGA_85HZ = GBS::MD_VGA_85HZ_CNTRL::read(); + + short hSkew = random(-2, 2); // skew the target a little + // LOGF("0x%04X\n", XGA_60HZ + hSkew); + GBS::MD_XGA_60HZ_CNTRL::write(XGA_60HZ + hSkew); + GBS::MD_XGA_70HZ_CNTRL::write(XGA_70HZ + hSkew); + GBS::MD_XGA_75HZ_CNTRL::write(XGA_75HZ + hSkew); + GBS::MD_XGA_85HZ_CNTRL::write(XGA_85HZ + hSkew); + GBS::MD_SXGA_60HZ_CNTRL::write(SXGA_60HZ + hSkew); + GBS::MD_SXGA_75HZ_CNTRL::write(SXGA_75HZ + hSkew); + GBS::MD_SXGA_85HZ_CNTRL::write(SXGA_85HZ + hSkew); + GBS::MD_SVGA_60HZ_CNTRL::write(SVGA_60HZ + hSkew); + GBS::MD_SVGA_75HZ_CNTRL::write(SVGA_75HZ + hSkew); + GBS::MD_SVGA_85HZ_CNTRL::write(SVGA_85HZ + hSkew); + GBS::MD_VGA_75HZ_CNTRL::write(VGA_75HZ + hSkew); + GBS::MD_VGA_85HZ_CNTRL::write(VGA_85HZ + hSkew); + } + } + } + + detectedMode = GBS::STATUS_00::read(); + if ((detectedMode & 0x2F) == 0x07) { // 0_00 H+V stable, not NTSCI, not PALI + detectedMode = GBS::STATUS_16::read(); + if ((detectedMode & 0x02) == 0x02) { // SP H active + uint16_t lineCount = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + for (uint8_t i = 0; i < 2; i++) { + delay(2); + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() < (lineCount - 1) || + GBS::STATUS_SYNC_PROC_VTOTAL::read() > (lineCount + 1)) { + lineCount = 0; + rto->notRecognizedCounter = 0; + break; + } + detectedMode = GBS::STATUS_00::read(); + if ((detectedMode & 0x2F) != 0x07) { + lineCount = 0; + rto->notRecognizedCounter = 0; + break; + } + } + if (lineCount != 0 && rto->notRecognizedCounter < 255) { + rto->notRecognizedCounter++; + } + } else { + rto->notRecognizedCounter = 0; + } + } else { + rto->notRecognizedCounter = 0; + } + + if (rto->notRecognizedCounter == 255) { + return 9; + } + + return 0; // unknown mode +} + +// if testbus has 0x05, sync is present and line counting active. if it has 0x04, sync is present but no line counting +bool getSyncPresent() +{ + uint8_t debug_backup = GBS::TEST_BUS_SEL::read(); + uint8_t debug_backup_SP = GBS::TEST_BUS_SP_SEL::read(); + if (debug_backup != 0xa) { + GBS::TEST_BUS_SEL::write(0xa); + } + if (debug_backup_SP != 0x0f) { + GBS::TEST_BUS_SP_SEL::write(0x0f); + } + + uint16_t readout = GBS::TEST_BUS::read(); + + if (debug_backup != 0xa) { + GBS::TEST_BUS_SEL::write(debug_backup); + } + if (debug_backup_SP != 0x0f) { + GBS::TEST_BUS_SP_SEL::write(debug_backup_SP); + } + // if (((readout & 0x0500) == 0x0500) || ((readout & 0x0500) == 0x0400)) { + if (readout > 0x0180) { + return true; + } + + return false; +} + +// returns 0_00 bit 2 = H+V both stable (for the IF, not SP) +bool getStatus00IfHsVsStable() +{ + return ((GBS::STATUS_00::read() & 0x04) == 0x04) ? 1 : 0; +} + +// used to be a check for the length of the debug bus readout of 5_63 = 0x0f +// now just checks the chip status at 0_16 HS active (and Interrupt bit4 HS active for RGBHV) +bool getStatus16SpHsStable() +{ + if (rto->videoStandardInput == 15) { // check RGBHV first + if (GBS::STATUS_INT_INP_NO_SYNC::read() == 0) { + return true; + } else { + resetInterruptNoHsyncBadBit(); + return false; + } + } + + // STAT_16 bit 1 is the "hsync active" flag, which appears to be a reliable indicator + // checking the flag replaces checking the debug bus pulse length manually + uint8_t status16 = GBS::STATUS_16::read(); + if ((status16 & 0x02) == 0x02) { + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) { + if ((status16 & 0x01) != 0x01) { // pal / ntsc should be sync active low + return true; + } + } else { + return true; // not pal / ntsc + } + } + + return false; +} + +void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) +{ + uint8_t ks = GBS::PLLAD_KS::read(); + + bool hi_res = rto->videoStandardInput == 8 || rto->videoStandardInput == 4 || rto->videoStandardInput == 3; + bool bypass = rto->presetID == PresetHdBypass; + + switch (newRatio) { + case 1: + if (ks == 0) + GBS::PLLAD_CKOS::write(0); + if (ks == 1) + GBS::PLLAD_CKOS::write(1); + if (ks == 2) + GBS::PLLAD_CKOS::write(2); + if (ks == 3) + GBS::PLLAD_CKOS::write(3); + GBS::ADC_CLK_ICLK2X::write(0); + GBS::ADC_CLK_ICLK1X::write(0); + GBS::DEC1_BYPS::write(1); // dec1 couples to ADC_CLK_ICLK2X + GBS::DEC2_BYPS::write(1); + + // Necessary to avoid a 2x-scaled image for some reason. + if (hi_res && !bypass) { + GBS::ADC_CLK_ICLK1X::write(1); + // GBS::DEC2_BYPS::write(0); + } + + rto->osr = 1; + // if (!prepareOnly) LOGN(F("OSR 1x")); + + break; + case 2: + if (ks == 0) { + setOverSampleRatio(1, false); + return; + } // 2x impossible + if (ks == 1) + GBS::PLLAD_CKOS::write(0); + if (ks == 2) + GBS::PLLAD_CKOS::write(1); + if (ks == 3) + GBS::PLLAD_CKOS::write(2); + GBS::ADC_CLK_ICLK2X::write(0); + GBS::ADC_CLK_ICLK1X::write(1); + GBS::DEC2_BYPS::write(0); + GBS::DEC1_BYPS::write(1); // dec1 couples to ADC_CLK_ICLK2X + + if (hi_res && !bypass) { + // GBS::ADC_CLK_ICLK2X::write(1); + // GBS::DEC1_BYPS::write(0); + // instead increase CKOS by 1 step + GBS::PLLAD_CKOS::write(GBS::PLLAD_CKOS::read() + 1); + } + + rto->osr = 2; + // if (!prepareOnly) LOGN(F("OSR 2x")); + + break; + case 4: + if (ks == 0) { + setOverSampleRatio(1, false); + return; + } // 4x impossible + if (ks == 1) { + setOverSampleRatio(1, false); + return; + } // 4x impossible + if (ks == 2) + GBS::PLLAD_CKOS::write(0); + if (ks == 3) + GBS::PLLAD_CKOS::write(1); + GBS::ADC_CLK_ICLK2X::write(1); + GBS::ADC_CLK_ICLK1X::write(1); + GBS::DEC1_BYPS::write(0); // dec1 couples to ADC_CLK_ICLK2X + GBS::DEC2_BYPS::write(0); + + rto->osr = 4; + // if (!prepareOnly) LOGN(F("OSR 4x")); + + break; + default: + break; + } + + if (!prepareOnly) + latchPLLAD(); +} + +void togglePhaseAdjustUnits() +{ + GBS::PA_SP_BYPSZ::write(0); // yes, 0 means bypass on here + GBS::PA_SP_BYPSZ::write(1); + delay(2); + GBS::PA_ADC_BYPSZ::write(0); + GBS::PA_ADC_BYPSZ::write(1); + delay(2); +} + +void advancePhase() +{ + rto->phaseADC = (rto->phaseADC + 1) & 0x1f; + setAndLatchPhaseADC(); +} + +void movePhaseThroughRange() +{ + for (uint8_t i = 0; i < 128; i++) { // 4x for 4x oversampling? + advancePhase(); + } +} + +void setAndLatchPhaseSP() +{ + GBS::PA_SP_LAT::write(0); // latch off + GBS::PA_SP_S::write(rto->phaseSP); + GBS::PA_SP_LAT::write(1); // latch on +} + +void setAndLatchPhaseADC() +{ + GBS::PA_ADC_LAT::write(0); + GBS::PA_ADC_S::write(rto->phaseADC); + GBS::PA_ADC_LAT::write(1); +} + +void nudgeMD() +{ + GBS::MD_VS_FLIP::write(!GBS::MD_VS_FLIP::read()); + GBS::MD_VS_FLIP::write(!GBS::MD_VS_FLIP::read()); +} + +void updateSpDynamic(bool withCurrentVideoModeCheck) +{ + if (!rto->boardHasPower || rto->sourceDisconnected) { + return; + } + + uint8_t vidModeReadout = getVideoMode(); + if (vidModeReadout == 0) { + vidModeReadout = getVideoMode(); + } + + if (rto->videoStandardInput == 0 && vidModeReadout == 0) { + if (GBS::SP_DLT_REG::read() > 0x30) + GBS::SP_DLT_REG::write(0x30); // 5_35 + else + GBS::SP_DLT_REG::write(0xC0); + return; + } + // reset condition, allow most formats to detect + // compare 1chip snes and ps2 1080p + if (vidModeReadout == 0 && withCurrentVideoModeCheck) { + if ((rto->noSyncCounter % 16) <= 8 && rto->noSyncCounter != 0) { + GBS::SP_DLT_REG::write(0x30); // 5_35 + } else if ((rto->noSyncCounter % 16) > 8 && rto->noSyncCounter != 0) { + GBS::SP_DLT_REG::write(0xC0); // may want to use lower, around 0x70 + } else { + GBS::SP_DLT_REG::write(0x30); + } + GBS::SP_H_PULSE_IGNOR::write(0x02); + // GBS::SP_DIS_SUB_COAST::write(1); + GBS::SP_H_CST_ST::write(0x10); + GBS::SP_H_CST_SP::write(0x100); + GBS::SP_H_COAST::write(0); // 5_3e 2 (just in case) + GBS::SP_H_TIMER_VAL::write(0x3a); // new: 5_33 default 0x3a, set shorter for better hsync drop detect + if (rto->syncTypeCsync) { + GBS::SP_COAST_INV_REG::write(1); // new, allows SP to see otherwise potentially skipped vlines + } + rto->coastPositionIsSet = false; + return; + } + + if (rto->syncTypeCsync) { + GBS::SP_COAST_INV_REG::write(0); + } + + if (rto->videoStandardInput != 0) { + if (rto->videoStandardInput <= 2) { // SD interlaced + GBS::SP_PRE_COAST::write(7); + GBS::SP_POST_COAST::write(3); + GBS::SP_DLT_REG::write(0xC0); // old: 0x140 works better than 0x130 with psx + GBS::SP_H_TIMER_VAL::write(0x28); // 5_33 + + if (rto->syncTypeCsync) { + uint16_t hPeriod = GBS::HPERIOD_IF::read(); + for (int i = 0; i < 16; i++) { + if (hPeriod == 511 || hPeriod < 200) { + hPeriod = GBS::HPERIOD_IF::read(); // retry / overflow + if (i == 15) { + hPeriod = 300; + break; // give up, use short base to get low ignore value later + } + } else { + break; + } + delayMicroseconds(100); + } + + uint16_t ignoreLength = hPeriod * 0.081f; // hPeriod is base length + if (hPeriod <= 200) { // mode is NTSC / PAL, very likely overflow + ignoreLength = 0x18; // use neutral but low value + } + + // get hpw to ht ratio. stability depends on hpll lock + double ratioHs, ratioHsAverage = 0.0; + uint8_t testOk = 0; + for (int i = 0; i < 30; i++) { + ratioHs = (double)GBS::STATUS_SYNC_PROC_HLOW_LEN::read() / (double)(GBS::STATUS_SYNC_PROC_HTOTAL::read() + 1); + if (ratioHs > 0.041 && ratioHs < 0.152) { // 0.152 : (354 / 2345) is 9.5uS on NTSC (crtemudriver) + testOk++; + ratioHsAverage += ratioHs; + if (testOk == 12) { + ratioHs = ratioHsAverage / testOk; + break; + } + delayMicroseconds(30); + } + } + if (testOk != 12) { + // Serial.print(" testok: "); Serial.println(testOk); + ratioHs = 0.032; // 0.032: (~100 / 2560) is ~2.5uS on NTSC (find with crtemudriver) + } + + // Serial.print(" (debug) hPeriod: "); Serial.println(hPeriod); + // Serial.print(" (debug) ratioHs: "); Serial.println(ratioHs, 5); + // Serial.print(" (debug) ignoreBase: 0x"); LOGF("0x%04X\n", ignoreLength); + uint16_t pllDiv = GBS::PLLAD_MD::read(); + ignoreLength = ignoreLength + (pllDiv * (ratioHs * 0.38)); // for factor: crtemudriver tests + // LOG(F(" (debug) ign.length: 0x"); LOGF("0x%04X\n", ignoreLength); + + // > check relies on sync instability (potentially from too large ign. length) getting cought earlier + if (ignoreLength > GBS::SP_H_PULSE_IGNOR::read() || GBS::SP_H_PULSE_IGNOR::read() >= 0x90) { + if (ignoreLength > 0x90) { // if higher, HPERIOD_IF probably was 511 / limit + ignoreLength = 0x90; + } + if (ignoreLength >= 0x1A && ignoreLength <= 0x42) { + ignoreLength = 0x1A; // at the low end should stick to 0x1A + } + if (ignoreLength != GBS::SP_H_PULSE_IGNOR::read()) { + GBS::SP_H_PULSE_IGNOR::write(ignoreLength); + rto->coastPositionIsSet = 0; // mustn't be skipped, needed when input changes dotclock / Hz + LOG(F(" (debug) ign. length: ")); + LOGF("0x%04X\n", ignoreLength); + } + } + } + } else if (rto->videoStandardInput <= 4) { + GBS::SP_PRE_COAST::write(7); // these two were 7 and 6 + GBS::SP_POST_COAST::write(6); // and last 11 and 11 + // 3,3 fixes the ps2 issue but these are too low for format change detects + // update: seems to be an SP bypass only problem (t5t57t6 to 0 also fixes it) + GBS::SP_DLT_REG::write(0xA0); + GBS::SP_H_PULSE_IGNOR::write(0x0E); // ps3: up to 0x3e, ps2: < 0x14 + } else if (rto->videoStandardInput == 5) { // 720p + GBS::SP_PRE_COAST::write(7); // down to 4 ok with ps2 + GBS::SP_POST_COAST::write(7); // down to 6 ok with ps2 // ps3: 8 too much + GBS::SP_DLT_REG::write(0x30); + GBS::SP_H_PULSE_IGNOR::write(0x08); // ps3: 0xd too much + } else if (rto->videoStandardInput <= 7) { // 1080i,p + GBS::SP_PRE_COAST::write(9); + GBS::SP_POST_COAST::write(18); // of 1124 input lines + GBS::SP_DLT_REG::write(0x70); + // ps2 up to 0x06 + // new test shows ps2 alternating between okay and not okay at 0x0a with 5_35=0x70 + GBS::SP_H_PULSE_IGNOR::write(0x06); + } else if (rto->videoStandardInput >= 13) { // 13, 14 and 15 (was just 13 and 15) + if (rto->syncTypeCsync == false) { + GBS::SP_PRE_COAST::write(0x00); + GBS::SP_POST_COAST::write(0x00); + GBS::SP_H_PULSE_IGNOR::write(0xff); // required this because 5_02 0 is on + GBS::SP_DLT_REG::write(0x00); // sometimes enough on it's own, but not always + } else { // csync + GBS::SP_PRE_COAST::write(0x04); // as in bypass mode set function + GBS::SP_POST_COAST::write(0x07); // as in bypass mode set function + GBS::SP_DLT_REG::write(0x70); + GBS::SP_H_PULSE_IGNOR::write(0x02); + } + } + } +} + +void updateCoastPosition(bool autoCoast) +{ + if (((rto->videoStandardInput == 0) || (rto->videoStandardInput > 14)) || + !rto->boardHasPower || rto->sourceDisconnected) { + return; + } + + uint32_t accInHlength = 0; + uint16_t prevInHlength = GBS::HPERIOD_IF::read(); + for (uint8_t i = 0; i < 8; i++) { + // psx jitters between 427, 428 + uint16_t thisInHlength = GBS::HPERIOD_IF::read(); + if ((thisInHlength > (prevInHlength - 3)) && (thisInHlength < (prevInHlength + 3))) { + accInHlength += thisInHlength; + } else { + return; + } + if (!getStatus16SpHsStable()) { + return; + } + + prevInHlength = thisInHlength; + } + accInHlength = (accInHlength * 4) / 8; + + // 30.09.19 new: especially in low res VGA input modes, it can clip at "511 * 4 = 2044" + // limit to more likely actual value of 430 + if (accInHlength >= 2040) { + accInHlength = 1716; + } + + if (accInHlength <= 240) { + // check for low res, low Hz > can overflow HPERIOD_IF + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() <= 322) { + delay(4); + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() <= 322) { + LOGN(F(" (debug) updateCoastPosition: low res, low hz")); + accInHlength = 2000; + // usually need to lower charge pump. todo: write better check + if (rto->syncTypeCsync && rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { + if (GBS::PLLAD_ICP::read() >= 5 && GBS::PLLAD_FS::read() == 1) { + GBS::PLLAD_ICP::write(5); + GBS::PLLAD_FS::write(0); + latchPLLAD(); + rto->phaseIsSet = 0; + } + } + } + } + } + + // accInHlength around 1732 here / NTSC + // scope on sync-in, enable 5_3e 2 > shows coast borders + if (accInHlength > 32) { + if (autoCoast) { + // autoCoast (5_55 7 = on) + GBS::SP_H_CST_ST::write((uint16_t)(accInHlength * 0.0562f)); // ~0x61, right after color burst + GBS::SP_H_CST_SP::write((uint16_t)(accInHlength * 0.1550f)); // ~0x10C, shortly before sync falling edge + GBS::SP_HCST_AUTO_EN::write(1); + } else { + // test: psx pal black license screen, then ntsc SMPTE color bars 100%; or MS + // scope test psx: t5t11t3, 5_3e = 0x01, 5_36/5_35 = 0x30 5_37 = 0x10 : + // cst sp should be > 0x62b to clean out HS from eq pulses + // cst st should be 0, sp should be 0x69f when t5t57t7 = disabled + // GBS::SP_H_CST_ST::write((uint16_t)(accInHlength * 0.088f)); // ~0x9a, leave some room for SNES 239 mode + // new: with SP_H_PROTECT disabled, even SNES can be a small value. Small value greatly improves Mega Drive + GBS::SP_H_CST_ST::write(0x10); + + GBS::SP_H_CST_SP::write((uint16_t)(accInHlength * 0.968f)); // ~0x678 + // need a bit earlier, making 5_3e 2 more stable + // GBS::SP_H_CST_SP::write((uint16_t)(accInHlength * 0.7383f)); // ~0x4f0, before sync + GBS::SP_HCST_AUTO_EN::write(0); + } + rto->coastPositionIsSet = 1; + + /*Serial.print("coast ST: "); Serial.print("0x"); LOGF("0x%04X", GBS::SP_H_CST_ST::read()); + Serial.print(", "); + Serial.print("SP: "); Serial.print("0x"); LOGF("0x%04X", GBS::SP_H_CST_SP::read()); + Serial.print(" total: "); Serial.print("0x"); LOGF("0x%04X", accInHlength); + Serial.print(" ~ "); Serial.println(accInHlength / 4);*/ + } +} + +void updateClampPosition() +{ + if ((rto->videoStandardInput == 0) || !rto->boardHasPower || rto->sourceDisconnected) { + return; + } + // this is required especially on mode changes with ypbpr + if (getVideoMode() == 0) { + return; + } + + if (rto->inputIsYpBpR) { + GBS::SP_CLAMP_MANUAL::write(0); + } else { + GBS::SP_CLAMP_MANUAL::write(1); // no auto clamp for RGB + } + + // STATUS_SYNC_PROC_HTOTAL is "ht: " value; use with SP_CLP_SRC_SEL = 1 pixel clock + // GBS::HPERIOD_IF::read() is "h: " value; use with SP_CLP_SRC_SEL = 0 osc clock + // update: in RGBHV bypass it seems both clamp source modes use pixel clock for calculation + // but with sog modes, it uses HPERIOD_IF ... k + // update2: if the clamp is already short, yet creeps into active video, check sog invert (t5t20t2) + uint32_t accInHlength = 0; + uint16_t prevInHlength = 0; + uint16_t thisInHlength = 0; + if (rto->syncTypeCsync) + prevInHlength = GBS::HPERIOD_IF::read(); + else + prevInHlength = GBS::STATUS_SYNC_PROC_HTOTAL::read(); + for (uint8_t i = 0; i < 16; i++) { + if (rto->syncTypeCsync) + thisInHlength = GBS::HPERIOD_IF::read(); + else + thisInHlength = GBS::STATUS_SYNC_PROC_HTOTAL::read(); + if ((thisInHlength > (prevInHlength - 3)) && (thisInHlength < (prevInHlength + 3))) { + accInHlength += thisInHlength; + } else { + // Serial.println("updateClampPosition unstable"); + return; + } + if (!getStatus16SpHsStable()) { + return; + } + + prevInHlength = thisInHlength; + delayMicroseconds(100); + } + accInHlength = accInHlength / 16; // for the 16x loop + + // HPERIOD_IF: 9 bits (0-511, represents actual scanline time / 4, can overflow to low values) + // if it overflows, the calculated clamp positions are likely around 1 to 4. good enough + // STATUS_SYNC_PROC_HTOTAL: 12 bits (0-4095) + if (accInHlength > 4095) { + return; + } + + uint16_t oldClampST = GBS::SP_CS_CLP_ST::read(); + uint16_t oldClampSP = GBS::SP_CS_CLP_SP::read(); + float multiSt = rto->syncTypeCsync == 1 ? 0.032f : 0.010f; + float multiSp = rto->syncTypeCsync == 1 ? 0.174f : 0.058f; + uint16_t start = 1 + (accInHlength * multiSt); // HPERIOD_IF: *0.04 seems good + uint16_t stop = 2 + (accInHlength * multiSp); // HPERIOD_IF: *0.178 starts to creep into some EDTV modes + + if (rto->inputIsYpBpR) { + // YUV: // ST shift forward to pass blacker than black HSync, sog: min * 0.08 + multiSt = rto->syncTypeCsync == 1 ? 0.089f : 0.032f; + start = 1 + (accInHlength * multiSt); + + // new: HDBypass rewrite to sync to falling HS edge: move clamp position forward + // RGB can stay the same for now (clamp will start on sync pulse, a benefit in RGB + if (rto->outModeHdBypass) { + if (videoStandardInputIsPalNtscSd()) { + start += 0x60; + stop += 0x60; + } + // raise blank level a bit that's not handled 100% by clamping + GBS::HD_BLK_GY_DATA::write(0x05); + GBS::HD_BLK_BU_DATA::write(0x00); + GBS::HD_BLK_RV_DATA::write(0x00); + } + } + + if ((start < (oldClampST - 1) || start > (oldClampST + 1)) || + (stop < (oldClampSP - 1) || stop > (oldClampSP + 1))) { + GBS::SP_CS_CLP_ST::write(start); + GBS::SP_CS_CLP_SP::write(stop); + /*Serial.print("clamp ST: "); Serial.print("0x"); Serial.print(start, HEX); + Serial.print(", "); + Serial.print("SP: "); Serial.print("0x"); Serial.print(stop, HEX); + Serial.print(" total: "); Serial.print("0x"); Serial.print(accInHlength, HEX); + Serial.print(" / "); Serial.println(accInHlength);*/ + } + + rto->clampPositionIsSet = true; +} + +// use t5t00t2 and adjust t5t11t5 to find this sources ideal sampling clock for this preset (affected by htotal) +// 2431 for psx, 2437 for MD +// in this mode, sampling clock is free to choose +void setOutModeHdBypass(bool regsInitialized) +{ + if (!rto->boardHasPower) { + LOGN(F("GBS board not responding!")); + return; + } + + rto->autoBestHtotalEnabled = false; // disable while in this mode + rto->outModeHdBypass = 1; // skips waiting at end of doPostPresetLoadSteps + + externalClockGenResetClock(); + updateSpDynamic(0); + loadHdBypassSection(); // this would be ignored otherwise + if (GBS::ADC_UNUSED_62::read() != 0x00) { + // remember debug view + if (uopt->presetPreference != 2) { + serialCommand = 'D'; + } + } + + GBS::SP_NO_COAST_REG::write(0); // enable vblank coast (just in case) + GBS::SP_COAST_INV_REG::write(0); // also just in case + + FrameSync::cleanup(); + GBS::ADC_UNUSED_62::write(0x00); // clear debug view + GBS::RESET_CONTROL_0x46::write(0x00); // 0_46 all off, nothing needs to be enabled for bp mode + GBS::RESET_CONTROL_0x47::write(0x00); + GBS::PA_ADC_BYPSZ::write(1); // enable phase unit ADC + GBS::PA_SP_BYPSZ::write(1); // enable phase unit SP + + GBS::GBS_PRESET_ID::write(PresetHdBypass); + // If loading from top-level, clear custom preset flag to avoid stale + // values. If loading after applyPresets() called writeProgramArrayNew(), it + // has already set the flag to 1. + if (!regsInitialized) { + GBS::GBS_PRESET_CUSTOM::write(0); + } + doPostPresetLoadSteps(); // todo: remove this, code path for hdbypass is hard to follow + + // doPostPresetLoadSteps() sets rto->presetID = GBS_PRESET_ID::read() = + // PresetHdBypass, and rto->isCustomPreset = GBS_PRESET_CUSTOM::read(). + + resetDebugPort(); + + rto->autoBestHtotalEnabled = false; // need to re-set this + GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP, 0 = sync from VDS + + GBS::PLL_CKIS::write(0); // 0_40 0 // 0: PLL uses OSC clock | 1: PLL uses input clock + GBS::PLL_DIVBY2Z::write(0); // 0_40 1 // 1= no divider (full clock, ie 27Mhz) 0 = halved + // GBS::PLL_ADS::write(0); // 0_40 3 test: input clock is from PCLKIN (disconnected, not ADC clock) + GBS::PAD_OSC_CNTRL::write(1); // test: noticed some wave pattern in 720p source, this fixed it + GBS::PLL648_CONTROL_01::write(0x35); + GBS::PLL648_CONTROL_03::write(0x00); + GBS::PLL_LEN::write(1); // 0_43 + GBS::DAC_RGBS_R0ENZ::write(1); + GBS::DAC_RGBS_G0ENZ::write(1); // 0_44 + GBS::DAC_RGBS_B0ENZ::write(1); + GBS::DAC_RGBS_S1EN::write(1); // 0_45 + // from RGBHV tests: the memory bus can be tri stated for noise reduction + GBS::PAD_TRI_ENZ::write(1); // enable tri state + GBS::PLL_MS::write(2); // select feedback clock (but need to enable tri state!) + GBS::MEM_PAD_CLK_INVERT::write(0); // helps also + GBS::RESET_CONTROL_0x47::write(0x1f); + + // update: found the real use of HDBypass :D + GBS::DAC_RGBS_BYPS2DAC::write(1); + GBS::SP_HS_LOOP_SEL::write(1); + GBS::SP_HS_PROC_INV_REG::write(0); // (5_56_5) do not invert HS + GBS::SP_CS_P_SWAP::write(0); // old default, set here to reset between HDBypass formats + GBS::SP_HS2PLL_INV_REG::write(0); // same + + GBS::PB_BYPASS::write(1); + GBS::PLLAD_MD::write(2345); // 2326 looks "better" on my LCD but 2345 looks just correct on scope + GBS::PLLAD_KS::write(2); // 5_16 post divider 0 : FCKO1 > 87MHz, 3 : FCKO1<23MHz + setOverSampleRatio(2, true); + GBS::PLLAD_ICP::write(5); + GBS::PLLAD_FS::write(1); + + if (rto->inputIsYpBpR) { + GBS::DEC_MATRIX_BYPS::write(1); // 5_1f 2 = 1 for YUV / 0 for RGB + GBS::HD_MATRIX_BYPS::write(0); // 1_30 1 / input to jacks is yuv, adc leaves it as yuv > convert to rgb for output here + GBS::HD_DYN_BYPS::write(0); // don't bypass color expansion + // GBS::HD_U_OFFSET::write(3); // color adjust via scope + // GBS::HD_V_OFFSET::write(3); // color adjust via scope + } else { + GBS::DEC_MATRIX_BYPS::write(1); // this is normally RGB input for HDBYPASS out > no color matrix at all + GBS::HD_MATRIX_BYPS::write(1); // 1_30 1 / input is rgb, adc leaves it as rgb > bypass matrix + GBS::HD_DYN_BYPS::write(1); // bypass as well + } + + GBS::HD_SEL_BLK_IN::write(0); // 0 enables HDB blank timing (1 would be DVI, not working atm) + + GBS::SP_SDCS_VSST_REG_H::write(0); // S5_3B + GBS::SP_SDCS_VSSP_REG_H::write(0); // S5_3B + GBS::SP_SDCS_VSST_REG_L::write(0); // S5_3F // 3 for SP sync + GBS::SP_SDCS_VSSP_REG_L::write(2); // S5_40 // 10 for SP sync // check with interlaced sources + + GBS::HD_HSYNC_RST::write(0x3ff); // max 0x7ff + GBS::HD_INI_ST::write(0); // todo: test this at 0 / was 0x298 + // timing into HDB is PLLAD_MD with PLLAD_KS divider: KS = 0 > full PLLAD_MD + if (rto->videoStandardInput <= 2) { + // PAL and NTSC are rewrites, the rest is still handled normally + // These 2 formats now have SP_HS2PLL_INV_REG set. That's the only way I know so far that + // produces recovered HSyncs that align to the falling edge of the input + // ToDo: find reliable input active flank detect to then set SP_HS2PLL_INV_REG correctly + // (for PAL/NTSC polarity is known to be active low, but other formats are variable) + GBS::SP_HS2PLL_INV_REG::write(1); // 5_56 1 lock to falling HS edge // check > sync issues with MD + GBS::SP_CS_P_SWAP::write(1); // 5_3e 0 new: this should negate the problem with inverting HS2PLL + GBS::SP_HS_PROC_INV_REG::write(1); // (5_56_5) invert HS to DEC + // invert mode detect HS/VS triggers, helps PSX NTSC detection. required with 5_3e 0 set + GBS::MD_HS_FLIP::write(1); + GBS::MD_VS_FLIP::write(1); + GBS::OUT_SYNC_SEL::write(2); // new: 0_4f 1=sync from HDBypass, 2=sync from SP, 0 = sync from VDS + GBS::SP_HS_LOOP_SEL::write(0); // 5_57 6 new: use full SP sync, enable HS positioning and pulse length control + GBS::ADC_FLTR::write(3); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + // GBS::HD_INI_ST::write(0x76); // 1_39 + + GBS::HD_HSYNC_RST::write((GBS::PLLAD_MD::read() / 2) + 8); // ADC output pixel count determined + GBS::HD_HB_ST::write(GBS::PLLAD_MD::read() * 0.945f); // 1_3B // no idea why it's not coupled to HD_RST + GBS::HD_HB_SP::write(0x90); // 1_3D + GBS::HD_HS_ST::write(0x80); // 1_3F // but better to use SP sync directly (OUT_SYNC_SEL = 2) + GBS::HD_HS_SP::write(0x00); // 1_41 // + // to use SP sync directly; prepare reasonable out HS length + GBS::SP_CS_HS_ST::write(0xA0); + GBS::SP_CS_HS_SP::write(0x00); + + if (rto->videoStandardInput == 1) { + setCsVsStart(250); // don't invert VS with direct SP sync mode + setCsVsStop(1); // stop relates to HS pulses from CS decoder directly, so mind EQ pulses + GBS::HD_VB_ST::write(500); // 1_43 + GBS::HD_VS_ST::write(3); // 1_47 // but better to use SP sync directly (OUT_SYNC_SEL = 2) + GBS::HD_VS_SP::write(522); // 1_49 // + GBS::HD_VB_SP::write(16); // 1_45 + } + if (rto->videoStandardInput == 2) { + setCsVsStart(301); // don't invert + setCsVsStop(5); // stop past EQ pulses (6 on psx) normally, but HDMI adapter works with -=1 (5) + GBS::HD_VB_ST::write(605); // 1_43 + GBS::HD_VS_ST::write(1); // 1_47 + GBS::HD_VS_SP::write(621); // 1_49 + GBS::HD_VB_SP::write(16); // 1_45 + } + } else if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4) { // 480p, 576p + GBS::ADC_FLTR::write(2); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + GBS::PLLAD_KS::write(1); // 5_16 post divider + GBS::PLLAD_CKOS::write(0); // 5_16 2x OS (with KS=1) + // GBS::HD_INI_ST::write(0x76); // 1_39 + GBS::HD_HB_ST::write(0x864); // 1_3B + // you *must* begin hblank before hsync. + GBS::HD_HB_SP::write(0xa0); // 1_3D + GBS::HD_VB_ST::write(0x00); // 1_43 + GBS::HD_VB_SP::write(0x40); // 1_45 + if (rto->videoStandardInput == 3) { + GBS::HD_HS_ST::write(0x54); // 1_3F + GBS::HD_HS_SP::write(0x864); // 1_41 + GBS::HD_VS_ST::write(0x06); // 1_47 // VS neg + GBS::HD_VS_SP::write(0x00); // 1_49 + setCsVsStart(525 - 5); + setCsVsStop(525 - 3); + } + if (rto->videoStandardInput == 4) { + GBS::HD_HS_ST::write(0x10); // 1_3F + GBS::HD_HS_SP::write(0x880); // 1_41 + GBS::HD_VS_ST::write(0x06); // 1_47 // VS neg + GBS::HD_VS_SP::write(0x00); // 1_49 + setCsVsStart(48); + setCsVsStop(46); + } + } else if (rto->videoStandardInput <= 7 || rto->videoStandardInput == 13) { + // GBS::SP_HS2PLL_INV_REG::write(0); // 5_56 1 use rising edge of tri-level sync // always 0 now + if (rto->videoStandardInput == 5) { // 720p + GBS::PLLAD_MD::write(2474); // override from 2345 + GBS::HD_HSYNC_RST::write(550); // 1_37 + // GBS::HD_INI_ST::write(78); // 1_39 + // 720p has high pllad vco output clock, so don't do oversampling + GBS::PLLAD_KS::write(0); // 5_16 post divider 0 : FCKO1 > 87MHz, 3 : FCKO1<23MHz + GBS::PLLAD_CKOS::write(0); // 5_16 1x OS (with KS=CKOS=0) + GBS::ADC_FLTR::write(0); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + GBS::ADC_CLK_ICLK1X::write(0); // 5_00 4 (OS=1) + GBS::DEC2_BYPS::write(1); // 5_1f 1 // dec2 disabled (OS=1) + GBS::PLLAD_ICP::write(6); // fine at 6 only, FS is 1 + GBS::PLLAD_FS::write(1); + GBS::HD_HB_ST::write(0); // 1_3B + GBS::HD_HB_SP::write(0x140); // 1_3D + GBS::HD_HS_ST::write(0x20); // 1_3F + GBS::HD_HS_SP::write(0x80); // 1_41 + GBS::HD_VB_ST::write(0x00); // 1_43 + GBS::HD_VB_SP::write(0x6c); // 1_45 // ps3 720p tested + GBS::HD_VS_ST::write(0x00); // 1_47 + GBS::HD_VS_SP::write(0x05); // 1_49 + setCsVsStart(2); + setCsVsStop(0); + } + if (rto->videoStandardInput == 6) { // 1080i + // interl. source + GBS::HD_HSYNC_RST::write(0x710); // 1_37 + // GBS::HD_INI_ST::write(2); // 1_39 + GBS::PLLAD_KS::write(1); // 5_16 post divider + GBS::PLLAD_CKOS::write(0); // 5_16 2x OS (with KS=1) + GBS::ADC_FLTR::write(1); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + GBS::HD_HB_ST::write(0); // 1_3B + GBS::HD_HB_SP::write(0xb8); // 1_3D + GBS::HD_HS_ST::write(0x04); // 1_3F + GBS::HD_HS_SP::write(0x50); // 1_41 + GBS::HD_VB_ST::write(0x00); // 1_43 + GBS::HD_VB_SP::write(0x1e); // 1_45 + GBS::HD_VS_ST::write(0x04); // 1_47 + GBS::HD_VS_SP::write(0x09); // 1_49 + setCsVsStart(8); + setCsVsStop(6); + } + if (rto->videoStandardInput == 7) { // 1080p + GBS::PLLAD_MD::write(2749); // override from 2345 + GBS::HD_HSYNC_RST::write(0x710); // 1_37 + // GBS::HD_INI_ST::write(0xf0); // 1_39 + // 1080p has highest pllad vco output clock, so don't do oversampling + GBS::PLLAD_KS::write(0); // 5_16 post divider 0 : FCKO1 > 87MHz, 3 : FCKO1<23MHz + GBS::PLLAD_CKOS::write(0); // 5_16 1x OS (with KS=CKOS=0) + GBS::ADC_FLTR::write(0); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + GBS::ADC_CLK_ICLK1X::write(0); // 5_00 4 (OS=1) + GBS::DEC2_BYPS::write(1); // 5_1f 1 // dec2 disabled (OS=1) + GBS::PLLAD_ICP::write(6); // was 5, fine at 6 as well, FS is 1 + GBS::PLLAD_FS::write(1); + GBS::HD_HB_ST::write(0x00); // 1_3B + GBS::HD_HB_SP::write(0xb0); // 1_3D // d0 + GBS::HD_HS_ST::write(0x20); // 1_3F + GBS::HD_HS_SP::write(0x70); // 1_41 + GBS::HD_VB_ST::write(0x00); // 1_43 + GBS::HD_VB_SP::write(0x2f); // 1_45 + GBS::HD_VS_ST::write(0x04); // 1_47 + GBS::HD_VS_SP::write(0x0A); // 1_49 + } + if (rto->videoStandardInput == 13) { // odd HD mode (PS2 "VGA" over Component) + applyRGBPatches(); // treat mostly as RGB, clamp R/B to gnd + rto->syncTypeCsync = true; // used in loop to set clamps and SP dynamic + GBS::DEC_MATRIX_BYPS::write(1); // overwrite for this mode + GBS::SP_PRE_COAST::write(4); + GBS::SP_POST_COAST::write(4); + GBS::SP_DLT_REG::write(0x70); + GBS::HD_MATRIX_BYPS::write(1); // bypass since we'll treat source as RGB + GBS::HD_DYN_BYPS::write(1); // bypass since we'll treat source as RGB + GBS::SP_VS_PROC_INV_REG::write(0); // don't invert + // same as with RGBHV, the ps2 resolution can vary widely + GBS::PLLAD_KS::write(0); // 5_16 post divider 0 : FCKO1 > 87MHz, 3 : FCKO1<23MHz + GBS::PLLAD_CKOS::write(0); // 5_16 1x OS (with KS=CKOS=0) + GBS::ADC_CLK_ICLK1X::write(0); // 5_00 4 (OS=1) + GBS::ADC_CLK_ICLK2X::write(0); // 5_00 3 (OS=1) + GBS::DEC1_BYPS::write(1); // 5_1f 1 // dec1 disabled (OS=1) + GBS::DEC2_BYPS::write(1); // 5_1f 1 // dec2 disabled (OS=1) + GBS::PLLAD_MD::write(512); // could try 856 + } + } + + if (rto->videoStandardInput == 13) { + // section is missing HD_HSYNC_RST and HD_INI_ST adjusts + uint16_t vtotal = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + if (vtotal < 532) { // 640x480 or less + GBS::PLLAD_KS::write(3); + GBS::PLLAD_FS::write(1); + } else if (vtotal >= 532 && vtotal < 810) { // 800x600, 1024x768 + // GBS::PLLAD_KS::write(3); // just a little too much at 1024x768 + GBS::PLLAD_FS::write(0); + GBS::PLLAD_KS::write(2); + } else { // if (vtotal > 1058 && vtotal < 1074) // 1280x1024 + GBS::PLLAD_KS::write(2); + GBS::PLLAD_FS::write(1); + } + } + + GBS::DEC_IDREG_EN::write(1); // 5_1f 7 + GBS::DEC_WEN_MODE::write(1); // 5_1e 7 // 1 keeps ADC phase consistent. around 4 lock positions vs totally random + rto->phaseSP = 8; + rto->phaseADC = 24; // fix value // works best with yuv input in tests + setAndUpdateSogLevel(rto->currentLevelSOG); // also re-latch everything + + rto->outModeHdBypass = 1; + + unsigned long timeout = millis(); + while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { + delay(1); + } + while ((getVideoMode() == 0) && (millis() - timeout < 1502)) { + delay(1); + } + // currently SP is using generic settings, switch to format specific ones + updateSpDynamic(0); + while ((getVideoMode() == 0) && (millis() - timeout < 1502)) { + delay(1); + } + + GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC + GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out + delay(200); + optimizePhaseSP(); + LOGN(F("pass-through on")); +} + +void bypassModeSwitch_RGBHV() +{ + if (!rto->boardHasPower) { + LOGN(F("GBS board not responding!")); + return; + } + + GBS::DAC_RGBS_PWDNZ::write(0); // disable DAC + GBS::PAD_SYNC_OUT_ENZ::write(1); // disable sync out + + loadHdBypassSection(); + externalClockGenResetClock(); + FrameSync::cleanup(); + GBS::ADC_UNUSED_62::write(0x00); // clear debug view + GBS::PA_ADC_BYPSZ::write(1); // enable phase unit ADC + GBS::PA_SP_BYPSZ::write(1); // enable phase unit SP + applyRGBPatches(); + resetDebugPort(); + rto->videoStandardInput = 15; // making sure + rto->autoBestHtotalEnabled = false; // not necessary, since VDS is off / bypassed // todo: mode 14 (works anyway) + rto->clampPositionIsSet = false; + rto->HPLLState = 0; + + GBS::PLL_CKIS::write(0); // 0_40 0 // 0: PLL uses OSC clock | 1: PLL uses input clock + GBS::PLL_DIVBY2Z::write(0); // 0_40 1 // 1= no divider (full clock, ie 27Mhz) 0 = halved clock + GBS::PLL_ADS::write(0); // 0_40 3 test: input clock is from PCLKIN (disconnected, not ADC clock) + GBS::PLL_MS::write(2); // 0_40 4-6 select feedback clock (but need to enable tri state!) + GBS::PAD_TRI_ENZ::write(1); // enable some pad's tri state (they become high-z / inputs), helps noise + GBS::MEM_PAD_CLK_INVERT::write(0); // helps also + GBS::PLL648_CONTROL_01::write(0x35); + GBS::PLL648_CONTROL_03::write(0x00); // 0_43 + GBS::PLL_LEN::write(1); // 0_43 + + GBS::DAC_RGBS_ADC2DAC::write(1); + GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP, (00 = from VDS) + + GBS::SFTRST_HDBYPS_RSTZ::write(1); // enable + GBS::HD_INI_ST::write(0); // needs to be some small value or apparently 0 works + // GBS::DAC_RGBS_BYPS2DAC::write(1); + // GBS::OUT_SYNC_SEL::write(2); // 0_4f sync from SP + // GBS::SFTRST_HDBYPS_RSTZ::write(1); // need HDBypass + // GBS::SP_HS_LOOP_SEL::write(1); // (5_57_6) // can bypass since HDBypass does sync + GBS::HD_MATRIX_BYPS::write(1); // bypass since we'll treat source as RGB + GBS::HD_DYN_BYPS::write(1); // bypass since we'll treat source as RGB + // GBS::HD_SEL_BLK_IN::write(1); // "DVI", not regular + + GBS::PAD_SYNC1_IN_ENZ::write(0); // filter H/V sync input1 (0 = on) + GBS::PAD_SYNC2_IN_ENZ::write(0); // filter H/V sync input2 (0 = on) + + GBS::SP_SOG_P_ATO::write(1); // 5_20 1 corrects hpw readout and slightly affects sync + if (rto->syncTypeCsync == false) { + GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: from hs // use ADC and turn it off = no SOG + GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG // having it 0 drags down the SOG (hsync) input; = 1: need to supress SOG decoding + GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) + GBS::SP_SOG_MODE::write(0); // 5_56 bit 0 // 0: normal, 1: SOG + GBS::SP_NO_COAST_REG::write(1); // vblank coasting off + GBS::SP_PRE_COAST::write(0); + GBS::SP_POST_COAST::write(0); + GBS::SP_H_PULSE_IGNOR::write(0xff); // cancel out SOG decoding + GBS::SP_SYNC_BYPS::write(0); // external H+V sync for decimator (+ sync out) | 1 to mirror in sync, 0 to output processed sync + GBS::SP_HS_POL_ATO::write(1); // 5_55 4 auto polarity for retiming + GBS::SP_VS_POL_ATO::write(1); // 5_55 6 + GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS + GBS::SP_H_PROTECT::write(0); // 5_3e 4 disable for H/V + rto->phaseADC = 16; + rto->phaseSP = 8; + } else { + // todo: SOG SRC can be ADC or HS input pin. HS requires TTL level, ADC can use lower levels + // HS seems to have issues at low PLL speeds + // maybe add detection whether ADC Sync is needed + GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: hs is sog source + GBS::SP_EXT_SYNC_SEL::write(1); // disconnect HV input + GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG + GBS::SP_SOG_MODE::write(1); // apparently needs to be off for HS input (on for ADC) + GBS::SP_NO_COAST_REG::write(0); // vblank coasting on + GBS::SP_PRE_COAST::write(4); // 5_38, > 4 can be seen with clamp invert on the lower lines + GBS::SP_POST_COAST::write(7); + GBS::SP_SYNC_BYPS::write(0); // use regular sync for decimator (and sync out) path + GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS + GBS::SP_H_PROTECT::write(1); // 5_3e 4 enable for SOG + rto->currentLevelSOG = 24; + rto->phaseADC = 16; + rto->phaseSP = 8; + } + GBS::SP_CLAMP_MANUAL::write(1); // needs to be 1 + GBS::SP_COAST_INV_REG::write(0); // just in case + + GBS::SP_DIS_SUB_COAST::write(1); // 5_3e 5 + GBS::SP_HS_PROC_INV_REG::write(0); // 5_56 5 + GBS::SP_VS_PROC_INV_REG::write(0); // 5_56 6 + GBS::PLLAD_KS::write(1); // 0 - 3 + setOverSampleRatio(2, true); // prepare only = true + GBS::DEC_MATRIX_BYPS::write(1); // 5_1f with adc to dac mode + GBS::ADC_FLTR::write(0); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + + GBS::PLLAD_ICP::write(4); + GBS::PLLAD_FS::write(0); // low gain + GBS::PLLAD_MD::write(1856); // 1349 perfect for for 1280x+ ; 1856 allows lower res to detect + + // T4R0x2B Bit: 3 (was 0x7) is now: 0xF + // S0R0x4F (was 0x80) is now: 0xBC + // 0_43 1a + // S5R0x2 (was 0x48) is now: 0x54 + // s5s11sb2 + // 0x25, // s0_44 + // 0x11, // s0_45 + // new: do without running default preset first + GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 1 // minor SOG clamp effect + GBS::ADC_TEST_04::write(0x02); // 5_04 + GBS::ADC_TEST_0C::write(0x12); // 5_0c 1 4 + GBS::DAC_RGBS_R0ENZ::write(1); + GBS::DAC_RGBS_G0ENZ::write(1); + GBS::DAC_RGBS_B0ENZ::write(1); + GBS::OUT_SYNC_CNTRL::write(1); + // resetPLL(); // try to avoid this + resetDigital(); // this will leave 0_46 all 0 + resetSyncProcessor(); // required to initialize SOG status + delay(2); + ResetSDRAM(); + delay(2); + resetPLLAD(); + togglePhaseAdjustUnits(); + delay(20); + GBS::PLLAD_LEN::write(1); // 5_11 1 + GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC + GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out + + // todo: detect if H-PLL parameters fit the source before aligning clocks (5_11 etc) + + setAndLatchPhaseSP(); // different for CSync and pure HV modes + setAndLatchPhaseADC(); + latchPLLAD(); + + if (uopt->enableAutoGain == 1 && adco->r_gain == 0) { + // LOGN(F("ADC gain: reset")); + setAdcGain(AUTO_GAIN_INIT); + GBS::DEC_TEST_ENABLE::write(1); + } else if (uopt->enableAutoGain == 1 && adco->r_gain != 0) { + /*LOGN(F("ADC gain: keep previous")); + LOGF("0x%04X", adco->r_gain); LOG(F(" ")); + LOGF("0x%04X", adco->g_gain); LOG(F(" ")); + LOGF("0x%04X", adco->b_gain); LOGN(F(" "));*/ + GBS::ADC_RGCTRL::write(adco->r_gain); + GBS::ADC_GGCTRL::write(adco->g_gain); + GBS::ADC_BGCTRL::write(adco->b_gain); + GBS::DEC_TEST_ENABLE::write(1); + } else { + GBS::DEC_TEST_ENABLE::write(0); // no need for decimation test to be enabled + } + + rto->presetID = PresetBypassRGBHV; // bypass flavor 2, used to signal buttons in web ui + GBS::GBS_PRESET_ID::write(PresetBypassRGBHV); + delay(200); +} + +void runAutoGain() +{ + static unsigned long lastTimeAutoGain = millis(); + uint8_t limit_found = 0, greenValue = 0; + uint8_t loopCeiling = 0; + uint8_t status00reg = GBS::STATUS_00::read(); // confirm no mode changes happened + + // GBS::DEC_TEST_SEL::write(5); + + // for (uint8_t i = 0; i < 14; i++) { + // uint8_t greenValue = GBS::TEST_BUS_2E::read(); + // if (greenValue >= 0x28 && greenValue <= 0x2f) { // 0x2c seems to be "highest" (haven't seen 0x2b yet) + // if (getStatus16SpHsStable() && (GBS::STATUS_00::read() == status00reg)) { + // limit_found++; + // } + // else return; + // } + // } + + if ((millis() - lastTimeAutoGain) < 30000) { + loopCeiling = 61; + } else { + loopCeiling = 8; + } + + for (uint8_t i = 0; i < loopCeiling; i++) { + if (i % 20 == 0) { + wifiLoop(0); + limit_found = 0; + } + greenValue = GBS::TEST_BUS_2F::read(); + + if (greenValue == 0x7f) { + if (getStatus16SpHsStable() && (GBS::STATUS_00::read() == status00reg)) { + limit_found++; + // 240p test suite (SNES ver): display vertical lines (hor. line test) + // Serial.print("g: "); Serial.println(greenValue, HEX); + // Serial.print("--"); Serial.println(); + } else + return; + + if (limit_found == 2) { + limit_found = 0; + uint8_t level = GBS::ADC_GGCTRL::read(); + if (level < 0xfe) { + setAdcGain(level + 2); + + // remember these gain settings + adco->r_gain = GBS::ADC_RGCTRL::read(); + adco->g_gain = GBS::ADC_GGCTRL::read(); + adco->b_gain = GBS::ADC_BGCTRL::read(); + + printInfo(); + delay(2); // let it settle a little + lastTimeAutoGain = millis(); + } + } + } + } +} + +void enableScanlines() +{ + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 0) { + // LOGN(F("enableScanlines())")); + + // GBS::RFF_ADR_ADD_2::write(0); + // GBS::RFF_REQ_SEL::write(1); + // GBS::RFF_MASTER_FLAG::write(0x3f); + // GBS::RFF_WFF_OFFSET::write(0); // scanline fix + // GBS::RFF_FETCH_NUM::write(0); + // GBS::RFF_ENABLE::write(1); //GBS::WFF_ENABLE::write(1); + // delay(10); + // GBS::RFF_ENABLE::write(0); //GBS::WFF_ENABLE::write(0); + + // following lines set up UV deinterlacer (on top of normal Y) + GBS::MADPT_UVDLY_PD_SP::write(0); // 2_39 0..3 + GBS::MADPT_UVDLY_PD_ST::write(0); // 2_39 4..7 + GBS::MADPT_EN_UV_DEINT::write(1); // 2_3a 0 + GBS::MADPT_UV_MI_DET_BYPS::write(1); // 2_3a 7 enables 2_3b adjust + GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); // 2_3b offset (mixing factor here) + GBS::MADPT_MO_ADP_UV_EN::write(1); // 2_16 5 (try to do this some other way?) + + GBS::DIAG_BOB_PLDY_RAM_BYPS::write(0); // 2_00 7 enabled, looks better + GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 + GBS::RFF_YUV_DEINTERLACE::write(1); // scanline fix 2 + GBS::MADPT_Y_MI_DET_BYPS::write(1); // make sure, so that mixing works + // GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 0x30); // more luma gain + // GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 4); + GBS::VDS_WLEV_GAIN::write(0x08); // 3_58 + GBS::VDS_W_LEV_BYPS::write(0); // brightness + GBS::MADPT_VIIR_COEF::write(0x08); // 2_27 VIIR filter strength + GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); // 2_0b offset (mixing factor here) + GBS::MADPT_VIIR_BYPS::write(0); // 2_26 6 VIIR line fifo // 1 = off + GBS::RFF_LINE_FLIP::write(1); // clears potential garbage in rff buffer + + GBS::MAPDT_VT_SEL_PRGV::write(0); + GBS::GBS_OPTION_SCANLINES_ENABLED::write(1); + } + rto->scanlinesEnabled = 1; +} + +void disableScanlines() +{ + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { + // LOGN(F("disableScanlines())")); + GBS::MAPDT_VT_SEL_PRGV::write(1); + + // following lines set up UV deinterlacer (on top of normal Y) + GBS::MADPT_UVDLY_PD_SP::write(4); // 2_39 0..3 + GBS::MADPT_UVDLY_PD_ST::write(4); // 2_39 4..77 + GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 + GBS::MADPT_UV_MI_DET_BYPS::write(0); // 2_3a 7 enables 2_3b adjust + GBS::MADPT_UV_MI_OFFSET::write(4); // 2_3b + GBS::MADPT_MO_ADP_UV_EN::write(0); // 2_16 5 + + GBS::DIAG_BOB_PLDY_RAM_BYPS::write(1); // 2_00 7 + GBS::VDS_W_LEV_BYPS::write(1); // brightness + // GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 0x30); + // GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 4); + GBS::MADPT_Y_MI_OFFSET::write(0xff); // 2_0b offset 0xff disables mixing + GBS::MADPT_VIIR_BYPS::write(1); // 2_26 6 disable VIIR + GBS::MADPT_PD_RAM_BYPS::write(1); + GBS::RFF_LINE_FLIP::write(0); // back to default + + GBS::GBS_OPTION_SCANLINES_ENABLED::write(0); + } + rto->scanlinesEnabled = 0; +} + +void enableMotionAdaptDeinterlace() +{ + freezeVideo(); + GBS::DEINT_00::write(0x19); // 2_00 // bypass angular (else 0x00) + GBS::MADPT_Y_MI_OFFSET::write(0x00); // 2_0b // also used for scanline mixing + // GBS::MADPT_STILL_NOISE_EST_EN::write(1); // 2_0A 5 (was 0 before) + GBS::MADPT_Y_MI_DET_BYPS::write(0); // 2_0a_7 // switch to automatic motion indexing + // GBS::MADPT_UVDLY_PD_BYPS::write(0); // 2_35_5 // UVDLY + // GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 + // GBS::MADPT_EN_STILL_FOR_NRD::write(1); // 2_3a 3 (new) + + if (rto->videoStandardInput == 1) + GBS::MADPT_VTAP2_COEFF::write(6); // 2_19 vertical filter + if (rto->videoStandardInput == 2) + GBS::MADPT_VTAP2_COEFF::write(4); + + // GBS::RFF_WFF_STA_ADDR_A::write(0); + // GBS::RFF_WFF_STA_ADDR_B::write(1); + GBS::RFF_ADR_ADD_2::write(1); + GBS::RFF_REQ_SEL::write(3); + // GBS::RFF_MASTER_FLAG::write(0x24); // use preset's value + // GBS::WFF_SAFE_GUARD::write(0); // 4_42 3 + GBS::RFF_FETCH_NUM::write(0x80); // part of RFF disable fix, could leave 0x80 always otherwise + GBS::RFF_WFF_OFFSET::write(0x100); // scanline fix + GBS::RFF_YUV_DEINTERLACE::write(0); // scanline fix 2 + GBS::WFF_FF_STA_INV::write(0); // 4_42_2 // 22.03.19 : turned off // update: only required in PAL? + // GBS::WFF_LINE_FLIP::write(0); // 4_4a_4 // 22.03.19 : turned off // update: only required in PAL? + GBS::WFF_ENABLE::write(1); // 4_42 0 // enable before RFF + GBS::RFF_ENABLE::write(1); // 4_4d 7 + // delay(60); // 55 first good + unfreezeVideo(); + delay(60); + GBS::MAPDT_VT_SEL_PRGV::write(0); // 2_16_7 + rto->motionAdaptiveDeinterlaceActive = true; +} + +void disableMotionAdaptDeinterlace() +{ + GBS::MAPDT_VT_SEL_PRGV::write(1); // 2_16_7 + GBS::DEINT_00::write(0xff); // 2_00 + + GBS::RFF_FETCH_NUM::write(0x1); // RFF disable fix + GBS::RFF_WFF_OFFSET::write(0x1); // RFF disable fix + delay(2); + GBS::WFF_ENABLE::write(0); + GBS::RFF_ENABLE::write(0); // can cause mem reset requirement, procedure above should fix it + + // GBS::WFF_ADR_ADD_2::write(0); + GBS::WFF_FF_STA_INV::write(1); // 22.03.19 : turned off // update: only required in PAL? + // GBS::WFF_LINE_FLIP::write(1); // 22.03.19 : turned off // update: only required in PAL? + GBS::MADPT_Y_MI_OFFSET::write(0x7f); + // GBS::MADPT_STILL_NOISE_EST_EN::write(0); // new + GBS::MADPT_Y_MI_DET_BYPS::write(1); + // GBS::MADPT_UVDLY_PD_BYPS::write(1); // 2_35_5 + // GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 + // GBS::MADPT_EN_STILL_FOR_NRD::write(0); // 2_3a 3 (new) + rto->motionAdaptiveDeinterlaceActive = false; +} + +bool snapToIntegralFrameRate(void) +{ + // Fetch the current output frame rate + float ofr = getOutputFrameRate(); + + if (ofr < 1.0f) { + delay(1); + ofr = getOutputFrameRate(); + } + + float target; + if (ofr > 56.5f && ofr < 64.5f) { + target = 60.0f; // NTSC like + } else if (ofr > 46.5f && ofr < 54.5f) { + target = 50.0f; // PAL like + } else { + // too far out of spec for an auto adjust + LOGN(F("out of bounds")); + return false; + } + + LOG(F("Snap to ")); + LOGF("%.1f", target); // precission 1 + LOGN(F("Hz")); + + // We'll be adjusting the htotal incrementally, so store current and best match. + uint16_t currentHTotal = GBS::VDS_HSYNC_RST::read(); + uint16_t closestHTotal = currentHTotal; + + // What's the closest we've been to the frame rate? + float closestDifference = fabs(target - ofr); + + // Repeatedly adjust htotals until we find the closest match. + for (;;) { + + delay(0); + + // Try to move closer to the desired framerate. + if (target > ofr) { + if (currentHTotal > 0 && applyBestHTotal(currentHTotal - 1)) { + --currentHTotal; + } else { + return false; + } + } else if (target < ofr) { + if (currentHTotal < 4095 && applyBestHTotal(currentHTotal + 1)) { + ++currentHTotal; + } else { + return false; + } + } else { + return true; + } + + // Are we closer? + ofr = getOutputFrameRate(); + + if (ofr < 1.0f) { + delay(1); + ofr = getOutputFrameRate(); + } + if (ofr < 1.0f) { + return false; + } + + // If we're getting closer, continue trying, otherwise break out of the test loop. + float newDifference = fabs(target - ofr); + if (newDifference < closestDifference) { + closestDifference = newDifference; + closestHTotal = currentHTotal; + } else { + break; + } + } + + // Reapply the closest htotal if need be. + if (closestHTotal != currentHTotal) { + applyBestHTotal(closestHTotal); + } + + return true; +} + +void printInfo() +{ + static char print[121]; // Increase if compiler complains about sprintf + static uint8_t clearIrqCounter = 0; + static uint8_t lockCounterPrevious = 0; + uint8_t lockCounter = 0; + + int32_t wifi = 0; + if ((WiFi.status() == WL_CONNECTED) || (WiFi.getMode() == WIFI_AP)) { + wifi = WiFi.RSSI(); + } + + uint16_t hperiod = GBS::HPERIOD_IF::read(); + uint16_t vperiod = GBS::VPERIOD_IF::read(); + uint8_t stat0FIrq = GBS::STATUS_0F::read(); + char HSp = GBS::STATUS_SYNC_PROC_HSPOL::read() ? '+' : '-'; // 0 = neg, 1 = pos + char VSp = GBS::STATUS_SYNC_PROC_VSPOL::read() ? '+' : '-'; // 0 = neg, 1 = pos + char h = 'H', v = 'V'; + if (!GBS::STATUS_SYNC_PROC_HSACT::read()) { + h = HSp = ' '; + } + if (!GBS::STATUS_SYNC_PROC_VSACT::read()) { + v = VSp = ' '; + } + + // int charsToPrint = + sprintf(print, "h:%4u v:%4u PLL:%01u A:%02x%02x%02x S:%02x.%02x.%02x %c%c%c%c I:%02x D:%04x m:%hu ht:%4d vt:%4d hpw:%4d u:%3x s:%2x S:%2d W:%2d\n", + hperiod, vperiod, lockCounterPrevious, + GBS::ADC_RGCTRL::read(), GBS::ADC_GGCTRL::read(), GBS::ADC_BGCTRL::read(), + GBS::STATUS_00::read(), GBS::STATUS_05::read(), GBS::SP_CS_0x3E::read(), + h, HSp, v, VSp, stat0FIrq, GBS::TEST_BUS::read(), getVideoMode(), + GBS::STATUS_SYNC_PROC_HTOTAL::read(), GBS::STATUS_SYNC_PROC_VTOTAL::read() /*+ 1*/, // emucrt: without +1 is correct line count + GBS::STATUS_SYNC_PROC_HLOW_LEN::read(), rto->noSyncCounter, rto->continousStableCounter, + rto->currentLevelSOG, wifi); + + // LOG(F("charsToPrint: ")); LOGN(charsToPrint); + LOG(print); + + if (stat0FIrq != 0x00) { + // clear 0_0F interrupt bits regardless of syncwatcher status + clearIrqCounter++; + if (clearIrqCounter >= 50) { + clearIrqCounter = 0; + GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status + GBS::INTERRUPT_CONTROL_00::write(0x00); + } + } + + yield(); + if (GBS::STATUS_SYNC_PROC_HSACT::read()) { // else source might not be active + for (uint8_t i = 0; i < 9; i++) { + if (GBS::STATUS_MISC_PLLAD_LOCK::read() == 1) { + lockCounter++; + } else { + for (int i = 0; i < 10; i++) { + if (GBS::STATUS_MISC_PLLAD_LOCK::read() == 1) { + lockCounter++; + break; + } + } + } + } + } + lockCounterPrevious = getMovingAverage(lockCounter); +} + +void stopWire() +{ + pinMode(SCL, INPUT); + pinMode(SDA, INPUT); + delayMicroseconds(80); +} + +void startWire() +{ + Wire.begin(); + // The i2c wire library sets pullup resistors on by default. + // Disable these to detect/work with GBS onboard pullups + pinMode(SCL, OUTPUT_OPEN_DRAIN); + pinMode(SDA, OUTPUT_OPEN_DRAIN); + // no issues even at 700k, requires ESP8266 160Mhz CPU clock, else (80Mhz) uses 400k in library + // no problem with Si5351 at 700k either + Wire.setClock(400000); + // Wire.setClock(700000); +} + +void fastSogAdjust() +{ + if (rto->noSyncCounter <= 5) { + uint8_t debug_backup = GBS::TEST_BUS_SEL::read(); + uint8_t debug_backup_SP = GBS::TEST_BUS_SP_SEL::read(); + if (debug_backup != 0xa) { + GBS::TEST_BUS_SEL::write(0xa); + } + if (debug_backup_SP != 0x0f) { + GBS::TEST_BUS_SP_SEL::write(0x0f); + } + + if ((GBS::TEST_BUS_2F::read() & 0x05) != 0x05) { + while ((GBS::TEST_BUS_2F::read() & 0x05) != 0x05) { + if (rto->currentLevelSOG >= 4) { + rto->currentLevelSOG -= 2; + } else { + rto->currentLevelSOG = 13; + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(40); + break; // abort / restart next round + } + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(28); // 4 + } + delay(10); + } + + if (debug_backup != 0xa) { + GBS::TEST_BUS_SEL::write(debug_backup); + } + if (debug_backup_SP != 0x0f) { + GBS::TEST_BUS_SP_SEL::write(debug_backup_SP); + } + } +} + +void runSyncWatcher() +{ + if (!rto->boardHasPower) { + return; + } + + static uint8_t newVideoModeCounter = 0; + static uint16_t activeStableLineCount = 0; + static unsigned long lastSyncDrop = millis(); + static unsigned long lastLineCountMeasure = millis(); + + uint16_t thisStableLineCount = 0; + uint8_t detectedVideoMode = getVideoMode(); + bool status16SpHsStable = getStatus16SpHsStable(); + + if (rto->outModeHdBypass && status16SpHsStable) { + if (videoStandardInputIsPalNtscSd()) { + if (millis() - lastLineCountMeasure > 765) { + thisStableLineCount = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + for (uint8_t i = 0; i < 3; i++) { + delay(2); + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() < (thisStableLineCount - 3) || + GBS::STATUS_SYNC_PROC_VTOTAL::read() > (thisStableLineCount + 3)) { + thisStableLineCount = 0; + break; + } + } + + if (thisStableLineCount != 0) { + if (thisStableLineCount < (activeStableLineCount - 3) || + thisStableLineCount > (activeStableLineCount + 3)) { + activeStableLineCount = thisStableLineCount; + if (activeStableLineCount < 230 || activeStableLineCount > 340) { + // only doing NTSC/PAL currently, an unusual line count probably means a format change + setCsVsStart(1); + if (getCsVsStop() == 1) { + setCsVsStop(2); + } + // MD likes to get stuck as usual + nudgeMD(); + } else { + setCsVsStart(thisStableLineCount - 9); + } + + Serial.printf("HDBypass CsVsSt: %d\n", getCsVsStart()); + delay(150); + } + } + + lastLineCountMeasure = millis(); + } + } + } + + if (rto->videoStandardInput == 13) { // using flaky graphic modes + if (detectedVideoMode == 0) { + if (GBS::STATUS_INT_SOG_BAD::read() == 0) { + detectedVideoMode = 13; // then keep it + } + } + } + + static unsigned long preemptiveSogWindowStart = millis(); + static const uint16_t sogWindowLen = 3000; // ms + static uint16_t badHsActive = 0; + static bool lastAdjustWasInActiveWindow = 0; + + if (rto->syncTypeCsync && !rto->inputIsYpBpR && (newVideoModeCounter == 0)) { + // look for SOG instability + if (GBS::STATUS_INT_SOG_BAD::read() == 1 || GBS::STATUS_INT_SOG_SW::read() == 1) { + resetInterruptSogSwitchBit(); + if ((millis() - preemptiveSogWindowStart) > sogWindowLen) { + // start new window + preemptiveSogWindowStart = millis(); + badHsActive = 0; + } + lastVsyncLock = millis(); // best reset this + } + + if ((millis() - preemptiveSogWindowStart) < sogWindowLen) { + for (uint8_t i = 0; i < 16; i++) { + if (GBS::STATUS_INT_SOG_BAD::read() == 1 || GBS::STATUS_SYNC_PROC_HSACT::read() == 0) { + resetInterruptSogBadBit(); + uint16_t hlowStart = GBS::STATUS_SYNC_PROC_HLOW_LEN::read(); + if (rto->videoStandardInput == 0) + hlowStart = 777; // fix initial state no HLOW_LEN + for (int a = 0; a < 20; a++) { + if (GBS::STATUS_SYNC_PROC_HLOW_LEN::read() != hlowStart) { + // okay, source still active so count this one, break back to outer for loop + badHsActive++; + lastVsyncLock = millis(); // delay this + // Serial.print(badHsActive); Serial.print(" "); + break; + } + } + } + if ((i % 3) == 0) { + delay(1); + } else { + delay(0); + } + } + + if (badHsActive >= 17) { + if (rto->currentLevelSOG >= 2) { + rto->currentLevelSOG -= 1; + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(30); + updateSpDynamic(0); + badHsActive = 0; + lastAdjustWasInActiveWindow = 1; + } else if (badHsActive > 40) { + optimizeSogLevel(); + badHsActive = 0; + lastAdjustWasInActiveWindow = 1; + } + preemptiveSogWindowStart = millis(); // restart window + } + } else if (lastAdjustWasInActiveWindow) { + lastAdjustWasInActiveWindow = 0; + if (rto->currentLevelSOG >= 8) { + rto->currentLevelSOG -= 1; + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(30); + updateSpDynamic(0); + badHsActive = 0; + rto->phaseIsSet = 0; + } + } + } + + if ((detectedVideoMode == 0 || !status16SpHsStable) && rto->videoStandardInput != 15) { + rto->noSyncCounter++; + rto->continousStableCounter = 0; + lastVsyncLock = millis(); // best reset this + if (rto->noSyncCounter == 1) { + freezeVideo(); + return; // do nothing else + } + + rto->phaseIsSet = 0; + + if (rto->noSyncCounter <= 3 || GBS::STATUS_SYNC_PROC_HSACT::read() == 0) { + freezeVideo(); + } + + if (newVideoModeCounter == 0) { + LEDOFF; // LEDOFF on sync loss + + if (rto->noSyncCounter == 2) { // this usually repeats + // printInfo(); printInfo(); LOGN(); + // rto->printInfos = 0; + if ((millis() - lastSyncDrop) > 1500) { // minimum space between runs + if (rto->printInfos == false) { + LOG(F("\n.")); + } + } else { + if (rto->printInfos == false) { + LOG(F(".")); + } + } + + // if sog is lowest, adjust up + if (rto->currentLevelSOG <= 1 && videoStandardInputIsPalNtscSd()) { + rto->currentLevelSOG += 1; + setAndUpdateSogLevel(rto->currentLevelSOG); + delay(30); + } + lastSyncDrop = millis(); // restart timer + } + } + + if (rto->noSyncCounter == 8) { + GBS::SP_H_CST_ST::write(0x10); + GBS::SP_H_CST_SP::write(0x100); + // GBS::SP_H_PROTECT::write(1); // at noSyncCounter = 32 will alternate on / off + if (videoStandardInputIsPalNtscSd()) { + // this can early detect mode changes (before updateSpDynamic resets all) + GBS::SP_PRE_COAST::write(9); + GBS::SP_POST_COAST::write(9); + // new: test SD<>EDTV changes + uint8_t ignore = GBS::SP_H_PULSE_IGNOR::read(); + if (ignore >= 0x33) { + GBS::SP_H_PULSE_IGNOR::write(ignore / 2); + } + } + rto->coastPositionIsSet = 0; + } + + if (rto->noSyncCounter % 27 == 0) { + // the * check needs to be first (go before auto sog level) to support SD > HDTV detection + LOG(F("*")); + updateSpDynamic(1); + } + + if (rto->noSyncCounter % 32 == 0) { + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + unfreezeVideo(); + } else { + freezeVideo(); + } + } + + if (rto->inputIsYpBpR && (rto->noSyncCounter == 34)) { + GBS::SP_NO_CLAMP_REG::write(1); // unlock clamp + rto->clampPositionIsSet = false; + } + + if (rto->noSyncCounter == 38) { + nudgeMD(); + } + + if (rto->syncTypeCsync) { + if (rto->noSyncCounter > 47) { + if (rto->noSyncCounter % 16 == 0) { + GBS::SP_H_PROTECT::write(!GBS::SP_H_PROTECT::read()); + } + } + } + + if (rto->noSyncCounter % 150 == 0) { + if (rto->noSyncCounter == 150 || rto->noSyncCounter % 900 == 0) { + LOG(F("\nno signal\n")); + // check whether discrete VSync is present. if so, need to go to input detect + uint8_t extSyncBackup = GBS::SP_EXT_SYNC_SEL::read(); + GBS::SP_EXT_SYNC_SEL::write(0); + delay(240); + printInfo(); + if (GBS::STATUS_SYNC_PROC_VSACT::read() == 1) { + delay(10); + if (GBS::STATUS_SYNC_PROC_VSACT::read() == 1) { + rto->noSyncCounter = 0x07fe; + } + } + GBS::SP_EXT_SYNC_SEL::write(extSyncBackup); + } + GBS::SP_H_COAST::write(0); // 5_3e 2 + GBS::SP_H_PROTECT::write(0); // 5_3e 4 + GBS::SP_H_CST_ST::write(0x10); + GBS::SP_H_CST_SP::write(0x100); // instead of disabling 5_3e 5 coast + GBS::SP_CS_CLP_ST::write(32); // neutral clamp values + GBS::SP_CS_CLP_SP::write(48); // + updateSpDynamic(1); + nudgeMD(); // can fix MD not noticing a line count update + delay(80); + + // prepare optimizeSogLevel + // use STATUS_SYNC_PROC_HLOW_LEN changes to determine whether source is still active + uint16_t hlowStart = GBS::STATUS_SYNC_PROC_HLOW_LEN::read(); + if (GBS::PLLAD_VCORST::read() == 1) { + // exception: we're in startup and pllad isn't locked yet > HLOW_LEN always 0 + hlowStart = 777; // now it'll run optimizeSogLevel if needed + } + for (int a = 0; a < 128; a++) { + if (GBS::STATUS_SYNC_PROC_HLOW_LEN::read() != hlowStart) { + // source still there + if (rto->noSyncCounter % 450 == 0) { + rto->currentLevelSOG = 0; // worst case, sometimes necessary, will be unstable but at least detect + setAndUpdateSogLevel(rto->currentLevelSOG); + } else { + optimizeSogLevel(); + } + break; + } else if (a == 127) { + // set sog to be able to see something + rto->currentLevelSOG = 5; + setAndUpdateSogLevel(rto->currentLevelSOG); + } + delay(0); + } + + resetSyncProcessor(); + delay(8); + resetModeDetect(); + delay(8); + } + + // long no signal time, check other input + if (rto->noSyncCounter % 413 == 0) { + if (GBS::ADC_INPUT_SEL::read() == 1) { + GBS::ADC_INPUT_SEL::write(0); + } else { + GBS::ADC_INPUT_SEL::write(1); + } + delay(40); + unsigned long timeout = millis(); + while (millis() - timeout <= 210) { + if (getStatus16SpHsStable()) { + rto->noSyncCounter = 0x07fe; // will cause a return + break; + } + wifiLoop(0); + delay(1); + } + + if (millis() - timeout > 210) { + if (GBS::ADC_INPUT_SEL::read() == 1) { + GBS::ADC_INPUT_SEL::write(0); + } else { + GBS::ADC_INPUT_SEL::write(1); + } + } + } + + newVideoModeCounter = 0; + // sog unstable check end + } + + // if format changed to valid, potentially new video mode + if (((detectedVideoMode != 0 && detectedVideoMode != rto->videoStandardInput) || + (detectedVideoMode != 0 && rto->videoStandardInput == 0)) && + rto->videoStandardInput != 15) { + // before thoroughly checking for a mode change, watch format via newVideoModeCounter + if (newVideoModeCounter < 255) { + newVideoModeCounter++; + rto->continousStableCounter = 0; // usually already 0, but occasionally not + if (newVideoModeCounter > 1) { // help debug a few commits worth + if (newVideoModeCounter == 2) { + LOGN(); + } + LOG(newVideoModeCounter); + } + if (newVideoModeCounter == 3) { + freezeVideo(); + GBS::SP_H_CST_ST::write(0x10); + GBS::SP_H_CST_SP::write(0x100); + rto->coastPositionIsSet = 0; + delay(10); + if (getVideoMode() == 0) { + updateSpDynamic(1); // check ntsc to 480p and back + delay(40); + } + } + } + + if (newVideoModeCounter >= 8) { + uint8_t vidModeReadout = 0; + LOG(F("\nFormat change:")); + for (int a = 0; a < 30; a++) { + vidModeReadout = getVideoMode(); + if (vidModeReadout == 13) { + newVideoModeCounter = 5; + } // treat ps2 quasi rgb as stable + if (vidModeReadout != detectedVideoMode) { + newVideoModeCounter = 0; + } + } + if (newVideoModeCounter != 0) { + // apply new mode + LOG(F(" ")); + LOG(vidModeReadout); + LOGN(F(" ")); + // Serial.print("Old: "); Serial.print(rto->videoStandardInput); + // Serial.print(" New: "); Serial.println(detectedVideoMode); + rto->videoIsFrozen = false; + + if (GBS::SP_SOG_MODE::read() == 1) { + rto->syncTypeCsync = true; + } else { + rto->syncTypeCsync = false; + } + bool wantPassThroughMode = uopt->presetPreference == 10; + + if (((rto->videoStandardInput == 1 || rto->videoStandardInput == 3) && (detectedVideoMode == 2 || detectedVideoMode == 4)) || + rto->videoStandardInput == 0 || + ((rto->videoStandardInput == 2 || rto->videoStandardInput == 4) && (detectedVideoMode == 1 || detectedVideoMode == 3))) { + rto->useHdmiSyncFix = 1; + // LOGN(F("hdmi sync fix: yes")); + } else { + rto->useHdmiSyncFix = 0; + // LOGN(F("hdmi sync fix: no")); + } + + if (!wantPassThroughMode) { + // needs to know the sync type for early updateclamp (set above) + applyPresets(detectedVideoMode); + } else { + rto->videoStandardInput = detectedVideoMode; + setOutModeHdBypass(false); + } + rto->videoStandardInput = detectedVideoMode; + rto->noSyncCounter = 0; + rto->continousStableCounter = 0; // also in postloadsteps + newVideoModeCounter = 0; + activeStableLineCount = 0; + delay(20); // post delay + badHsActive = 0; + preemptiveSogWindowStart = millis(); + } else { + unfreezeVideo(); // (whops) + LOG(F(" ")); + LOG(vidModeReadout); + LOGN(F(" ")); + printInfo(); + newVideoModeCounter = 0; + if (rto->videoStandardInput == 0) { + // if we got here from standby mode, return there soon + // but occasionally, this is a regular new mode that needs a SP parameter change to work + // ie: 1080p needs longer post coast, which the syncwatcher loop applies at some point + rto->noSyncCounter = 0x05ff; // give some time in normal loop + } + } + } + } else if (getStatus16SpHsStable() && detectedVideoMode != 0 && rto->videoStandardInput != 15 && (rto->videoStandardInput == detectedVideoMode)) { + // last used mode reappeared / stable again + if (rto->continousStableCounter < 255) { + rto->continousStableCounter++; + } + + static bool doFullRestore = 0; + if (rto->noSyncCounter >= 150) { + // source was gone for longer // clamp will be updated at continousStableCounter 50 + rto->coastPositionIsSet = false; + rto->phaseIsSet = false; + FrameSync::reset(uopt->frameTimeLockMethod); + doFullRestore = 1; + LOGN(); + } + + rto->noSyncCounter = 0; + newVideoModeCounter = 0; + + if (rto->continousStableCounter == 1 && !doFullRestore) { + rto->videoIsFrozen = true; // ensures unfreeze + unfreezeVideo(); + } + + if (rto->continousStableCounter == 2) { + updateSpDynamic(0); + if (doFullRestore) { + delay(20); + optimizeSogLevel(); + doFullRestore = 0; + } + rto->videoIsFrozen = true; // ensures unfreeze + unfreezeVideo(); // called 2nd time here to make sure + } + + if (rto->continousStableCounter == 4) { + LEDON; + } + + if (!rto->phaseIsSet) { + if (rto->continousStableCounter >= 10 && rto->continousStableCounter < 61) { + // added < 61 to make a window, else sources with little pll lock hammer this + if ((rto->continousStableCounter % 10) == 0) { + rto->phaseIsSet = optimizePhaseSP(); + } + } + } + + // 5_3e 2 SP_H_COAST test + // if (rto->continousStableCounter == 11) { + // if (rto->coastPositionIsSet) { + // GBS::SP_H_COAST::write(1); + // } + //} + + if (rto->continousStableCounter == 160) { + resetInterruptSogBadBit(); + } + + if (rto->continousStableCounter == 45) { + GBS::ADC_UNUSED_67::write(0); // clear sync fix temp registers (67/68) + // rto->coastPositionIsSet = 0; // leads to a flicker + rto->clampPositionIsSet = 0; // run updateClampPosition occasionally + } + + if (rto->continousStableCounter % 31 == 0) { + // new: 8 regular interval checks up until 255 + updateSpDynamic(0); + } + + if (rto->continousStableCounter >= 3) { + if ((rto->videoStandardInput == 1 || rto->videoStandardInput == 2) && + !rto->outModeHdBypass && rto->noSyncCounter == 0) { + // deinterlacer and scanline code + static uint8_t timingAdjustDelay = 0; + static uint8_t oddEvenWhenArmed = 0; + bool preventScanlines = 0; + + if (rto->deinterlaceAutoEnabled) { + uint16_t VPERIOD_IF = GBS::VPERIOD_IF::read(); + static uint8_t filteredLineCountMotionAdaptiveOn = 0, filteredLineCountMotionAdaptiveOff = 0; + static uint16_t VPERIOD_IF_OLD = VPERIOD_IF; // for glitch filter + + if (VPERIOD_IF_OLD != VPERIOD_IF) { + // freezeVideo(); // glitch filter + preventScanlines = 1; + filteredLineCountMotionAdaptiveOn = 0; + filteredLineCountMotionAdaptiveOff = 0; + if (uopt->enableFrameTimeLock || rto->extClockGenDetected) { + if (uopt->deintMode == 1) { // using bob + timingAdjustDelay = 11; // arm timer (always) + oddEvenWhenArmed = VPERIOD_IF % 2; + } + } + } + + if (VPERIOD_IF == 522 || VPERIOD_IF == 524 || VPERIOD_IF == 526 || + VPERIOD_IF == 622 || VPERIOD_IF == 624 || VPERIOD_IF == 626) { // ie v:524, even counts > enable + filteredLineCountMotionAdaptiveOn++; + filteredLineCountMotionAdaptiveOff = 0; + if (filteredLineCountMotionAdaptiveOn >= 2) // at least >= 2 + { + if (uopt->deintMode == 0 && !rto->motionAdaptiveDeinterlaceActive) { + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled + disableScanlines(); + } + enableMotionAdaptDeinterlace(); + if (timingAdjustDelay == 0) { + timingAdjustDelay = 11; // arm timer only if it's not already armed + oddEvenWhenArmed = VPERIOD_IF % 2; + } else { + timingAdjustDelay = 0; // cancel timer + } + preventScanlines = 1; + } + filteredLineCountMotionAdaptiveOn = 0; + } + } else if (VPERIOD_IF == 521 || VPERIOD_IF == 523 || VPERIOD_IF == 525 || + VPERIOD_IF == 623 || VPERIOD_IF == 625 || VPERIOD_IF == 627) { // ie v:523, uneven counts > disable + filteredLineCountMotionAdaptiveOff++; + filteredLineCountMotionAdaptiveOn = 0; + if (filteredLineCountMotionAdaptiveOff >= 2) // at least >= 2 + { + if (uopt->deintMode == 0 && rto->motionAdaptiveDeinterlaceActive) { + disableMotionAdaptDeinterlace(); + if (timingAdjustDelay == 0) { + timingAdjustDelay = 11; // arm timer only if it's not already armed + oddEvenWhenArmed = VPERIOD_IF % 2; + } else { + timingAdjustDelay = 0; // cancel timer + } + } + filteredLineCountMotionAdaptiveOff = 0; + } + } else { + filteredLineCountMotionAdaptiveOn = filteredLineCountMotionAdaptiveOff = 0; + } + + VPERIOD_IF_OLD = VPERIOD_IF; // part of glitch filter + + if (uopt->deintMode == 1) { // using bob + if (rto->motionAdaptiveDeinterlaceActive) { + disableMotionAdaptDeinterlace(); + FrameSync::reset(uopt->frameTimeLockMethod); + GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); + lastVsyncLock = millis(); + } + if (uopt->wantScanlines && !rto->scanlinesEnabled) { + enableScanlines(); + } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + disableScanlines(); + } + } + + // timing adjust after a few stable cycles + // should arrive here with either odd or even VPERIOD_IF + /*if (timingAdjustDelay != 0) { + Serial.print(timingAdjustDelay); Serial.print(" "); + }*/ + if (timingAdjustDelay != 0) { + if ((VPERIOD_IF % 2) == oddEvenWhenArmed) { + timingAdjustDelay--; + if (timingAdjustDelay == 0) { + if (uopt->enableFrameTimeLock) { + FrameSync::reset(uopt->frameTimeLockMethod); + GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); + delay(10); + lastVsyncLock = millis(); + } + externalClockGenSyncInOutRate(); + } + } + /*else { + Serial.println("!!!"); + }*/ + } + } + + // scanlines + if (uopt->wantScanlines) { + if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive && !preventScanlines) { + enableScanlines(); + } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + disableScanlines(); + } + } + } + } + } + + if (rto->videoStandardInput >= 14) { // RGBHV checks + static uint16_t RGBHVNoSyncCounter = 0; + + if (uopt->preferScalingRgbhv && rto->continousStableCounter >= 2) { + bool needPostAdjust = 0; + static uint16_t activePresetLineCount = 0; + // is the source in range for scaling RGBHV and is it currently in mode 15? + uint16 sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); // if sourceLines = 0, might be in some reset state + if ((sourceLines <= 535 && sourceLines != 0) && rto->videoStandardInput == 15) { + uint16_t firstDetectedSourceLines = sourceLines; + bool moveOn = 1; + for (int i = 0; i < 30; i++) { // not the best check, but we don't want to try if this is not stable (usually is though) + sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + // range needed for interlace + if ((sourceLines < firstDetectedSourceLines - 3) || (sourceLines > firstDetectedSourceLines + 3)) { + moveOn = 0; + break; + } + delay(10); + } + if (moveOn) { + LOGN(F(" RGB/HV upscale mode")); + rto->isValidForScalingRGBHV = true; + GBS::GBS_OPTION_SCALING_RGBHV::write(1); + rto->autoBestHtotalEnabled = 1; + + if (rto->syncTypeCsync == false) { + GBS::SP_SOG_MODE::write(0); + GBS::SP_NO_COAST_REG::write(1); + GBS::ADC_5_00::write(0x10); // 5_00 might be required + GBS::PLL_IS::write(0); // 0_40 2: this provides a clock for IF and test bus readings + GBS::PLL_VCORST::write(1); // 0_43 5: also required for clock + delay(320); // min 250 + } else { + GBS::SP_SOG_MODE::write(1); + GBS::SP_H_CST_ST::write(0x10); // 5_4d // set some default values + GBS::SP_H_CST_SP::write(0x80); // will be updated later + GBS::SP_H_PROTECT::write(1); // some modes require this (or invert SOG) + } + delay(4); + + float sourceRate = getSourceFieldRate(1); + Serial.println(sourceRate); + + // todo: this hack is hard to understand when looking at applypreset and mode is suddenly 1,2 or 3 + if (uopt->presetPreference == 2) { + // custom preset defined, try to load (set mode = 14 here early) + rto->videoStandardInput = 14; + } else { + if (sourceLines < 280) { + // this is "NTSC like?" check, seen 277 lines in "512x512 interlaced (emucrt)" + rto->videoStandardInput = 1; + } else if (sourceLines < 380) { + // this is "PAL like?" check, seen vt:369 (MDA mode) + rto->videoStandardInput = 2; + } else if (sourceRate > 44.0f && sourceRate < 53.8f) { + // not low res but PAL = "EDTV" + rto->videoStandardInput = 4; + needPostAdjust = 1; + } else { // sourceRate > 53.8f + // "60Hz EDTV" + rto->videoStandardInput = 3; + needPostAdjust = 1; + } + } + + if (uopt->presetPreference == 10) { + uopt->presetPreference = Output960P; // fix presetPreference which can be "bypass" + } + + activePresetLineCount = sourceLines; + applyPresets(rto->videoStandardInput); + + GBS::GBS_OPTION_SCALING_RGBHV::write(1); + GBS::IF_INI_ST::write(16); // fixes pal(at least) interlace + GBS::SP_SOG_P_ATO::write(1); // 5_20 1 auto SOG polarity (now "hpw" should never be close to "ht") + + GBS::SP_SDCS_VSST_REG_L::write(2); // 5_3f + GBS::SP_SDCS_VSSP_REG_L::write(0); // 5_40 + + rto->coastPositionIsSet = rto->clampPositionIsSet = 0; + rto->videoStandardInput = 14; + + if (GBS::PLLAD_ICP::read() >= 6) { + GBS::PLLAD_ICP::write(5); // reduce charge pump current for more general use + latchPLLAD(); + delay(40); + } + + updateSpDynamic(1); + if (rto->syncTypeCsync == false) { + GBS::SP_SOG_MODE::write(0); + GBS::SP_CLAMP_MANUAL::write(1); + GBS::SP_NO_COAST_REG::write(1); + } else { + GBS::SP_SOG_MODE::write(1); + GBS::SP_H_CST_ST::write(0x10); // 5_4d // set some default values + GBS::SP_H_CST_SP::write(0x80); // will be updated later + GBS::SP_H_PROTECT::write(1); // some modes require this (or invert SOG) + } + delay(300); + + if (rto->extClockGenDetected) { + // switch to ext clock + if (!rto->outModeHdBypass) { + if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // first store original in an option byte in 1_2D + GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // enable and switch input + Si.enable(0); + delayMicroseconds(800); + GBS::PLL648_CONTROL_01::write(0x75); + } + } + // sync clocks now + externalClockGenSyncInOutRate(); + } + + // note: this is all duplicated below. unify! + if (needPostAdjust) { + // base preset was "3" / no line doubling + // info: actually the position needs to be adjusted based on hor. freq or "h:" value (todo!) + GBS::IF_HB_ST2::write(0x08); // patches + GBS::IF_HB_SP2::write(0x68); // image + GBS::IF_HBIN_SP::write(0x50); // position + if (rto->presetID == 0x05) { + GBS::IF_HB_ST2::write(0x480); + GBS::IF_HB_SP2::write(0x8E); + } + + float sfr = getSourceFieldRate(0); + if (sfr >= 69.0) { + LOGN(F("source >= 70Hz")); + // increase vscale; vscale -= 57 seems to hit magic factor often + // 512 + 57 = 569 + 57 = 626 + 57 = 683 + GBS::VDS_VSCALE::write(GBS::VDS_VSCALE::read() - 57); + + } else { + // 50/60Hz, presumably + // adjust vposition + GBS::IF_VB_SP::write(8); + GBS::IF_VB_ST::write(6); + } + } + } + } + // if currently in scaling RGB/HV, check for "SD" < > "EDTV" style source changes + else if ((sourceLines <= 535 && sourceLines != 0) && rto->videoStandardInput == 14) { + // todo: custom presets? + if (sourceLines < 280 && activePresetLineCount > 280) { + rto->videoStandardInput = 1; + } else if (sourceLines < 380 && activePresetLineCount > 380) { + rto->videoStandardInput = 2; + } else if (sourceLines > 380 && activePresetLineCount < 380) { + rto->videoStandardInput = 3; + needPostAdjust = 1; + } + + if (rto->videoStandardInput != 14) { + // check thoroughly first + uint16_t firstDetectedSourceLines = sourceLines; + bool moveOn = 1; + for (int i = 0; i < 30; i++) { + sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + if ((sourceLines < firstDetectedSourceLines - 3) || (sourceLines > firstDetectedSourceLines + 3)) { + moveOn = 0; + break; + } + delay(10); + } + + if (moveOn) { + // need to change presets + if (rto->videoStandardInput <= 2) { + LOGN(F(" RGB/HV upscale mode base 15kHz")); + } else { + LOGN(F(" RGB/HV upscale mode base 31kHz")); + } + + if (uopt->presetPreference == 10) { + uopt->presetPreference = Output960P; // fix presetPreference which can be "bypass" + } + + activePresetLineCount = sourceLines; + applyPresets(rto->videoStandardInput); + + GBS::GBS_OPTION_SCALING_RGBHV::write(1); + GBS::IF_INI_ST::write(16); // fixes pal(at least) interlace + GBS::SP_SOG_P_ATO::write(1); // 5_20 1 auto SOG polarity + + // adjust vposition + GBS::SP_SDCS_VSST_REG_L::write(2); // 5_3f + GBS::SP_SDCS_VSSP_REG_L::write(0); // 5_40 + + rto->coastPositionIsSet = rto->clampPositionIsSet = 0; + rto->videoStandardInput = 14; + + if (GBS::PLLAD_ICP::read() >= 6) { + GBS::PLLAD_ICP::write(5); // reduce charge pump current for more general use + latchPLLAD(); + } + + updateSpDynamic(1); + if (rto->syncTypeCsync == false) { + GBS::SP_SOG_MODE::write(0); + GBS::SP_CLAMP_MANUAL::write(1); + GBS::SP_NO_COAST_REG::write(1); + } else { + GBS::SP_SOG_MODE::write(1); + GBS::SP_H_CST_ST::write(0x10); // 5_4d // set some default values + GBS::SP_H_CST_SP::write(0x80); // will be updated later + GBS::SP_H_PROTECT::write(1); // some modes require this (or invert SOG) + } + delay(300); + + if (rto->extClockGenDetected) { + // switch to ext clock + if (!rto->outModeHdBypass) { + if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // first store original in an option byte in 1_2D + GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // enable and switch input + Si.enable(0); + delayMicroseconds(800); + GBS::PLL648_CONTROL_01::write(0x75); + } + } + // sync clocks now + externalClockGenSyncInOutRate(); + } + + // note: this is all duplicated above. unify! + if (needPostAdjust) { + // base preset was "3" / no line doubling + // info: actually the position needs to be adjusted based on hor. freq or "h:" value (todo!) + GBS::IF_HB_ST2::write(0x08); // patches + GBS::IF_HB_SP2::write(0x68); // image + GBS::IF_HBIN_SP::write(0x50); // position + if (rto->presetID == 0x05) { + GBS::IF_HB_ST2::write(0x480); + GBS::IF_HB_SP2::write(0x8E); + } + + float sfr = getSourceFieldRate(0); + if (sfr >= 69.0) { + LOGN(F("source >= 70Hz")); + // increase vscale; vscale -= 57 seems to hit magic factor often + // 512 + 57 = 569 + 57 = 626 + 57 = 683 + GBS::VDS_VSCALE::write(GBS::VDS_VSCALE::read() - 57); + + } else { + // 50/60Hz, presumably + // adjust vposition + GBS::IF_VB_SP::write(8); + GBS::IF_VB_ST::write(6); + } + } + } else { + // was unstable, undo videoStandardInput change + rto->videoStandardInput = 14; + } + } + } + // check whether to revert back to full bypass + else if ((sourceLines > 535) && rto->videoStandardInput == 14) { + uint16_t firstDetectedSourceLines = sourceLines; + bool moveOn = 1; + for (int i = 0; i < 30; i++) { + sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); + // range needed for interlace + if ((sourceLines < firstDetectedSourceLines - 3) || (sourceLines > firstDetectedSourceLines + 3)) { + moveOn = 0; + break; + } + delay(10); + } + if (moveOn) { + LOGN(F(" RGB/HV upscale mode disabled")); + rto->videoStandardInput = 15; + rto->isValidForScalingRGBHV = false; + + activePresetLineCount = 0; + applyPresets(rto->videoStandardInput); // exception: apply preset here, not later in syncwatcher + + delay(300); + } + } + } // done preferScalingRgbhv + + if (!uopt->preferScalingRgbhv && rto->videoStandardInput == 14) { + // user toggled the web ui button / revert scaling rgbhv + rto->videoStandardInput = 15; + rto->isValidForScalingRGBHV = false; + applyPresets(rto->videoStandardInput); + delay(300); + } + + // stability check, for CSync and HV separately + uint16_t limitNoSync = 0; + uint8_t VSHSStatus = 0; + bool stable = 0; + if (rto->syncTypeCsync == true) { + if (GBS::STATUS_INT_SOG_BAD::read() == 1) { + // STATUS_INT_SOG_BAD = 0x0f bit 0, interrupt reg + resetModeDetect(); + stable = 0; + LOG(F("`")); + delay(10); + resetInterruptSogBadBit(); + } else { + stable = 1; + VSHSStatus = GBS::STATUS_00::read(); + // this status can get stuck (regularly does) + stable = ((VSHSStatus & 0x04) == 0x04); // RGBS > check h+v from 0_00 + } + limitNoSync = 200; // 100 + } else { + VSHSStatus = GBS::STATUS_16::read(); + // this status usually updates when a source goes off + stable = ((VSHSStatus & 0x0a) == 0x0a); // RGBHV > check h+v from 0_16 + limitNoSync = 300; + } + + if (!stable) { + LEDOFF; + RGBHVNoSyncCounter++; + rto->continousStableCounter = 0; + if (RGBHVNoSyncCounter % 20 == 0) { + LOG(F("`")); + } + } else { + RGBHVNoSyncCounter = 0; + LEDON; + if (rto->continousStableCounter < 255) { + rto->continousStableCounter++; + if (rto->continousStableCounter == 6) { + updateSpDynamic(1); + } + } + } + + if (RGBHVNoSyncCounter > limitNoSync) { + RGBHVNoSyncCounter = 0; + setResetParameters(); + prepareSyncProcessor(); + resetSyncProcessor(); // todo: fix MD being stuck in last mode when sync disappears + // resetModeDetect(); + rto->noSyncCounter = 0; + // Serial.println("RGBHV limit no sync"); + } + + static unsigned long lastTimeSogAndPllRateCheck = millis(); + if ((millis() - lastTimeSogAndPllRateCheck) > 900) { + if (rto->videoStandardInput == 15) { + // start out by adjusting sync polarity, may reset sog unstable interrupt flag + updateHVSyncEdge(); + delay(100); + } + + static uint8_t runsWithSogBadStatus = 0; + static uint8_t oldHPLLState = 0; + if (rto->syncTypeCsync == false) { + if (GBS::STATUS_INT_SOG_BAD::read()) { // SOG source unstable indicator + runsWithSogBadStatus++; + // LOG(F("test: ")); LOGN(runsWithSogBadStatus); + if (runsWithSogBadStatus >= 4) { + LOGN(F("RGB/HV < > SOG")); + rto->syncTypeCsync = true; + rto->HPLLState = runsWithSogBadStatus = RGBHVNoSyncCounter = 0; + rto->noSyncCounter = 0x07fe; // will cause a return + } + } else { + runsWithSogBadStatus = 0; + } + } + + uint32_t currentPllRate = 0; + static uint32_t oldPllRate = 10; + + // how fast is the PLL running? needed to set charge pump and gain + // typical: currentPllRate: 1560, currentPllRate: 3999 max seen the pll reach: 5008 for 1280x1024@75 + if (GBS::STATUS_INT_SOG_BAD::read() == 0) { + currentPllRate = getPllRate(); + // Serial.println(currentPllRate); + if (currentPllRate > 100 && currentPllRate < 7500) { + if ((currentPllRate < (oldPllRate - 3)) || (currentPllRate > (oldPllRate + 3))) { + delay(40); + if (GBS::STATUS_INT_SOG_BAD::read() == 1) + delay(100); + currentPllRate = getPllRate(); // test again, guards against random spurs + // but don't force currentPllRate to = 0 if these inner checks fail, + // prevents csync <> hvsync changes + if ((currentPllRate < (oldPllRate - 3)) || (currentPllRate > (oldPllRate + 3))) { + oldPllRate = currentPllRate; // okay, it changed + } + } + } else { + currentPllRate = 0; + } + } + + resetInterruptSogBadBit(); + + // short activeChargePumpLevel = GBS::PLLAD_ICP::read(); + // short activeGainBoost = GBS::PLLAD_FS::read(); + // LOG(F(" rto->HPLLState: ")); LOGN(rto->HPLLState); + // LOG(F(" currentPllRate: ")); LOGN(currentPllRate); + // LOG(F(" CPL: ")); LOG(activeChargePumpLevel); + // LOG(F(" Gain: ")); LOG(activeGainBoost); + // LOG(F(" KS: ")); LOG(GBS::PLLAD_KS::read()); + + oldHPLLState = rto->HPLLState; // do this first, else it can miss events + if (currentPllRate != 0) { + if (currentPllRate < 1030) { + rto->HPLLState = 1; + } else if (currentPllRate < 2300) { + rto->HPLLState = 2; + } else if (currentPllRate < 3200) { + rto->HPLLState = 3; + } else if (currentPllRate < 3800) { + rto->HPLLState = 4; + } else { + rto->HPLLState = 5; + } + } + + if (rto->videoStandardInput == 15) { + if (oldHPLLState != rto->HPLLState) { + if (rto->HPLLState == 1) { + GBS::PLLAD_KS::write(2); // KS = 2 okay + GBS::PLLAD_FS::write(0); + GBS::PLLAD_ICP::write(6); + } else if (rto->HPLLState == 2) { + GBS::PLLAD_KS::write(1); + GBS::PLLAD_FS::write(0); + GBS::PLLAD_ICP::write(6); + } else if (rto->HPLLState == 3) { // KS = 1 okay + GBS::PLLAD_KS::write(1); + GBS::PLLAD_FS::write(1); + GBS::PLLAD_ICP::write(6); // would need 7 but this is risky + } else if (rto->HPLLState == 4) { + GBS::PLLAD_KS::write(0); // KS = 0 from here on + GBS::PLLAD_FS::write(0); + GBS::PLLAD_ICP::write(6); + } else if (rto->HPLLState == 5) { + GBS::PLLAD_KS::write(0); // KS = 0 + GBS::PLLAD_FS::write(1); + GBS::PLLAD_ICP::write(6); + } + + latchPLLAD(); + delay(2); + setOverSampleRatio(4, false); // false = do apply // will auto decrease to max possible factor + LOG(F("(H-PLL) rate: ")); + LOG(currentPllRate); + LOG(F(" state: ")); + LOGN(rto->HPLLState); + delay(100); + } + } else if (rto->videoStandardInput == 14) { + if (oldHPLLState != rto->HPLLState) { + LOG(F("(H-PLL) rate: ")); + LOG(currentPllRate); + LOG(F(" state (no change): ")); + LOGN(rto->HPLLState); + // need to manage HPLL state change somehow + + // FrameSync::reset(uopt->frameTimeLockMethod); + } + } + + if (rto->videoStandardInput == 14) { + // scanlines + if (uopt->wantScanlines) { + if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive) { + if (GBS::IF_LD_RAM_BYPS::read() == 0) { // line doubler on? + enableScanlines(); + } + } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + disableScanlines(); + } + } + } + + rto->clampPositionIsSet = false; // RGBHV should regularly check clamp position + lastTimeSogAndPllRateCheck = millis(); + } + } + + if (rto->noSyncCounter >= 0x07fe) { + // couldn't recover, source is lost + // restore initial conditions and move to input detect + GBS::DAC_RGBS_PWDNZ::write(0); // 0 = disable DAC + rto->noSyncCounter = 0; + LOGN(); + goLowPowerWithInputDetection(); // does not further nest, so it can be called here // sets reset parameters + } +} + +bool checkBoardPower() +{ + GBS::ADC_UNUSED_69::write(0x6a); // 0110 1010 + if (GBS::ADC_UNUSED_69::read() == 0x6a) { + GBS::ADC_UNUSED_69::write(0); + return 1; + } + + GBS::ADC_UNUSED_69::write(0); // attempt to clear + if (rto->boardHasPower == true) { + Serial.println(F("! power / i2c lost !")); + } + + return 0; + + // stopWire(); // sets pinmodes SDA, SCL to INPUT + // uint8_t SCL_SDA = 0; + // for (int i = 0; i < 2; i++) { + // SCL_SDA += digitalRead(SCL); + // SCL_SDA += digitalRead(SDA); + // } + + // if (SCL_SDA != 6) + //{ + // if (rto->boardHasPower == true) { + // Serial.println("! power / i2c lost !"); + // } + // // I2C stays off and pins are INPUT + // return 0; + // } + + // startWire(); + // return 1; +} + +void calibrateAdcOffset() +{ + GBS::PAD_BOUT_EN::write(0); // disable output to pin for test + GBS::PLL648_CONTROL_01::write(0xA5); // display clock to adc = 162mhz + GBS::ADC_INPUT_SEL::write(2); // 10 > R2/G2/B2 as input (not connected, so to isolate ADC) + GBS::DEC_MATRIX_BYPS::write(1); + GBS::DEC_TEST_ENABLE::write(1); + GBS::ADC_5_03::write(0x31); // bottom clamps, filter max (40mhz) + GBS::ADC_TEST_04::write(0x00); // disable bit 1 + GBS::SP_CS_CLP_ST::write(0x00); + GBS::SP_CS_CLP_SP::write(0x00); + GBS::SP_5_56::write(0x05); // SP_SOG_MODE needs to be 1 + GBS::SP_5_57::write(0x80); + GBS::ADC_5_00::write(0x02); + GBS::TEST_BUS_SEL::write(0x0b); // 0x2b + GBS::TEST_BUS_EN::write(1); + resetDigital(); + + uint16_t hitTargetCounter = 0; + uint16_t readout16 = 0; + uint8_t missTargetCounter = 0; + uint8_t readout = 0; + + GBS::ADC_RGCTRL::write(0x7F); + GBS::ADC_GGCTRL::write(0x7F); + GBS::ADC_BGCTRL::write(0x7F); + GBS::ADC_ROFCTRL::write(0x7F); + GBS::ADC_GOFCTRL::write(0x3D); // start + GBS::ADC_BOFCTRL::write(0x7F); + GBS::DEC_TEST_SEL::write(1); // 5_1f = 0x1c + + // unsigned long overallTimer = millis(); + unsigned long startTimer = 0; + for (uint8_t i = 0; i < 3; i++) { + missTargetCounter = 0; + hitTargetCounter = 0; + delay(20); + startTimer = millis(); + + // loop breaks either when the timer runs out, or hitTargetCounter reaches target + while ((millis() - startTimer) < 800) { + readout16 = GBS::TEST_BUS::read() & 0x7fff; + // Serial.println(readout16, HEX); + // readout16 is unsigned, always >= 0 + if (readout16 < 7) { + hitTargetCounter++; + missTargetCounter = 0; + } else if (missTargetCounter++ > 2) { + if (i == 0) { + GBS::ADC_GOFCTRL::write(GBS::ADC_GOFCTRL::read() + 1); // incr. offset + readout = GBS::ADC_GOFCTRL::read(); + Serial.print(" G: "); + } else if (i == 1) { + GBS::ADC_ROFCTRL::write(GBS::ADC_ROFCTRL::read() + 1); + readout = GBS::ADC_ROFCTRL::read(); + Serial.print(" R: "); + } else if (i == 2) { + GBS::ADC_BOFCTRL::write(GBS::ADC_BOFCTRL::read() + 1); + readout = GBS::ADC_BOFCTRL::read(); + Serial.print(" B: "); + } + LOGF("0x%04X", readout); + + if (readout >= 0x52) { + // some kind of failure + break; + } + + delay(10); + hitTargetCounter = 0; + missTargetCounter = 0; + startTimer = millis(); // extend timer + } + if (hitTargetCounter > 1500) { + break; + } + } + if (i == 0) { + // G done, prep R + adco->g_off = GBS::ADC_GOFCTRL::read(); + GBS::ADC_GOFCTRL::write(0x7F); + GBS::ADC_ROFCTRL::write(0x3D); + GBS::DEC_TEST_SEL::write(2); // 5_1f = 0x2c + } + if (i == 1) { + adco->r_off = GBS::ADC_ROFCTRL::read(); + GBS::ADC_ROFCTRL::write(0x7F); + GBS::ADC_BOFCTRL::write(0x3D); + GBS::DEC_TEST_SEL::write(3); // 5_1f = 0x3c + } + if (i == 2) { + adco->b_off = GBS::ADC_BOFCTRL::read(); + } + Serial.println(""); + } + + if (readout >= 0x52) { + // there was a problem; revert + adco->r_off = adco->g_off = adco->b_off = 0x40; + } + + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + + // Serial.println(millis() - overallTimer); +} + +void loadDefaultUserOptions() +{ + uopt->presetPreference = Output960P; // #1 + uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! + uopt->presetSlot = 'A'; // + uopt->frameTimeLockMethod = 0; // compatibility with more displays + uopt->enableAutoGain = 0; + uopt->wantScanlines = 0; + uopt->wantOutputComponent = 0; + uopt->deintMode = 0; + uopt->wantVdsLineFilter = 0; + uopt->wantPeaking = 1; + uopt->preferScalingRgbhv = 1; + uopt->wantTap6 = 1; + uopt->PalForce60 = 0; + uopt->matchPresetSource = 1; // #14 + uopt->wantStepResponse = 1; // #15 + uopt->wantFullHeight = 1; // #16 + uopt->enableCalibrationADC = 1; // #17 + uopt->scanlineStrength = 0x30; // #18 + uopt->disableExternalClockGenerator = 0; // #19 +} + +// RF_PRE_INIT() { +// system_phy_set_powerup_option(3); // full RFCAL at boot +// } + +// void preinit() { +// //system_phy_set_powerup_option(3); // 0 = default, use init byte; 3 = full calibr. each boot, extra 200ms +// system_phy_set_powerup_option(0); +// } + +#if !USE_NEW_OLED_MENU +void ICACHE_RAM_ATTR isrRotaryEncoder() +{ + static unsigned long lastInterruptTime = 0; + unsigned long interruptTime = millis(); + + if (interruptTime - lastInterruptTime > 120) { + if (!digitalRead(pin_data)) { + oled_encoder_pos++; + oled_main_pointer += 15; + oled_sub_pointer += 15; + oled_pointer_count++; + // down = true; + // up = false; + } else { + oled_encoder_pos--; + oled_main_pointer -= 15; + oled_sub_pointer -= 15; + oled_pointer_count--; + // down = false; + // up = true; + } + } + lastInterruptTime = interruptTime; +} +#endif + +#if USE_NEW_OLED_MENU +void ICACHE_RAM_ATTR isrRotaryEncoderRotateForNewMenu() +{ + unsigned long interruptTime = millis(); + static unsigned long lastInterruptTime = 0; + static unsigned long lastNavUpdateTime = 0; + static OLEDMenuNav lastNav; + OLEDMenuNav newNav; + if (interruptTime - lastInterruptTime > 150) { + if (!digitalRead(pin_data)) { + newNav = REVERSE_ROTARY_ENCODER_FOR_OLED_MENU ? OLEDMenuNav::DOWN : OLEDMenuNav::UP; + } else { + newNav = REVERSE_ROTARY_ENCODER_FOR_OLED_MENU ? OLEDMenuNav::UP : OLEDMenuNav::DOWN; + } + if (newNav != lastNav && (interruptTime - lastNavUpdateTime < 120)) { + // ignore rapid changes to filter out mis-reads. besides, you are not supposed to rotate the encoder this fast anyway + oledNav = lastNav = OLEDMenuNav::IDLE; + } else { + lastNav = oledNav = newNav; + ++rotaryIsrID; + lastNavUpdateTime = interruptTime; + } + lastInterruptTime = interruptTime; + } +} +void ICACHE_RAM_ATTR isrRotaryEncoderPushForNewMenu() +{ + static unsigned long lastInterruptTime = 0; + unsigned long interruptTime = millis(); + if (interruptTime - lastInterruptTime > 500) { + oledNav = OLEDMenuNav::ENTER; + ++rotaryIsrID; + } + lastInterruptTime = interruptTime; +} +#endif + +void setup() +{ + rto->videoStandardInput = 0; + display.init(); // inits OLED on I2C bus + display.flipScreenVertically(); // orientation fix for OLED + + pinMode(pin_clk, INPUT_PULLUP); + pinMode(pin_data, INPUT_PULLUP); + pinMode(pin_switch, INPUT_PULLUP); + +#if USE_NEW_OLED_MENU + attachInterrupt(digitalPinToInterrupt(pin_clk), isrRotaryEncoderRotateForNewMenu, FALLING); + attachInterrupt(digitalPinToInterrupt(pin_switch), isrRotaryEncoderPushForNewMenu, FALLING); + initOLEDMenu(); + initOSD(); +#else + // ISR TO PIN + attachInterrupt(digitalPinToInterrupt(pin_clk), isrRotaryEncoder, FALLING); +#endif + + rto->webServerEnabled = true; + rto->webServerStarted = false; // make sure this is set + + Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! + Serial.setTimeout(10); + + startWire(); + // run some dummy commands to init I2C to GBS and cached segments + GBS::SP_SOG_MODE::read(); + writeOneByte(0xF0, 0); + writeOneByte(0x00, 0); + GBS::STATUS_00::read(); + + if (rto->webServerEnabled) { + rto->allowUpdatesOTA = false; // need to initialize for wifiLoop() + WiFi.setSleepMode(WIFI_NONE_SLEEP); // low latency responses, less chance for missing packets + WiFi.setOutputPower(16.0f); // float: min 0.0f, max 20.5f + startWebserver(); + rto->webServerStarted = true; + } else { + wifiDisable(); + } +#ifdef HAVE_PINGER_LIBRARY + pingLastTime = millis(); +#endif + + LOGN(F("\nstartup")); + + loadDefaultUserOptions(); + // globalDelay = 0; + + rto->allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface + rto->enableDebugPings = false; + rto->autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing + rto->syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) + rto->forceRetime = false; + rto->syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation + rto->phaseADC = 16; + rto->phaseSP = 16; + rto->failRetryAttempts = 0; + rto->presetID = 0; + rto->isCustomPreset = false; + rto->HPLLState = 0; + rto->motionAdaptiveDeinterlaceActive = false; + rto->deinterlaceAutoEnabled = true; + rto->scanlinesEnabled = false; + rto->boardHasPower = true; + rto->presetIsPalForce60 = false; + rto->syncTypeCsync = false; + rto->isValidForScalingRGBHV = false; + rto->medResLineCount = 0x33; // 51*8=408 + rto->osr = 0; + rto->useHdmiSyncFix = 0; + rto->notRecognizedCounter = 0; + + // more run time variables + rto->inputIsYpBpR = false; + rto->videoStandardInput = 0; + rto->outModeHdBypass = false; + rto->videoIsFrozen = false; + if (!rto->webServerEnabled) + rto->webServerStarted = false; + rto->printInfos = false; + rto->sourceDisconnected = true; + rto->isInLowPowerMode = false; + rto->applyPresetDoneStage = 0; + rto->presetVlineShift = 0; + rto->clampPositionIsSet = 0; + rto->coastPositionIsSet = 0; + rto->continousStableCounter = 0; + rto->currentLevelSOG = 5; + rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run + + adco->r_gain = 0; + adco->g_gain = 0; + adco->b_gain = 0; + adco->r_off = 0; + adco->g_off = 0; + adco->b_off = 0; + + serialCommand = '@'; // ASCII @ = 0 + userCommand = '@'; + + pinMode(DEBUG_IN_PIN, INPUT); + pinMode(LED_BUILTIN, OUTPUT); + LEDON; // enable the LED, lets users know the board is starting up + + // Serial.setDebugOutput(true); // if you want simple wifi debug info + + // delay 1 of 2 + unsigned long initDelay = millis(); + // upped from < 500 to < 1500, allows more time for wifi and GBS startup + while (millis() - initDelay < 1500) { + display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); + display.display(); + wifiLoop(0); + delay(1); + } + display.clear(); + // if i2c established and chip running, issue software reset now + GBS::RESET_CONTROL_0x46::write(0); + GBS::RESET_CONTROL_0x47::write(0); + GBS::PLLAD_VCORST::write(1); + GBS::PLLAD_PDZ::write(0); // AD PLL off + + // file system (web page, custom presets, ect) + if (!LittleFS.begin()) { + LOGN(F("FS mount failed! ((1M FS) selected?)")); + } else { + // load user preferences file + File f = LittleFS.open("/preferencesv2.txt", "r"); + if (!f) { + LOGN(F("no preferences file yet, create new")); + loadDefaultUserOptions(); + saveUserPrefs(); // if this fails, there must be a spiffs problem + } else { + // on a fresh / spiffs not formatted yet MCU: userprefs.txt open ok //result = 207 + uopt->presetPreference = (PresetPreference)(f.read() - '0'); // #1 + if (uopt->presetPreference > 10) + uopt->presetPreference = Output960P; // fresh spiffs ? + + uopt->enableFrameTimeLock = (uint8_t)(f.read() - '0'); + if (uopt->enableFrameTimeLock > 1) + uopt->enableFrameTimeLock = 0; + + uopt->presetSlot = lowByte(f.read()); + + uopt->frameTimeLockMethod = (uint8_t)(f.read() - '0'); + if (uopt->frameTimeLockMethod > 1) + uopt->frameTimeLockMethod = 0; + + uopt->enableAutoGain = (uint8_t)(f.read() - '0'); + if (uopt->enableAutoGain > 1) + uopt->enableAutoGain = 0; + + uopt->wantScanlines = (uint8_t)(f.read() - '0'); + if (uopt->wantScanlines > 1) + uopt->wantScanlines = 0; + + uopt->wantOutputComponent = (uint8_t)(f.read() - '0'); + if (uopt->wantOutputComponent > 1) + uopt->wantOutputComponent = 0; + + uopt->deintMode = (uint8_t)(f.read() - '0'); + if (uopt->deintMode > 2) + uopt->deintMode = 0; + + uopt->wantVdsLineFilter = (uint8_t)(f.read() - '0'); + if (uopt->wantVdsLineFilter > 1) + uopt->wantVdsLineFilter = 0; + + uopt->wantPeaking = (uint8_t)(f.read() - '0'); + if (uopt->wantPeaking > 1) + uopt->wantPeaking = 1; + + uopt->preferScalingRgbhv = (uint8_t)(f.read() - '0'); + if (uopt->preferScalingRgbhv > 1) + uopt->preferScalingRgbhv = 1; + + uopt->wantTap6 = (uint8_t)(f.read() - '0'); + if (uopt->wantTap6 > 1) + uopt->wantTap6 = 1; + + uopt->PalForce60 = (uint8_t)(f.read() - '0'); + if (uopt->PalForce60 > 1) + uopt->PalForce60 = 0; + + uopt->matchPresetSource = (uint8_t)(f.read() - '0'); // #14 + if (uopt->matchPresetSource > 1) + uopt->matchPresetSource = 1; + + uopt->wantStepResponse = (uint8_t)(f.read() - '0'); // #15 + if (uopt->wantStepResponse > 1) + uopt->wantStepResponse = 1; + + uopt->wantFullHeight = (uint8_t)(f.read() - '0'); // #16 + if (uopt->wantFullHeight > 1) + uopt->wantFullHeight = 1; + + uopt->enableCalibrationADC = (uint8_t)(f.read() - '0'); // #17 + if (uopt->enableCalibrationADC > 1) + uopt->enableCalibrationADC = 1; + + uopt->scanlineStrength = (uint8_t)(f.read() - '0'); // #18 + if (uopt->scanlineStrength > 0x60) + uopt->enableCalibrationADC = 0x30; + + uopt->disableExternalClockGenerator = (uint8_t)(f.read() - '0'); // #19 + if (uopt->disableExternalClockGenerator > 1) + uopt->disableExternalClockGenerator = 0; + + f.close(); + } + } + + GBS::PAD_CKIN_ENZ::write(1); // disable to prevent startup spike damage + externalClockGenDetectAndInitialize(); + // library may change i2c clock or pins, so restart + startWire(); + GBS::STATUS_00::read(); + GBS::STATUS_00::read(); + GBS::STATUS_00::read(); + + // delay 2 of 2 + initDelay = millis(); + while (millis() - initDelay < 1000) { + wifiLoop(0); + delay(1); + } + + if (WiFi.status() == WL_CONNECTED) { + // nothing + } else if (WiFi.SSID().length() == 0) { + LOGN(FPSTR(ap_info_string)); + } else { + LOGN(F("(WiFi): still connecting..")); + WiFi.reconnect(); // only valid for station class (ok here) + } + + // dummy commands + GBS::STATUS_00::read(); + GBS::STATUS_00::read(); + GBS::STATUS_00::read(); + + bool powerOrWireIssue = 0; + if (!checkBoardPower()) { + stopWire(); // sets pinmodes SDA, SCL to INPUT + for (int i = 0; i < 40; i++) { + // I2C SDA probably stuck, attempt recovery (max attempts in tests was around 10) + startWire(); + GBS::STATUS_00::read(); + digitalWrite(SCL, 0); + delayMicroseconds(12); + stopWire(); + if (digitalRead(SDA) == 1) { + break; + } // unstuck + if ((i % 7) == 0) { + delay(1); + } + } + + // restart and dummy + startWire(); + delay(1); + GBS::STATUS_00::read(); + delay(1); + + if (!checkBoardPower()) { + stopWire(); + powerOrWireIssue = 1; // fail + rto->boardHasPower = false; + rto->syncWatcherEnabled = false; + } else { // recover success + rto->syncWatcherEnabled = true; + rto->boardHasPower = true; + LOGN(F("recovered")); + } + } + + if (powerOrWireIssue == 0) { + // second init, in cases where i2c got stuck earlier but has recovered + // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running + if (!rto->extClockGenDetected) { + externalClockGenDetectAndInitialize(); + } + if (rto->extClockGenDetected == 1) { + Serial.println(F("ext clockgen detected")); + } else { + Serial.println(F("no ext clockgen")); + } + + zeroAll(); + setResetParameters(); + prepareSyncProcessor(); + + uint8_t productId = GBS::CHIP_ID_PRODUCT::read(); + uint8_t revisionId = GBS::CHIP_ID_REVISION::read(); + LOG(F("Chip ID: ")); + LOGF("0x%04X", productId); + LOG(F(" ")); + LOGF("0x%02X", revisionId); + + if (uopt->enableCalibrationADC) { + // enabled by default + calibrateAdcOffset(); + } + setResetParameters(); + + delay(4); // help wifi (presets are unloaded now) + wifiLoop(1); + delay(4); + + // startup reliability test routine + /*rto->videoStandardInput = 1; + writeProgramArrayNew(ntsc_240p, 0); + doPostPresetLoadSteps(); + int i = 100000; + while (i-- > 0) loop(); + ESP.restart();*/ + + // rto->syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here + // inputAndSyncDetect(); + // if (rto->syncWatcherEnabled == true) { + // rto->isInLowPowerMode = true; // just for initial detection; simplifies code later + // for (uint8_t i = 0; i < 3; i++) { + // if (inputAndSyncDetect()) { + // break; + // } + // } + // rto->isInLowPowerMode = false; + // } + } else { + LOGN(F("Please check board power and cabling or restart!")); + } + + LEDOFF; // LED behaviour: only light LED on active sync + + // some debug tools leave garbage in the serial rx buffer + discardSerialRxData(); +} + +#if HAVE_BUTTONS +#define INPUT_SHIFT 0 +#define DOWN_SHIFT 1 +#define UP_SHIFT 2 +#define MENU_SHIFT 3 +#define BACK_SHIFT 4 + +static const uint8_t historySize = 32; +static const uint16_t buttonPollInterval = 100; // microseconds +static uint8_t buttonHistory[historySize]; +static uint8_t buttonIndex; +static uint8_t buttonState; +static uint8_t buttonChanged; + +uint8_t readButtons(void) +{ + return ~((digitalRead(pin_data) << INPUT_SHIFT) | + (digitalRead(pin_clk) << DOWN_SHIFT) | + (digitalRead(pin_data) << UP_SHIFT) | + (digitalRead(pin_switch) << MENU_SHIFT)); +} + +void debounceButtons(void) +{ + buttonHistory[buttonIndex++ % historySize] = readButtons(); + buttonChanged = 0xFF; + for (uint8_t i = 0; i < historySize; ++i) + buttonChanged &= buttonState ^ buttonHistory[i]; + buttonState ^= buttonChanged; +} + +bool buttonDown(uint8_t pos) +{ + return (buttonState & (1 << pos)) && (buttonChanged & (1 << pos)); +} + +void handleButtons(void) +{ +#if USE_NEW_OLED_MENU + OLEDMenuNav btn = OLEDMenuNav::IDLE; + debounceButtons(); + if (buttonDown(MENU_SHIFT)) + btn = OLEDMenuNav::ENTER; + if (buttonDown(DOWN_SHIFT)) + btn = OLEDMenuNav::UP; + if (buttonDown(UP_SHIFT)) + btn = OLEDMenuNav::DOWN; + oledMenu.tick(btn); +#else + debounceButtons(); + if (buttonDown(INPUT_SHIFT)) + Menu::run(MenuInput::BACK); + if (buttonDown(DOWN_SHIFT)) + Menu::run(MenuInput::DOWN); + // if (buttonDown(UP_SHIFT)) + // Menu::run(MenuInput::UP); + if (buttonDown(MENU_SHIFT)) + Menu::run(MenuInput::FORWARD); +#endif +} +#endif + +void updateWebSocketData() +{ + if (rto->webServerEnabled && rto->webServerStarted) { + if (webSocket.connectedClients() > 0) { + + constexpr size_t MESSAGE_LEN = 6; + char toSend[MESSAGE_LEN] = {0}; + toSend[0] = '#'; // makeshift ping in slot 0 + + if (rto->isCustomPreset) { + toSend[1] = '9'; + } else + switch (rto->presetID) { + case 0x01: + case 0x11: + toSend[1] = '1'; + break; + case 0x02: + case 0x12: + toSend[1] = '2'; + break; + case 0x03: + case 0x13: + toSend[1] = '3'; + break; + case 0x04: + case 0x14: + toSend[1] = '4'; + break; + case 0x05: + case 0x15: + toSend[1] = '5'; + break; + case 0x06: + case 0x16: + toSend[1] = '6'; + break; + case PresetHdBypass: // bypass 1 + case PresetBypassRGBHV: // bypass 2 + toSend[1] = '8'; + break; + default: + toSend[1] = '0'; + break; + } + + toSend[2] = (char)uopt->presetSlot; + + // '@' = 0x40, used for "byte is present" detection; 0x80 not in ascii table + toSend[3] = '@'; + toSend[4] = '@'; + toSend[5] = '@'; + + if (uopt->enableAutoGain) { + toSend[3] |= (1 << 0); + } + if (uopt->wantScanlines) { + toSend[3] |= (1 << 1); + } + if (uopt->wantVdsLineFilter) { + toSend[3] |= (1 << 2); + } + if (uopt->wantPeaking) { + toSend[3] |= (1 << 3); + } + if (uopt->PalForce60) { + toSend[3] |= (1 << 4); + } + if (uopt->wantOutputComponent) { + toSend[3] |= (1 << 5); + } + + if (uopt->matchPresetSource) { + toSend[4] |= (1 << 0); + } + if (uopt->enableFrameTimeLock) { + toSend[4] |= (1 << 1); + } + if (uopt->deintMode) { + toSend[4] |= (1 << 2); + } + if (uopt->wantTap6) { + toSend[4] |= (1 << 3); + } + if (uopt->wantStepResponse) { + toSend[4] |= (1 << 4); + } + if (uopt->wantFullHeight) { + toSend[4] |= (1 << 5); + } + + if (uopt->enableCalibrationADC) { + toSend[5] |= (1 << 0); + } + if (uopt->preferScalingRgbhv) { + toSend[5] |= (1 << 1); + } + if (uopt->disableExternalClockGenerator) { + toSend[5] |= (1 << 2); + } + + // send ping and stats + if (ESP.getFreeHeap() > 14000) { + webSocket.broadcastTXT(toSend, MESSAGE_LEN); + } else { + webSocket.disconnect(); + } + } + } +} + + +void loop() +{ + static uint8_t readout = 0; + static uint8_t segmentCurrent = 255; + static uint8_t registerCurrent = 255; + static uint8_t inputToogleBit = 0; + static uint8_t inputStage = 0; + static unsigned long lastTimeSyncWatcher = millis(); + static unsigned long lastTimeSourceCheck = 500; // 500 to start right away (after setup it will be 2790ms when we get here) + static unsigned long lastTimeInterruptClear = millis(); + +#if HAVE_BUTTONS + static unsigned long lastButton = micros(); + if (micros() - lastButton > buttonPollInterval) { + lastButton = micros(); + handleButtons(); + } +#endif + +#if USE_NEW_OLED_MENU + uint8_t oldIsrID = rotaryIsrID; + // make sure no rotary encoder isr happened while menu was updating. + // skipping this check will make the rotary encoder not responsive randomly. + // (oledNav change will be lost if isr happened during menu updating) + oledMenu.tick(oledNav); + if (oldIsrID == rotaryIsrID) { + oledNav = OLEDMenuNav::IDLE; + } +#else + settingsMenuOLED(); + if (oled_encoder_pos != oled_lastCount) { + oled_lastCount = oled_encoder_pos; + } +#endif + + wifiLoop(0); // WiFi + OTA + WS + MDNS, checks for server enabled + started + + // is there a command from Terminal or web ui? + // Serial takes precedence + if (Serial.available()) { + serialCommand = Serial.read(); + } else if (inputStage > 0) { + // multistage with no more data + LOGN(F(" abort")); + discardSerialRxData(); + serialCommand = ' '; + } + if (serialCommand != '@') { + LOGF("%s command %c at settings source %d, custom slot %d, status %x\n", + "serial", serialCommand, uopt->presetPreference, uopt->presetSlot, rto->presetID); + // multistage with bad characters? + if (inputStage > 0) { + // need 's', 't' or 'g' + if (serialCommand != 's' && serialCommand != 't' && serialCommand != 'g') { + discardSerialRxData(); + LOGN(F(" abort")); + serialCommand = ' '; + } + } + + switch (serialCommand) { + case ' ': + // skip spaces + inputStage = segmentCurrent = registerCurrent = 0; // and reset these + break; + case 'd': { + // don't store scanlines + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { + disableScanlines(); + } + // pal forced 60hz: no need to revert here. let the voffset function handle it + + if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { + FrameSync::reset(uopt->frameTimeLockMethod); + } + // dump + for (int segment = 0; segment <= 5; segment++) { + dumpRegisters(segment); + } + LOGN(F("};")); + } break; + case '+': + LOGN(F("hor. +")); + shiftHorizontalRight(); + // shiftHorizontalRightIF(4); + break; + case '-': + LOGN(F("hor. -")); + shiftHorizontalLeft(); + // shiftHorizontalLeftIF(4); + break; + case '*': + shiftVerticalUpIF(); + break; + case '/': + shiftVerticalDownIF(); + break; + case 'z': + LOGN(F("scale+")); + scaleHorizontal(2, true); + break; + case 'h': + LOGN(F("scale-")); + scaleHorizontal(2, false); + break; + case 'q': + resetDigital(); + delay(2); + ResetSDRAM(); + delay(2); + togglePhaseAdjustUnits(); + // enableVDS(); + break; + case 'D': + LOG(F("debug view: ")); + if (GBS::ADC_UNUSED_62::read() == 0x00) { // "remembers" debug view + // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store + GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 + GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup + GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); + GBS::ADC_UNUSED_62::write(1); // remember to remove on restore + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); + GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); + if (!rto->inputIsYpBpR) { + // RGB input that has HD_DYN bypassed, use it now + GBS::HD_DYN_BYPS::write(0); + GBS::HD_U_OFFSET::write(GBS::HD_U_OFFSET::read() + 0x24); + GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); + } + // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly + LOGN(F("on")); + } else { + // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 + if (rto->presetID == 0x05) { + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 + } else { + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 + } + GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore + GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); + if (!rto->inputIsYpBpR) { + // RGB input, HD_DYN_BYPS again + GBS::HD_DYN_BYPS::write(1); + GBS::HD_U_OFFSET::write(0); // probably just 0 by default + GBS::HD_V_OFFSET::write(0); // probably just 0 by default + } + // GBS::IF_IN_DREG_BYPS::write(0); + GBS::ADC_UNUSED_60::write(0); // .. and clear + GBS::ADC_UNUSED_61::write(0); + GBS::ADC_UNUSED_62::write(0); + LOGN(F("off")); + } + serialCommand = '@'; + break; + case 'C': + LOGN(F("PLL: ICLK")); + // display clock in last test best at 0x85 + GBS::PLL648_CONTROL_01::write(0x85); + GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) + latchPLLAD(); + // GBS::VDS_HSCALE::write(512); + rto->syncLockFailIgnore = 16; + FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock + rto->forceRetime = true; + // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock + // applyBestHTotal(FrameSync::init()); // twice + // GBS::VDS_FLOCK_EN::write(1); //risky + delay(200); + break; + case 'Y': + writeProgramArrayNew(ntsc_1280x720, false); + doPostPresetLoadSteps(); + break; + case 'y': + writeProgramArrayNew(pal_1280x720, false); + doPostPresetLoadSteps(); + break; + case 'P': + LOG(F("auto deinterlace: ")); + rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; + if (rto->deinterlaceAutoEnabled) { + LOGN(F("on")); + } else { + LOGN(F("off")); + } + break; + case 'p': + if (!rto->motionAdaptiveDeinterlaceActive) { + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled + disableScanlines(); + } + enableMotionAdaptDeinterlace(); + } else { + disableMotionAdaptDeinterlace(); + } + break; + case 'k': + bypassModeSwitch_RGBHV(); + break; + case 'K': + setOutModeHdBypass(false); + uopt->presetPreference = OutputBypass; + saveUserPrefs(); + break; + case 'T': + LOG(F("auto gain ")); + if (uopt->enableAutoGain == 0) { + uopt->enableAutoGain = 1; + setAdcGain(AUTO_GAIN_INIT); + GBS::DEC_TEST_ENABLE::write(1); + LOGN(F("on")); + } else { + uopt->enableAutoGain = 0; + GBS::DEC_TEST_ENABLE::write(0); + LOGN(F("off")); + } + saveUserPrefs(); + break; + case 'e': + writeProgramArrayNew(ntsc_240p, false); + doPostPresetLoadSteps(); + break; + case 'r': + writeProgramArrayNew(pal_240p, false); + doPostPresetLoadSteps(); + break; + case '.': { + if (!rto->outModeHdBypass) { + // bestHtotal recalc + rto->autoBestHtotalEnabled = true; + rto->syncLockFailIgnore = 16; + rto->forceRetime = true; + FrameSync::reset(uopt->frameTimeLockMethod); + + if (!rto->syncWatcherEnabled) { + bool autoBestHtotalSuccess = 0; + delay(30); + autoBestHtotalSuccess = runAutoBestHTotal(); + if (!autoBestHtotalSuccess) { + LOGN(F("(unchanged)")); + } + } + } + } break; + case '!': + // fastGetBestHtotal(); + // readEeprom(); + Serial.print(F("sfr: ")); + Serial.println(getSourceFieldRate(1)); + Serial.print(F("pll: ")); + Serial.println(getPllRate()); + break; + case '$': { + // EEPROM write protect pin (7, next to Vcc) is under original MCU control + // MCU drags to Vcc to write, EEPROM drags to Gnd normally + // This routine only works with that "WP" pin disconnected + // 0x17 = input selector? // 0x18 = input selector related? + // 0x54 = coast start 0x55 = coast end + uint16_t writeAddr = 0x54; + const uint8_t eepromAddr = 0x50; + for (; writeAddr < 0x56; writeAddr++) { + Wire.beginTransmission(eepromAddr); + Wire.write(writeAddr >> 8); // high addr byte, 4 bits + + Wire.write((uint8_t)writeAddr); // mlow addr byte, 8 bits = 12 bits (0xfff max) + Wire.write(0x10); // coast end value ? + Wire.endTransmission(); + delay(5); + } + + // Wire.beginTransmission(eepromAddr); + // Wire.write((uint8_t)0); Wire.write((uint8_t)0); + // Wire.write(0xff); // force eeprom clear probably + // Wire.endTransmission(); + // delay(5); + + Serial.println("done"); + } break; + case 'j': + // resetPLL(); + latchPLLAD(); + break; + case 'J': + resetPLLAD(); + break; + case 'v': + rto->phaseSP += 1; + rto->phaseSP &= 0x1f; + LOGF("SP: %d\n", rto->phaseSP); + setAndLatchPhaseSP(); + // setAndLatchPhaseADC(); + break; + case 'b': + advancePhase(); + latchPLLAD(); + LOG(F("ADC: ")); + LOGN(rto->phaseADC); + break; + case '#': + rto->videoStandardInput = 13; + applyPresets(13); + // Serial.println(getStatus00IfHsVsStable()); + // globalDelay++; + // LOGN(globalDelay); + break; + case 'n': { + uint16_t pll_divider = GBS::PLLAD_MD::read(); + pll_divider += 1; + GBS::PLLAD_MD::write(pll_divider); + GBS::IF_HSYNC_RST::write((pll_divider / 2)); + GBS::IF_LINE_SP::write(((pll_divider / 2) + 1) + 0x40); + LOG(F("PLL div: ")); + LOGF("0x%04X", pll_divider); + LOG(F(" ")); + LOGN(pll_divider); + // set IF before latching + // setIfHblankParameters(); + latchPLLAD(); + delay(1); + // applyBestHTotal(GBS::VDS_HSYNC_RST::read()); + updateClampPosition(); + updateCoastPosition(0); + } break; + case 'N': { + // if (GBS::RFF_ENABLE::read()) { + // disableMotionAdaptDeinterlace(); + // } + // else { + // enableMotionAdaptDeinterlace(); + // } + + // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); + + if (rto->scanlinesEnabled) { + rto->scanlinesEnabled = false; + disableScanlines(); + } else { + rto->scanlinesEnabled = true; + enableScanlines(); + } + } break; + case 'a': + LOG(F("HTotal++: ")); + LOGN(GBS::VDS_HSYNC_RST::read() + 1); + if (GBS::VDS_HSYNC_RST::read() < 4095) { + if (uopt->enableFrameTimeLock) { + // syncLastCorrection != 0 check is included + FrameSync::reset(uopt->frameTimeLockMethod); + } + rto->forceRetime = 1; + applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); + } + break; + case 'A': + LOG(F("HTotal--: ")); + LOGN(GBS::VDS_HSYNC_RST::read() - 1); + if (GBS::VDS_HSYNC_RST::read() > 0) { + if (uopt->enableFrameTimeLock) { + // syncLastCorrection != 0 check is included + FrameSync::reset(uopt->frameTimeLockMethod); + } + rto->forceRetime = 1; + applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); + } + break; + case 'M': { + } break; + case 'm': + LOG(F("syncwatcher ")); + if (rto->syncWatcherEnabled == true) { + rto->syncWatcherEnabled = false; + if (rto->videoIsFrozen) { + unfreezeVideo(); + } + LOGN(F("off")); + } else { + rto->syncWatcherEnabled = true; + LOGN(F("on")); + } + break; + case ',': + printVideoTimings(); + break; + case 'i': + rto->printInfos = !rto->printInfos; + break; + case 'c': + LOGN(F("OTA Updates on")); + initUpdateOTA(); + rto->allowUpdatesOTA = true; + break; + case 'G': + LOG(F("Debug Pings ")); + if (!rto->enableDebugPings) { + LOGN(F("on")); + rto->enableDebugPings = 1; + } else { + LOGN(F("off")); + rto->enableDebugPings = 0; + } + break; + case 'u': + ResetSDRAM(); + break; + case 'f': + LOG(F("peaking ")); + if (uopt->wantPeaking == 0) { + uopt->wantPeaking = 1; + GBS::VDS_PK_Y_H_BYPS::write(0); + LOGN(F("on")); + } else { + uopt->wantPeaking = 0; + GBS::VDS_PK_Y_H_BYPS::write(1); + LOGN(F("off")); + } + saveUserPrefs(); + break; + case 'F': + LOG(F("ADC filter ")); + if (GBS::ADC_FLTR::read() > 0) { + GBS::ADC_FLTR::write(0); + LOGN(F("off")); + } else { + GBS::ADC_FLTR::write(3); + LOGN(F("on")); + } + break; + case 'L': { + // Component / VGA Output + uopt->wantOutputComponent = !uopt->wantOutputComponent; + OutputComponentOrVGA(); + saveUserPrefs(); + // apply 1280x720 preset now, otherwise a reboot would be required + uint8_t videoMode = getVideoMode(); + if (videoMode == 0) + videoMode = rto->videoStandardInput; + PresetPreference backup = uopt->presetPreference; + uopt->presetPreference = Output720P; + rto->videoStandardInput = 0; // force hard reset + applyPresets(videoMode); + uopt->presetPreference = backup; + } break; + case 'l': + LOGN(F("resetSyncProcessor")); + // freezeVideo(); + resetSyncProcessor(); + // delay(10); + // unfreezeVideo(); + break; + case 'Z': { + uopt->matchPresetSource = !uopt->matchPresetSource; + saveUserPrefs(); + uint8_t vidMode = getVideoMode(); + if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { + applyPresets(vidMode); + } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { + applyPresets(vidMode); + } + } break; + case 'W': + uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + break; + case 'E': + writeProgramArrayNew(ntsc_1280x1024, false); + doPostPresetLoadSteps(); + break; + case 'R': + writeProgramArrayNew(pal_1280x1024, false); + doPostPresetLoadSteps(); + break; + case '0': + moveHS(4, true); + break; + case '1': + moveHS(4, false); + break; + case '2': + writeProgramArrayNew(pal_768x576, false); // ModeLine "720x576@50" 27 720 732 795 864 576 581 586 625 -hsync -vsync + doPostPresetLoadSteps(); + break; + case '3': + // + break; + case '4': { + // scale vertical + + if (GBS::VDS_VSCALE::read() <= 256) { + LOGN(F("limit")); + break; + } + scaleVertical(2, true); + // actually requires full vertical mask + position offset calculation + } break; + case '5': { + // scale vertical - + if (GBS::VDS_VSCALE::read() == 1023) { + LOGN(F("limit")); + break; + } + scaleVertical(2, false); + // actually requires full vertical mask + position offset calculation + } break; + case '6': + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { + if (GBS::IF_HBIN_SP::read() >= 10) { // IF_HBIN_SP: min 2 + GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() - 8); // canvas move right + if ((GBS::IF_HSYNC_RST::read() - 4) > ((GBS::PLLAD_MD::read() >> 1) + 5)) { + GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() - 4); // shrink 1_0e + GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 4); // and 1_22 to go with it + } + } else { + LOGN(F("limit")); + } + } else if (!rto->outModeHdBypass) { + if (GBS::IF_HB_SP2::read() >= 4) + GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a + else + GBS::IF_HB_SP2::write(GBS::IF_HSYNC_RST::read() - 0x30); + if (GBS::IF_HB_ST2::read() >= 4) + GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() - 4); // 1_18 + else + GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); + LOG(F("IF_HB_ST2: ")); + LOGF("0x%04X", GBS::IF_HB_ST2::read()); + LOG(F(" IF_HB_SP2: ")); + LOGF("0x%04X", GBS::IF_HB_SP2::read()); + } + break; + case '7': + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { + if (GBS::IF_HBIN_SP::read() < 0x150) { // (arbitrary) max limit + GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() + 8); // canvas move left + } else { + LOGN(F("limit")); + } + } else if (!rto->outModeHdBypass) { + if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) + GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a + else + GBS::IF_HB_SP2::write(0); + if (GBS::IF_HB_ST2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) + GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() + 4); // 1_18 + else + GBS::IF_HB_ST2::write(0); + LOG(F("IF_HB_ST2: ")); + LOGF("0x%04X", GBS::IF_HB_ST2::read()); + LOG(F(" IF_HB_SP2: ")); + LOGF("0x%04X", GBS::IF_HB_SP2::read()); + } + break; + case '8': + // LOGN("invert sync"); + invertHS(); + invertVS(); + // optimizePhaseSP(); + break; + case '9': + writeProgramArrayNew(ntsc_720x480, false); + doPostPresetLoadSteps(); + break; + case 'o': { + if (rto->osr == 1) { + setOverSampleRatio(2, false); + } else if (rto->osr == 2) { + setOverSampleRatio(4, false); + } else if (rto->osr == 4) { + setOverSampleRatio(1, false); + } + delay(4); + optimizePhaseSP(); + LOG(F("OSR ")); + LOG(rto->osr); + LOGN(F("x")); + rto->phaseIsSet = 0; // do it again in modes applicable + } break; + case 'g': + inputStage++; + // we have a multibyte command + if (inputStage > 0) { + if (inputStage == 1) { + segmentCurrent = Serial.parseInt(); + LOG(F("G")); + LOG(segmentCurrent); + } else if (inputStage == 2) { + char szNumbers[3]; + szNumbers[0] = Serial.read(); + szNumbers[1] = Serial.read(); + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + LOG(F("R")); + LOGF("0x%04X", registerCurrent); + if (segmentCurrent <= 5) { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" value: ")); + LOGF("0x%02X", readout); + } else { + discardSerialRxData(); + LOGN(F("abort")); + } + inputStage = 0; + } + } + break; + case 's': + inputStage++; + // we have a multibyte command + if (inputStage > 0) { + if (inputStage == 1) { + segmentCurrent = Serial.parseInt(); + LOG(F("S")); + LOG(segmentCurrent); + } else if (inputStage == 2) { + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) { + // ascii 0x30 to 0x39 for '0' to '9' + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { + szNumbers[a] = Serial.read(); + } else { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + LOG(F("R")); + LOGF("0x%04X", registerCurrent); + } else if (inputStage == 3) { + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) { + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { + szNumbers[a] = Serial.read(); + } else { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + inputToogleBit = strtol(szNumbers, NULL, 16); + if (segmentCurrent <= 5) { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" (was ")); + LOGF("0x%04X", readout); + LOG(F(")")); + writeOneByte(registerCurrent, inputToogleBit); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" is now: ")); + LOGF("0x%02X\n", readout); + } else { + discardSerialRxData(); + LOGN(F("abort")); + } + inputStage = 0; + } + } + break; + case 't': + inputStage++; + // we have a multibyte command + if (inputStage > 0) { + if (inputStage == 1) { + segmentCurrent = Serial.parseInt(); + LOG(F("T")); + LOG(segmentCurrent); + } else if (inputStage == 2) { + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) { + // ascii 0x30 to 0x39 for '0' to '9' + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { + szNumbers[a] = Serial.read(); + } else { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + LOG(F("R")); + LOGF("0x%04X", registerCurrent); + } else if (inputStage == 3) { + if (Serial.peek() >= '0' && Serial.peek() <= '7') { + inputToogleBit = Serial.parseInt(); + } else { + inputToogleBit = 255; // will get discarded next step + } + LOG(F(" Bit: ")); + LOG(inputToogleBit); + inputStage = 0; + if ((segmentCurrent <= 5) && (inputToogleBit <= 7)) { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" (was ")); + LOGF("0x%04X", readout); + LOG(F(")")); + writeOneByte(registerCurrent, readout ^ (1 << inputToogleBit)); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" is now: ")); + LOGF("0x%02X\n", readout); + } else { + discardSerialRxData(); + inputToogleBit = registerCurrent = 0; + LOGN(F("abort")); + } + } + } + break; + case '<': { + if (segmentCurrent != 255 && registerCurrent != 255) { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + writeOneByte(registerCurrent, readout - 1); // also allow wrapping + LOG(F("S")); + LOG(segmentCurrent); + LOG(F("_")); + LOGF("0x%04X", registerCurrent); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" : ")); + LOGF("0x%04X", readout); + } + } break; + case '>': { + if (segmentCurrent != 255 && registerCurrent != 255) { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + writeOneByte(registerCurrent, readout + 1); + LOG(F("S")); + LOG(segmentCurrent); + LOG(F("_")); + LOGF("0x%04X", registerCurrent); + readFromRegister(registerCurrent, 1, &readout); + LOG(F(" : ")); + LOGF("0x%04X\n", readout); + } + } break; + case '_': { + uint32_t ticks = FrameSync::getPulseTicks(); + Serial.println(ticks); + } break; + case '~': + goLowPowerWithInputDetection(); // test reset + input detect + break; + case 'w': { + // Serial.flush(); + uint16_t value = 0; + String what = Serial.readStringUntil(' '); + + if (what.length() > 5) { + LOGN(F("abort")); + inputStage = 0; + break; + } + if (what.equals("f")) { + if (rto->extClockGenDetected) { + Serial.print(F("old freqExtClockGen: ")); + Serial.println((uint32_t)rto->freqExtClockGen); + rto->freqExtClockGen = Serial.parseInt(); + // safety range: 1 - 250 MHz + if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) { + Si.setFreq(0, rto->freqExtClockGen); + rto->clampPositionIsSet = 0; + rto->coastPositionIsSet = 0; + } + Serial.print(F("set freqExtClockGen: ")); + Serial.println((uint32_t)rto->freqExtClockGen); + } + break; + } + + value = Serial.parseInt(); + if (value < 4096) { + LOG(F("set ")); + LOG(what); + LOG(F(" ")); + LOGN(value); + if (what.equals("ht")) { + // set_htotal(value); + if (!rto->outModeHdBypass) { + rto->forceRetime = 1; + applyBestHTotal(value); + } else { + GBS::VDS_HSYNC_RST::write(value); + } + } else if (what.equals("vt")) { + set_vtotal(value); + } else if (what.equals("hsst")) { + setHSyncStartPosition(value); + } else if (what.equals("hssp")) { + setHSyncStopPosition(value); + } else if (what.equals("hbst")) { + setMemoryHblankStartPosition(value); + } else if (what.equals("hbsp")) { + setMemoryHblankStopPosition(value); + } else if (what.equals("hbstd")) { + setDisplayHblankStartPosition(value); + } else if (what.equals("hbspd")) { + setDisplayHblankStopPosition(value); + } else if (what.equals("vsst")) { + setVSyncStartPosition(value); + } else if (what.equals("vssp")) { + setVSyncStopPosition(value); + } else if (what.equals("vbst")) { + setMemoryVblankStartPosition(value); + } else if (what.equals("vbsp")) { + setMemoryVblankStopPosition(value); + } else if (what.equals("vbstd")) { + setDisplayVblankStartPosition(value); + } else if (what.equals("vbspd")) { + setDisplayVblankStopPosition(value); + } else if (what.equals("sog")) { + setAndUpdateSogLevel(value); + } else if (what.equals("ifini")) { + GBS::IF_INI_ST::write(value); + // Serial.println(GBS::IF_INI_ST::read()); + } else if (what.equals("ifvst")) { + GBS::IF_VB_ST::write(value); + // Serial.println(GBS::IF_VB_ST::read()); + } else if (what.equals("ifvsp")) { + GBS::IF_VB_SP::write(value); + // Serial.println(GBS::IF_VB_ST::read()); + } else if (what.equals("vsstc")) { + setCsVsStart(value); + } else if (what.equals("vsspc")) { + setCsVsStop(value); + } + } else { + LOGN(F("abort")); + } + } break; + case 'x': { + uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); + GBS::IF_HBIN_SP::write(if_hblank_scale_stop + 1); + LOG(F("1_26: ")); + LOGF("0x%04x", (if_hblank_scale_stop + 1)); + } break; + case 'X': { + uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); + GBS::IF_HBIN_SP::write(if_hblank_scale_stop - 1); + LOG(F("1_26: ")); + LOGF("0x%04X", (if_hblank_scale_stop - 1)); + } break; + case '(': { + writeProgramArrayNew(ntsc_1920x1080, false); + doPostPresetLoadSteps(); + } break; + case ')': { + writeProgramArrayNew(pal_1920x1080, false); + doPostPresetLoadSteps(); + } break; + case 'V': { + LOG(F("step response ")); + uopt->wantStepResponse = !uopt->wantStepResponse; + if (uopt->wantStepResponse) { + GBS::VDS_UV_STEP_BYPS::write(0); + LOGN(F("on")); + } else { + GBS::VDS_UV_STEP_BYPS::write(1); + LOGN(F("off")); + } + saveUserPrefs(); + } break; + case 'S': { + snapToIntegralFrameRate(); + break; + } + case ':': + externalClockGenSyncInOutRate(); + break; + case ';': + externalClockGenResetClock(); + if (rto->extClockGenDetected) { + rto->extClockGenDetected = 0; + Serial.println(F("ext clock gen bypass")); + } else { + rto->extClockGenDetected = 1; + Serial.println(F("ext clock gen active")); + externalClockGenSyncInOutRate(); + } + //{ + // float bla = 0; + // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; + // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); + // Serial.println(bla, 5); + //} + break; + default: + LOG(F("unknown command ")); + LOGF("0x%04X", serialCommand); + break; + } + + delay(1); // give some time to read in eventual next chars + + // a web ui or terminal command has finished. good idea to reset sync lock timer + // important if the command was to change presets, possibly others + lastVsyncLock = millis(); + + if (!Serial.available()) { + // in case we handled a Serial or web server command and there's no more extra commands + // but keep debug view command (resets once called) + if (serialCommand != 'D') { + serialCommand = '@'; + } + wifiLoop(1); + } + } + + if (userCommand != '@') { + handleType2Command(userCommand); + userCommand = '@'; // in case we handled web server command + lastVsyncLock = millis(); + wifiLoop(1); + } + + // run FrameTimeLock if enabled + if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && + rto->syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) { + uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); + uint16_t pllad = GBS::PLLAD_MD::read(); + + if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { + uint8_t debug_backup = GBS::TEST_BUS_SEL::read(); + if (debug_backup != 0x0) { + GBS::TEST_BUS_SEL::write(0x0); + } + // unsigned long startTime = millis(); + LOGF("running frame sync, clock gen enabled = %d\n", rto->extClockGenDetected); + bool success = rto->extClockGenDetected ? FrameSync::runFrequency() : FrameSync::runVsync(uopt->frameTimeLockMethod); + if (!success) { + if (rto->syncLockFailIgnore-- == 0) { + FrameSync::reset(uopt->frameTimeLockMethod); // in case run() failed because we lost sync signal + } + } else if (rto->syncLockFailIgnore > 0) { + rto->syncLockFailIgnore = 16; + } + // Serial.println(millis() - startTime); + + if (debug_backup != 0x0) { + GBS::TEST_BUS_SEL::write(debug_backup); + } + } + lastVsyncLock = millis(); + } + + if (rto->syncWatcherEnabled && rto->boardHasPower) { + if ((millis() - lastTimeInterruptClear) > 3000) { + GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD + GBS::INTERRUPT_CONTROL_00::write(0x00); + lastTimeInterruptClear = millis(); + } + } + + // information mode + if (rto->printInfos == true) { + printInfo(); + } + + // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; + // if (testbus >= 0x0FFD){ + // Serial.println(testbus,HEX); + // } + // if (rto->videoIsFrozen && (rto->continousStableCounter >= 2)) { + // unfreezeVideo(); + // } + + // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes + if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true && (millis() - lastTimeSyncWatcher) > 20) { + runSyncWatcher(); + lastTimeSyncWatcher = millis(); + + // auto adc gain + if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected && rto->videoStandardInput > 0 && rto->clampPositionIsSet && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 && rto->boardHasPower) { + uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); + uint16_t pllad = GBS::PLLAD_MD::read(); + if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { + uint8_t debugRegBackup = 0, debugPinBackup = 0; + debugPinBackup = GBS::PAD_BOUT_EN::read(); + debugRegBackup = GBS::TEST_BUS_SEL::read(); + GBS::PAD_BOUT_EN::write(0); // disable output to pin for test + GBS::DEC_TEST_SEL::write(1); // luma and G channel + GBS::TEST_BUS_SEL::write(0xb); // decimation + if (GBS::STATUS_INT_SOG_BAD::read() == 0) { + runAutoGain(); + } + GBS::TEST_BUS_SEL::write(debugRegBackup); + GBS::PAD_BOUT_EN::write(debugPinBackup); // debug output pin back on + } + } + } + + // init frame sync + besthtotal routine + if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { + if (rto->continousStableCounter >= 10 && rto->coastPositionIsSet && + ((millis() - lastVsyncLock) > 500)) { + if ((rto->continousStableCounter % 5) == 0) { // 5, 10, 15, .., 255 + uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); + uint16_t pllad = GBS::PLLAD_MD::read(); + if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { + runAutoBestHTotal(); + } + } + } + } + + // update clamp + coast positions after preset change // do it quickly + if ((rto->videoStandardInput <= 14 && rto->videoStandardInput != 0) && + rto->syncWatcherEnabled && !rto->coastPositionIsSet) { + if (rto->continousStableCounter >= 7) { + if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto->videoStandardInput)) { + updateCoastPosition(0); + if (rto->coastPositionIsSet) { + if (videoStandardInputIsPalNtscSd()) { + // todo: verify for other csync formats + GBS::SP_DIS_SUB_COAST::write(0); // enable 5_3e 5 + GBS::SP_H_PROTECT::write(0); // no 5_3e 4 + } + } + } + } + } + + // don't exclude modes 13 / 14 / 15 (rgbhv bypass) + if ((rto->videoStandardInput != 0) && (rto->continousStableCounter >= 4) && + !rto->clampPositionIsSet && rto->syncWatcherEnabled) { + updateClampPosition(); + if (rto->clampPositionIsSet) { + if (GBS::SP_NO_CLAMP_REG::read() == 1) { + GBS::SP_NO_CLAMP_REG::write(0); + } + } + } + + // later stage post preset adjustments + if ((rto->applyPresetDoneStage == 1) && + ((rto->continousStableCounter > 35 && rto->continousStableCounter < 45) || // this + !rto->syncWatcherEnabled)) // or that + { + if (rto->applyPresetDoneStage == 1) { + // 2nd chance + GBS::DAC_RGBS_PWDNZ::write(1); // 2nd chance + if (!uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 2nd chance + } + if (!rto->syncWatcherEnabled) { + updateClampPosition(); + GBS::SP_NO_CLAMP_REG::write(0); // 5_57 0 + } + + if (rto->extClockGenDetected && rto->videoStandardInput != 14) { + // switch to ext clock + if (!rto->outModeHdBypass) { + if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // first store original in an option byte in 1_2D + GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // enable and switch input + Si.enable(0); + delayMicroseconds(800); + GBS::PLL648_CONTROL_01::write(0x75); + } + } + // sync clocks now + externalClockGenSyncInOutRate(); + } + rto->applyPresetDoneStage = 0; + } + } else if (rto->applyPresetDoneStage == 1 && (rto->continousStableCounter > 35)) { + // 3rd chance + GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance + if (!uopt->wantOutputComponent) { + GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 3rd chance + } + + // sync clocks now + externalClockGenSyncInOutRate(); + rto->applyPresetDoneStage = 0; // timeout + } + + if (rto->applyPresetDoneStage == 10) { + rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets + setOutModeHdBypass(false); + } + + if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { + if ((millis() - lastTimeSourceCheck) >= 500) { + if (checkBoardPower()) { + inputAndSyncDetect(); // source is off or just started; keep looking for new input + } else { + rto->boardHasPower = false; + rto->continousStableCounter = 0; + rto->syncWatcherEnabled = false; + } + lastTimeSourceCheck = millis(); + + // vary SOG slicer level from 2 to 6 + uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); + if (currentSOG >= 3) { + rto->currentLevelSOG = currentSOG - 1; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } else { + rto->currentLevelSOG = 6; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } + } + } + + // has the GBS board lost power? // check at 2 points, in case one doesn't register + // low values chosen to not do this check on small sync issues + if ((rto->noSyncCounter == 61 || rto->noSyncCounter == 62) && rto->boardHasPower) { + if (!checkBoardPower()) { + rto->noSyncCounter = 1; // some neutral "no sync" value + rto->boardHasPower = false; + rto->continousStableCounter = 0; + // rto->syncWatcherEnabled = false; + stopWire(); // sets pinmodes SDA, SCL to INPUT + } else { + rto->noSyncCounter = 63; // avoid checking twice + } + } + + // power good now? // added syncWatcherEnabled check to enable passive mode + // (passive mode = watching OFW without interrupting) + if (!rto->boardHasPower && rto->syncWatcherEnabled) { // then check if power has come on + if (digitalRead(SCL) && digitalRead(SDA)) { + delay(50); + if (digitalRead(SCL) && digitalRead(SDA)) { + Serial.println(F("power good")); + delay(350); // i've seen the MTV230 go on briefly on GBS power cycle + startWire(); + { + // run some dummy commands to init I2C + GBS::SP_SOG_MODE::read(); + GBS::SP_SOG_MODE::read(); + writeOneByte(0xF0, 0); + writeOneByte(0x00, 0); // update cached segment + GBS::STATUS_00::read(); + } + rto->syncWatcherEnabled = true; + rto->boardHasPower = true; + delay(100); + goLowPowerWithInputDetection(); + } + } + } + +#ifdef HAVE_PINGER_LIBRARY + // periodic pings for debugging WiFi issues + if (WiFi.status() == WL_CONNECTED) { + if (rto->enableDebugPings && millis() - pingLastTime > 1000) { + // regular interval pings + if (pinger.Ping(WiFi.gatewayIP(), 1, 750) == false) { + Serial.println("Error during last ping command."); + } + pingLastTime = millis(); + } + } +#endif +} + +#if defined(ESP8266) +// #include "webui_html.h" +// gzip -c9 webui.html > webui_html && xxd -i webui_html > webui_html.h && rm webui_html && sed -i -e 's/unsigned char webui_html\[]/const uint8_t webui_html[] PROGMEM/' webui_html.h && sed -i -e 's/unsigned int webui_html_len/const unsigned int webui_html_len/' webui_html.h + +void handleType2Command(char argument) +{ + LOGF("%s command %c at settings source %d, custom slot %d, status %x\n", "user", + argument, uopt->presetPreference, uopt->presetSlot, rto->presetID); + switch (argument) { + case '0': + LOG(F("pal force 60hz ")); + if (uopt->PalForce60 == 0) { + uopt->PalForce60 = 1; + LOGN(F("on")); + } else { + uopt->PalForce60 = 0; + LOGN(F("off")); + } + saveUserPrefs(); + break; + case '1': + // reset to defaults button + webSocket.close(); + loadDefaultUserOptions(); + saveUserPrefs(); + Serial.println(F("options set to defaults, restarting")); + delay(60); + ESP.reset(); // don't use restart(), messes up websocket reconnects + // + break; + case '2': + // + break; + case '3': // load custom preset + { + uopt->presetPreference = OutputCustomized; // custom + if (rto->videoStandardInput == 14) { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } else { + // normal path + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + } break; + case '4': // save custom preset + savePresetToFS(); + uopt->presetPreference = OutputCustomized; // custom + saveUserPrefs(); + break; + case '5': + // Frame Time Lock toggle + uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + saveUserPrefs(); + if (uopt->enableFrameTimeLock) { + LOGN(F("FTL on")); + } else { + LOGN(F("FTL off")); + } + if (!rto->extClockGenDetected) { + FrameSync::reset(uopt->frameTimeLockMethod); + } + if (uopt->enableFrameTimeLock) { + activeFrameTimeLockInitialSteps(); + } + break; + case '6': + // + break; + case '7': + uopt->wantScanlines = !uopt->wantScanlines; + LOG(F("scanlines: ")); + if (uopt->wantScanlines) { + LOGN(F("on (Line Filter recommended)")); + } else { + disableScanlines(); + LOGN(F("off")); + } + saveUserPrefs(); + break; + case '9': + // + break; + case 'a': + webSocket.close(); + Serial.println(F("restart")); + delay(60); + ESP.reset(); // don't use restart(), messes up websocket reconnects + break; + case 'e': // print files on spiffs + { + fs::Dir dir = LittleFS.openDir("/"); + while (dir.next()) { + LOG(dir.fileName()); + LOG(F(" ")); + LOGN(dir.fileSize()); + delay(1); // wifi stack + } + //// + File f = LittleFS.open("/preferencesv2.txt", "r"); + if (!f) { + LOGN(F("failed opening preferences file")); + } else { + LOG(F("preset preference = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("frame time lock = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("preset slot = ")); + LOGN((uint8_t)(f.read())); + LOG(F("frame lock method = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("auto gain = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("scanlines = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("component output = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("deinterlacer mode = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("line filter = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("peaking = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("preferScalingRgbhv = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("6-tap = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("pal force60 = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("matched = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("step response = ")); + LOGN((uint8_t)(f.read() - '0')); + LOG(F("disable external clock generator = ")); + LOGN((uint8_t)(f.read() - '0')); + + f.close(); + } + } break; + case 'f': + case 'g': + case 'h': + case 'p': + case 's': + case 'L': { + // load preset via webui + uint8_t videoMode = getVideoMode(); + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; // last known good as fallback + // else videoMode stays 0 and we'll apply via some assumptions + + if (argument == 'f') + uopt->presetPreference = Output960P; // 1280x960 + if (argument == 'g') + uopt->presetPreference = Output720P; // 1280x720 + if (argument == 'h') + uopt->presetPreference = Output480P; // 720x480/768x576 + if (argument == 'p') + uopt->presetPreference = Output1024P; // 1280x1024 + if (argument == 's') + uopt->presetPreference = Output1080P; // 1920x1080 + if (argument == 'L') + uopt->presetPreference = OutputDownscale; // downscale + + rto->useHdmiSyncFix = 1; // disables sync out when programming preset + if (rto->videoStandardInput == 14) { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } else { + // normal path + applyPresets(videoMode); + } + saveUserPrefs(); + } break; + case 'i': + // toggle active frametime lock method + if (!rto->extClockGenDetected) { + FrameSync::reset(uopt->frameTimeLockMethod); + } + if (uopt->frameTimeLockMethod == 0) { + uopt->frameTimeLockMethod = 1; + } else if (uopt->frameTimeLockMethod == 1) { + uopt->frameTimeLockMethod = 0; + } + saveUserPrefs(); + activeFrameTimeLockInitialSteps(); + break; + case 'l': + // cycle through available SDRAM clocks + { + uint8_t PLL_MS = GBS::PLL_MS::read(); + uint8_t memClock = 0; + + if (PLL_MS == 0) + PLL_MS = 2; + else if (PLL_MS == 2) + PLL_MS = 7; + else if (PLL_MS == 7) + PLL_MS = 4; + else if (PLL_MS == 4) + PLL_MS = 3; + else if (PLL_MS == 3) + PLL_MS = 5; + else if (PLL_MS == 5) + PLL_MS = 0; + + switch (PLL_MS) { + case 0: + memClock = 108; + break; + case 1: + memClock = 81; + break; // goes well with 4_2C = 0x14, 4_2D = 0x27 + case 2: + memClock = 10; + break; // feedback clock + case 3: + memClock = 162; + break; + case 4: + memClock = 144; + break; + case 5: + memClock = 185; + break; // slight OC + case 6: + memClock = 216; + break; // !OC! + case 7: + memClock = 129; + break; + default: + break; + } + GBS::PLL_MS::write(PLL_MS); + ResetSDRAM(); + if (memClock != 10) { + LOG(F("SDRAM clock: ")); + LOG(memClock); + LOGN(F("Mhz")); + } else { + LOG(F("SDRAM clock: ")); + LOGN(F("Feedback clock")); + } + } + break; + case 'm': + LOG(F("Line Filter: ")); + if (uopt->wantVdsLineFilter) { + uopt->wantVdsLineFilter = 0; + GBS::VDS_D_RAM_BYPS::write(1); + LOGN(F("off")); + } else { + uopt->wantVdsLineFilter = 1; + GBS::VDS_D_RAM_BYPS::write(0); + LOGN(F("on")); + } + saveUserPrefs(); + break; + case 'n': + LOG(F("ADC gain++ : ")); + uopt->enableAutoGain = 0; + setAdcGain(GBS::ADC_RGCTRL::read() - 1); + LOGF("0x%04X", GBS::ADC_RGCTRL::read()); + break; + case 'o': + LOG(F("ADC gain-- : ")); + uopt->enableAutoGain = 0; + setAdcGain(GBS::ADC_RGCTRL::read() + 1); + LOGF("0x%04X", GBS::ADC_RGCTRL::read()); + break; + case 'A': { + uint16_t htotal = GBS::VDS_HSYNC_RST::read(); + uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); + uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); + if ((hbstd > 4) && (hbspd < (htotal - 4))) { + GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() - 4); + GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() + 4); + } else { + LOGN(F("limit")); + } + } break; + case 'B': { + uint16_t htotal = GBS::VDS_HSYNC_RST::read(); + uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); + uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); + if ((hbstd < (htotal - 4)) && (hbspd > 4)) { + GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() + 4); + GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() - 4); + } else { + LOGN(F("limit")); + } + } break; + case 'C': { + // vert mask + + uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); + uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); + uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); + if ((vbstd > 6) && (vbspd < (vtotal - 4))) { + GBS::VDS_DIS_VB_ST::write(vbstd - 2); + GBS::VDS_DIS_VB_SP::write(vbspd + 2); + } else { + LOGN(F("limit")); + } + } break; + case 'D': { + // vert mask - + uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); + uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); + uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); + if ((vbstd < (vtotal - 4)) && (vbspd > 6)) { + GBS::VDS_DIS_VB_ST::write(vbstd + 2); + GBS::VDS_DIS_VB_SP::write(vbspd - 2); + } else { + LOGN(F("limit")); + } + } break; + case 'q': + if (uopt->deintMode != 1) { + uopt->deintMode = 1; + disableMotionAdaptDeinterlace(); + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) { + disableScanlines(); + } + saveUserPrefs(); + } + LOGN(F("Deinterlacer: Bob")); + break; + case 'r': + if (uopt->deintMode != 0) { + uopt->deintMode = 0; + saveUserPrefs(); + // will enable next loop() + } + LOGN(F("Deinterlacer: Motion Adaptive")); + break; + case 't': + // unused now + LOG(F("6-tap: ")); + if (uopt->wantTap6 == 0) { + uopt->wantTap6 = 1; + GBS::VDS_TAP6_BYPS::write(0); + GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() - 1); + LOGN(F("on")); + } else { + uopt->wantTap6 = 0; + GBS::VDS_TAP6_BYPS::write(1); + GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() + 1); + LOGN(F("off")); + } + saveUserPrefs(); + break; + case 'u': + // restart to attempt wifi station mode connect + delay(30); + // WiFi.mode(WIFI_STA); + // WiFi.hostname(device_hostname_partial); // _full + wifiStartStaMode("", ""); + // delay(30); + // ESP.reset(); + break; + case 'v': { + uopt->wantFullHeight = !uopt->wantFullHeight; + saveUserPrefs(); + uint8_t vidMode = getVideoMode(); + if (uopt->presetPreference == 5) { + if (GBS::GBS_PRESET_ID::read() == 0x05 || GBS::GBS_PRESET_ID::read() == 0x15) { + applyPresets(vidMode); + } + } + } break; + case 'w': + uopt->enableCalibrationADC = !uopt->enableCalibrationADC; + saveUserPrefs(); + break; + case 'x': + uopt->preferScalingRgbhv = !uopt->preferScalingRgbhv; + LOG(F("preferScalingRgbhv: ")); + if (uopt->preferScalingRgbhv) { + LOGN(F("on")); + } else { + LOGN(F("off")); + } + saveUserPrefs(); + break; + case 'X': + LOG(F("ExternalClockGenerator ")); + if (uopt->disableExternalClockGenerator == 0) { + uopt->disableExternalClockGenerator = 1; + LOGN(F("disabled")); + } else { + uopt->disableExternalClockGenerator = 0; + LOGN("enabled"); + } + saveUserPrefs(); + break; + case 'z': + // sog slicer level + if (rto->currentLevelSOG > 0) { + rto->currentLevelSOG -= 1; + } else { + rto->currentLevelSOG = 16; + } + setAndUpdateSogLevel(rto->currentLevelSOG); + optimizePhaseSP(); + LOG(F("Phase: ")); + LOG(rto->phaseSP); + LOG(F(" SOG: ")); + LOG(rto->currentLevelSOG); + LOGN(); + break; + case 'E': + // test option for now + LOG(F("IF Auto Offset: ")); + toggleIfAutoOffset(); + if (GBS::IF_AUTO_OFST_EN::read()) { + LOGN(F("on")); + } else { + LOGN(F("off")); + } + break; + case 'F': + // freeze pic + if (GBS::CAPTURE_ENABLE::read()) { + GBS::CAPTURE_ENABLE::write(0); + } else { + GBS::CAPTURE_ENABLE::write(1); + } + break; + case 'K': + // scanline strength + if (uopt->scanlineStrength >= 0x10) { + uopt->scanlineStrength -= 0x10; + } else { + uopt->scanlineStrength = 0x50; + } + if (rto->scanlinesEnabled) { + GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); + GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); + } + saveUserPrefs(); + LOG(F("Scanline Brightness: ")); + LOGF("0x%04X", uopt->scanlineStrength); + break; + case 'Z': + // brightness++ + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 1); + LOG(F("Brightness++ : ")); + LOGN(GBS::VDS_Y_OFST::read()); + break; + case 'T': + // brightness-- + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 1); + LOG(F("Brightness-- : ")); + LOGN(GBS::VDS_Y_OFST::read()); + break; + case 'N': + // contrast++ + GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 1); + LOG(F("Contrast++ : ")); + LOGN(GBS::VDS_Y_GAIN::read()); + break; + case 'M': + // contrast-- + GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 1); + LOG(F("Contrast-- : ")); + LOGN(GBS::VDS_Y_GAIN::read()); + break; + case 'Q': + // pb/u gain++ + GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() + 1); + LOG(F("Pb/U gain++ : ")); + LOGN(GBS::VDS_UCOS_GAIN::read()); + break; + case 'H': + // pb/u gain-- + GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() - 1); + LOG(F("Pb/U gain-- : ")); + LOGN(GBS::VDS_UCOS_GAIN::read()); + break; + break; + case 'P': + // pr/v gain++ + GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() + 1); + LOG(F("Pr/V gain++ : ")); + LOGN(GBS::VDS_VCOS_GAIN::read()); + break; + case 'S': + // pr/v gain-- + GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() - 1); + LOG(F("Pr/V gain-- : ")); + LOGN(GBS::VDS_VCOS_GAIN::read()); + break; + case 'O': + // info + if (GBS::ADC_INPUT_SEL::read() == 1) { + LOGN(F("RGB reg")); + LOGN(F("------------ ")); + LOG(F("Y_OFFSET: ")); + LOGN(GBS::VDS_Y_OFST::read()); + LOG(F("U_OFFSET: ")); + LOGN(GBS::VDS_U_OFST::read()); + LOG(F("V_OFFSET: ")); + LOGN(GBS::VDS_V_OFST::read()); + LOG(F("Y_GAIN: ")); + LOGN(GBS::VDS_Y_GAIN::read()); + LOG(F("USIN_GAIN: ")); + LOGN(GBS::VDS_USIN_GAIN::read()); + LOG(F("UCOS_GAIN: ")); + LOGN(GBS::VDS_UCOS_GAIN::read()); + } else { + LOGN(F("YPbPr reg")); + LOGN(F("------------ ")); + LOG(F("Y_OFFSET: ")); + LOGN(GBS::VDS_Y_OFST::read()); + LOG(F("U_OFFSET: ")); + LOGN(GBS::VDS_U_OFST::read()); + LOG(F("V_OFFSET: ")); + LOGN(GBS::VDS_V_OFST::read()); + LOG(F("Y_GAIN: ")); + LOGN(GBS::VDS_Y_GAIN::read()); + LOG(F("USIN_GAIN: ")); + LOGN(GBS::VDS_USIN_GAIN::read()); + LOG(F("UCOS_GAIN: ")); + LOGN(GBS::VDS_UCOS_GAIN::read()); + } + break; + case 'U': + // default + if (GBS::ADC_INPUT_SEL::read() == 1) { + GBS::VDS_Y_GAIN::write(128); + GBS::VDS_UCOS_GAIN::write(28); + GBS::VDS_VCOS_GAIN::write(41); + GBS::VDS_Y_OFST::write(0); + GBS::VDS_U_OFST::write(0); + GBS::VDS_V_OFST::write(0); + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + LOGN(F("RGB:defauit")); + } else { + GBS::VDS_Y_GAIN::write(128); + GBS::VDS_UCOS_GAIN::write(28); + GBS::VDS_VCOS_GAIN::write(41); + GBS::VDS_Y_OFST::write(254); + GBS::VDS_U_OFST::write(3); + GBS::VDS_V_OFST::write(3); + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + LOGN(F("YPbPr:defauit")); + } + break; + default: + break; + } +} + +// void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length) { +// switch (type) { +// case WStype_DISCONNECTED: +// //Serial.print("WS: #"); Serial.print(num); Serial.print(" disconnected,"); +// //Serial.print(" remaining: "); Serial.println(webSocket.connectedClients()); +// break; +// case WStype_CONNECTED: +// //Serial.print("WS: #"); Serial.print(num); Serial.print(" connected, "); +// //Serial.print(" total: "); Serial.println(webSocket.connectedClients()); +// updateWebSocketData(); +// break; +// case WStype_PONG: +// //Serial.print("p"); +// updateWebSocketData(); +// break; +// } +// } + +// WiFiEventHandler disconnectedEventHandler; + +void startWebserver() +{ + wifiInit(); + + webSocket.begin(); // Websocket for interaction + serverInit(); + + // webSocket.onEvent(webSocketEvent); + + yield(); + +#ifdef HAVE_PINGER_LIBRARY + // pinger library + pinger.OnReceive([](const PingerResponse &response) { + if (response.ReceivedResponse) { + Serial.printf( + "Reply from %s: time=%lums\n", + response.DestIPAddress.toString().c_str(), + response.ResponseTime); + + pingLastTime = millis() - 900; // produce a fast stream of pings if connection is good + } else { + Serial.printf("Request timed out.\n"); + } + + // Return true to continue the ping sequence. + // If current event returns false, the ping sequence is interrupted. + return true; + }); + + pinger.OnEnd([](const PingerResponse &response) { + // detailed info not necessary + return true; + }); +#endif +} + +void initUpdateOTA() +{ + ArduinoOTA.setHostname("GBS OTA"); + + // ArduinoOTA.setPassword("admin"); + // Password can be set with it's md5 value as well + // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 + // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); + + // update: no password is as (in)secure as this publicly stated hash.. + // rely on the user having to enable the OTA feature on the web ui + + ArduinoOTA.onStart([]() { + String type; + if (ArduinoOTA.getCommand() == U_FLASH) + type = "sketch"; + else // U_SPIFFS + type = "filesystem"; + + // NOTE: if updating LittleFS this would be the place to unmount LittleFS using LittleFS.end() + LittleFS.end(); + LOGN(String(F("Start updating ")) + type); + }); + ArduinoOTA.onEnd([]() { + LOGN(F("\nEnd")); + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + SerialM.printf("Progress: %u%%\r", (progress / (total / 100))); + }); + ArduinoOTA.onError([](ota_error_t error) { + SerialM.printf("Error[%u]: ", error); + if (error == OTA_AUTH_ERROR) + LOGN(F("Auth Failed")); + else if (error == OTA_BEGIN_ERROR) + LOGN(F("Begin Failed")); + else if (error == OTA_CONNECT_ERROR) + LOGN(F("Connect Failed")); + else if (error == OTA_RECEIVE_ERROR) + LOGN(F("Receive Failed")); + else if (error == OTA_END_ERROR) + LOGN(F("End Failed")); + }); + ArduinoOTA.begin(); + yield(); +} + +// sets every element of str to 0 (clears array) +void StrClear(char *str, uint16_t length) +{ + for (int i = 0; i < length; i++) { + str[i] = 0; + } +} + +const uint8_t *loadPresetFromLFS(byte forVideoMode) +{ + static uint8_t preset[432]; + String s = ""; + Ascii8 slot = 0; + File f; + + f = LittleFS.open("/preferencesv2.txt", "r"); + if (f) { + LOGN(F("preferencesv2.txt opened")); + uint8_t result[3]; + result[0] = f.read(); // todo: move file cursor manually + result[1] = f.read(); + result[2] = f.read(); + + f.close(); + slot = result[2]; + } else { + // file not found, we don't know what preset to load + LOGN(F("please select a preset slot first!")); // say "slot" here to make people save usersettings + if (forVideoMode == 2 || forVideoMode == 4) + return pal_240p; + else + return ntsc_240p; + } + + LOG(F("loading from preset slot ")); + LOG((char)slot); + LOG(F(": ")); + + if (forVideoMode == 1) { + f = LittleFS.open("/preset_ntsc." + String((char)slot), "r"); + } else if (forVideoMode == 2) { + f = LittleFS.open("/preset_pal." + String((char)slot), "r"); + } else if (forVideoMode == 3) { + f = LittleFS.open("/preset_ntsc_480p." + String((char)slot), "r"); + } else if (forVideoMode == 4) { + f = LittleFS.open("/preset_pal_576p." + String((char)slot), "r"); + } else if (forVideoMode == 5) { + f = LittleFS.open("/preset_ntsc_720p." + String((char)slot), "r"); + } else if (forVideoMode == 6) { + f = LittleFS.open("/preset_ntsc_1080p." + String((char)slot), "r"); + } else if (forVideoMode == 8) { + f = LittleFS.open("/preset_medium_res." + String((char)slot), "r"); + } else if (forVideoMode == 14) { + f = LittleFS.open("/preset_vga_upscale." + String((char)slot), "r"); + } else if (forVideoMode == 0) { + f = LittleFS.open("/preset_unknown." + String((char)slot), "r"); + } + + if (!f) { + LOGN(F("no preset file for this slot and source")); + if (forVideoMode == 2 || forVideoMode == 4) + return pal_240p; + else + return ntsc_240p; + } else { + LOGN(f.name()); + s = f.readStringUntil('}'); + f.close(); + } + + char *tmp; + uint16_t i = 0; + tmp = strtok(&s[0], ","); + while (tmp) { + preset[i++] = (uint8_t)atoi(tmp); + tmp = strtok(NULL, ","); + yield(); // wifi stack + } + + return preset; +} + +void savePresetToFS() +{ + uint8_t readout = 0; + File f; + Ascii8 slot = 0; + + // first figure out if the user has set a preferenced slot + f = LittleFS.open("/preferencesv2.txt", "r"); + if (f) { + uint8_t result[3]; + result[0] = f.read(); // todo: move file cursor manually + result[1] = f.read(); + result[2] = f.read(); + + f.close(); + slot = result[2]; // got the slot to save to now + } else { + // file not found, we don't know where to save this preset + LOGN(F("please select a preset slot first!")); + return; + } + + LOG(F("saving to preset slot ")); + LOGN(String((char)slot)); + + if (rto->videoStandardInput == 1) { + f = LittleFS.open("/preset_ntsc." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 2) { + f = LittleFS.open("/preset_pal." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 3) { + f = LittleFS.open("/preset_ntsc_480p." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 4) { + f = LittleFS.open("/preset_pal_576p." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 5) { + f = LittleFS.open("/preset_ntsc_720p." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 6) { + f = LittleFS.open("/preset_ntsc_1080p." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 8) { + f = LittleFS.open("/preset_medium_res." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 14) { + f = LittleFS.open("/preset_vga_upscale." + String((char)slot), "w"); + } else if (rto->videoStandardInput == 0) { + f = LittleFS.open("/preset_unknown." + String((char)slot), "w"); + } + + if (!f) { + LOGN(F("open save file failed!")); + } else { + LOGN(F("open save file ok")); + + GBS::GBS_PRESET_CUSTOM::write(1); // use one reserved bit to mark this as a custom preset + // don't store scanlines + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { + disableScanlines(); + } + + if (!rto->extClockGenDetected) { + if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { + FrameSync::reset(uopt->frameTimeLockMethod); + } + } + + for (int i = 0; i <= 5; i++) { + writeOneByte(0xF0, i); + switch (i) { + case 0: + for (int x = 0x40; x <= 0x5F; x++) { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + for (int x = 0x90; x <= 0x9F; x++) { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 1: + for (int x = 0x0; x <= 0x2F; x++) { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 2: + // not needed anymore + break; + case 3: + for (int x = 0x0; x <= 0x7F; x++) { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 4: + for (int x = 0x0; x <= 0x5F; x++) { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 5: + for (int x = 0x0; x <= 0x6F; x++) { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + } + } + f.println("};"); + LOG(F("preset saved as: ")); + LOGN(f.name()); + f.close(); + } +} + +void saveUserPrefs() +{ + File f = LittleFS.open("/preferencesv2.txt", "w"); + if (!f) { + LOGN(F("saveUserPrefs: open file failed")); + return; + } + f.write(uopt->presetPreference + '0'); // #1 + f.write(uopt->enableFrameTimeLock + '0'); + f.write(uopt->presetSlot); + f.write(uopt->frameTimeLockMethod + '0'); + f.write(uopt->enableAutoGain + '0'); + f.write(uopt->wantScanlines + '0'); + f.write(uopt->wantOutputComponent + '0'); + f.write(uopt->deintMode + '0'); + f.write(uopt->wantVdsLineFilter + '0'); + f.write(uopt->wantPeaking + '0'); + f.write(uopt->preferScalingRgbhv + '0'); + f.write(uopt->wantTap6 + '0'); + f.write(uopt->PalForce60 + '0'); + f.write(uopt->matchPresetSource + '0'); // #14 + f.write(uopt->wantStepResponse + '0'); // #15 + f.write(uopt->wantFullHeight + '0'); // #16 + f.write(uopt->enableCalibrationADC + '0'); // #17 + f.write(uopt->scanlineStrength + '0'); // #18 + f.write(uopt->disableExternalClockGenerator + '0'); // #19 + + + f.close(); +} + +#endif + +#if !USE_NEW_OLED_MENU +// OLED Functionality +void settingsMenuOLED() +{ + uint8_t videoMode = getVideoMode(); + byte button_nav = digitalRead(pin_switch); + if (button_nav == LOW) { + delay(350); // TODO + oled_subsetFrame++; // this button counter for navigating menu + oled_selectOption++; + } + // main menu + if (oled_page == 0) { + pointerfunction(); + display.clear(); + display.setTextAlignment(TEXT_ALIGN_LEFT); + display.setFont(ArialMT_Plain_16); + display.drawString(0, oled_main_pointer, ">"); + display.drawString(14, 0, String(oled_menu[0])); + display.drawString(14, 15, String(oled_menu[1])); + display.drawString(14, 30, String(oled_menu[2])); + display.drawString(14, 45, String(oled_menu[3])); + display.display(); + } + // cursor location on main menu + if (oled_main_pointer == 0 && oled_subsetFrame == 0) { + oled_pointer_count = 0; + oled_menuItem = 1; + } + if (oled_main_pointer == 15 && oled_subsetFrame == 0) { + oled_pointer_count = 0; + oled_menuItem = 2; + } + if (oled_main_pointer == 30 && oled_subsetFrame == 0) { + oled_pointer_count = 0; + oled_sub_pointer = 0; + oled_menuItem = 3; + } + if (oled_main_pointer == 45 && oled_subsetFrame == 0) { + oled_pointer_count = 0; + oled_menuItem = 4; + } + + + // resolution pages + if (oled_menuItem == 1 && oled_subsetFrame == 1) { + oled_page = 1; + oled_main_pointer = 0; + subpointerfunction(); + display.clear(); + display.drawString(0, oled_sub_pointer, ">"); + display.drawString(14, 0, String(oled_Resolutions[0])); + display.drawString(14, 15, String(oled_Resolutions[1])); + display.drawString(14, 30, String(oled_Resolutions[2])); + display.drawString(14, 45, String(oled_Resolutions[3])); + display.display(); + } else if (oled_menuItem == 1 && oled_subsetFrame == 2) { + subpointerfunction(); + oled_page = 2; + display.clear(); + display.drawString(0, oled_sub_pointer, ">"); + display.drawString(14, 0, String(oled_Resolutions[4])); + display.drawString(14, 15, String(oled_Resolutions[5])); + display.drawString(14, 30, String(oled_Resolutions[6])); + display.drawString(14, 45, "-----Back"); + display.display(); + if (oled_sub_pointer <= -15) { + oled_page = 1; + oled_subsetFrame = 1; + oled_sub_pointer = 45; + display.clear(); + } else if (oled_sub_pointer > 45) { + oled_page = 2; + oled_subsetFrame = 2; + oled_sub_pointer = 45; + } + } + // selection + // 1280x960 + if (oled_menuItem == 1) { + if (oled_pointer_count == 0 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "1280x960"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; + uopt->presetPreference = Output960P; + rto->useHdmiSyncFix = 1; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(videoMode); + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + // 1280x1024 + if (oled_pointer_count == 1 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "1280x1024"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; + uopt->presetPreference = Output1024P; + rto->useHdmiSyncFix = 1; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(videoMode); + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + // 1280x720 + if (oled_pointer_count == 2 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "1280x720"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; + uopt->presetPreference = Output720P; + rto->useHdmiSyncFix = 1; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(videoMode); + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + // 1920x1080 + if (oled_pointer_count == 3 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "1920x1080"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; + uopt->presetPreference = Output1080P; + rto->useHdmiSyncFix = 1; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(videoMode); + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + // 720x480 + if (oled_pointer_count == 4 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "480/576"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; + uopt->presetPreference = Output480P; + rto->useHdmiSyncFix = 1; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(videoMode); + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 2; + } + // downscale + if (oled_pointer_count == 5 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "Downscale"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; + uopt->presetPreference = OutputDownscale; + rto->useHdmiSyncFix = 1; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(videoMode); + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 2; + } + // passthrough/bypass + if (oled_pointer_count == 6 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "Pass-Through"); + display.drawString(0, 30, "Loaded!"); + display.display(); + } + setOutModeHdBypass(false); + uopt->presetPreference = OutputBypass; + if (uopt->presetPreference == 10 && rto->videoStandardInput != 15) { + rto->autoBestHtotalEnabled = 0; + if (rto->applyPresetDoneStage == 11) { + rto->applyPresetDoneStage = 1; + } else { + rto->applyPresetDoneStage = 10; + } + } else { + rto->applyPresetDoneStage = 1; + } + saveUserPrefs(); + oled_selectOption = 1; + oled_subsetFrame = 2; + } + // go back + if (oled_pointer_count == 7 && oled_selectOption == 2) { + oled_page = 0; + oled_subsetFrame = 0; + oled_main_pointer = 0; + oled_sub_pointer = 0; + oled_selectOption = 0; + } + } + // Presets pages + if (oled_menuItem == 2 && oled_subsetFrame == 1) { + oled_page = 1; + oled_main_pointer = 0; + subpointerfunction(); + display.clear(); + display.setTextAlignment(TEXT_ALIGN_CENTER); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset Slot:"); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, String(oled_Presets[oled_pointer_count])); + display.display(); + } else if (oled_menuItem == 2 && oled_subsetFrame == 2) { + oled_page = 2; + subpointerfunction(); + display.clear(); + display.setTextAlignment(TEXT_ALIGN_CENTER); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset Slot:"); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, String(oled_Presets[oled_pointer_count])); + display.display(); + } + // Preset selection + if (oled_menuItem == 2) { + if (oled_pointer_count == 0 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'A'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); // first array element selected + display.drawString(64, -8, "Preset #" + String(oled_Presets[0])); // set to frame that "doesnt exist" + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); // display loading conf + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); // allowing "catchup" + oled_selectOption = 1; // reset select container + oled_subsetFrame = 1; // switch back to prev frame (prev screen) + } + if (oled_pointer_count == 1 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'B'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset #" + String(oled_Presets[1])); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + if (oled_pointer_count == 2 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'C'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset #" + String(oled_Presets[2])); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + if (oled_pointer_count == 3 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'D'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset #" + String(oled_Presets[3])); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + if (oled_pointer_count == 4 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'E'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset #" + String(oled_Presets[4])); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); + oled_selectOption = 1; + oled_subsetFrame = 2; + } + if (oled_pointer_count == 5 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'F'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset #" + String(oled_Presets[5])); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); + oled_selectOption = 1; + oled_subsetFrame = 2; + } + if (oled_pointer_count == 6 && oled_selectOption == 2) { + oled_subsetFrame = 3; + uopt->presetSlot = 'G'; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + for (int i = 0; i <= 280; i++) { + display.clear(); + display.setFont(Open_Sans_Regular_20); + display.drawString(64, -8, "Preset #" + String(oled_Presets[6])); + display.setFont(Open_Sans_Regular_35); + display.drawString(64, 15, "Loaded!"); + display.display(); + } + uopt->presetPreference = OutputCustomized; + if (rto->videoStandardInput == 14) { + rto->videoStandardInput = 15; + } else { + applyPresets(rto->videoStandardInput); + } + saveUserPrefs(); + delay(50); + oled_selectOption = 1; + oled_subsetFrame = 2; + } + if (oled_pointer_count == 7 && oled_selectOption == 2) { + oled_page = 0; + oled_subsetFrame = 0; + oled_main_pointer = 0; + oled_sub_pointer = 0; + oled_selectOption = 0; + } + } + // Misc pages + if (oled_menuItem == 3 && oled_subsetFrame == 1) { + oled_page = 1; + oled_main_pointer = 0; + subpointerfunction(); + display.clear(); + display.drawString(0, oled_sub_pointer, ">"); + display.drawString(14, 0, String(oled_Misc[0])); + display.drawString(14, 15, String(oled_Misc[1])); + display.drawString(14, 45, String(oled_Misc[2])); + display.display(); + if (oled_sub_pointer <= 0) { + oled_sub_pointer = 0; + } + if (oled_sub_pointer >= 45) { + oled_sub_pointer = 45; + } + } + // Misc selection + if (oled_menuItem == 3) { + if (oled_pointer_count == 0 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "Resetting GBS"); + display.drawString(0, 30, "Please Wait..."); + display.display(); + } + webSocket.close(); + delay(60); + ESP.reset(); + oled_selectOption = 0; + oled_subsetFrame = 0; + } + + if (oled_pointer_count == 1 && oled_selectOption == 2) { + oled_subsetFrame = 3; + for (int i = 0; i <= 800; i++) { + display.clear(); + display.drawString(0, 10, "Defaults Loading"); + display.drawString(0, 30, "Please Wait..."); + display.display(); + } + webSocket.close(); + loadDefaultUserOptions(); + saveUserPrefs(); + delay(60); + ESP.reset(); + oled_selectOption = 1; + oled_subsetFrame = 1; + } + + if (oled_pointer_count == 3 && oled_selectOption == 2) { + oled_page = 0; + oled_subsetFrame = 0; + oled_main_pointer = 0; + oled_sub_pointer = 0; + oled_selectOption = 0; + } + } + // Current Settings pages + if (oled_menuItem == 4 && oled_subsetFrame == 1) { + bool vsyncActive = 0; + bool hsyncActive = 0; + float ofr = getOutputFrameRate(); + uint8_t currentInput = GBS::ADC_INPUT_SEL::read(); + rto->presetID = GBS::GBS_PRESET_ID::read(); + + oled_page = 1; + oled_pointer_count = 0; + oled_main_pointer = 0; + + subpointerfunction(); + display.clear(); + display.setFont(URW_Gothic_L_Book_20); + display.setTextAlignment(TEXT_ALIGN_LEFT); + + if (rto->presetID == 0x01 || rto->presetID == 0x11) { + display.drawString(0, 0, "1280x960"); + } else if (rto->presetID == 0x02 || rto->presetID == 0x12) { + display.drawString(0, 0, "1280x1024"); + } else if (rto->presetID == 0x03 || rto->presetID == 0x13) { + display.drawString(0, 0, "1280x720"); + } else if (rto->presetID == 0x05 || rto->presetID == 0x15) { + display.drawString(0, 0, "1920x1080"); + } else if (rto->presetID == 0x06 || rto->presetID == 0x16) { + display.drawString(0, 0, "Downscale"); + } else if (rto->presetID == 0x04) { + display.drawString(0, 0, "720x480"); + } else if (rto->presetID == 0x14) { + display.drawString(0, 0, "768x576"); + } else { + display.drawString(0, 0, "bypass"); + } + + display.drawString(0, 20, String(ofr, 5) + "Hz"); + + if (currentInput == 1) { + display.drawString(0, 41, "RGB"); + } else { + display.drawString(0, 41, "YpBpR"); + } + + if (currentInput == 1) { + vsyncActive = GBS::STATUS_SYNC_PROC_VSACT::read(); + if (vsyncActive) { + display.drawString(70, 41, "V"); + hsyncActive = GBS::STATUS_SYNC_PROC_HSACT::read(); + if (hsyncActive) { + display.drawString(53, 41, "H"); + } + } + } + display.display(); + } + // current setting Selection + if (oled_menuItem == 4) { + if (oled_pointer_count >= 0 && oled_selectOption == 2) { + oled_page = 0; + oled_subsetFrame = 0; + oled_main_pointer = 0; + oled_sub_pointer = 0; + oled_selectOption = 0; + } + } +} + +void pointerfunction() +{ + if (oled_main_pointer <= 0) { + oled_main_pointer = 0; + } + if (oled_main_pointer >= 45) { // limits + oled_main_pointer = 45; + } + + if (oled_pointer_count <= 0) { + oled_pointer_count = 0; + } else if (oled_pointer_count >= 3) { + oled_pointer_count = 3; + } +} + +void subpointerfunction() +{ + if (oled_sub_pointer < 0) { + oled_sub_pointer = 0; + oled_subsetFrame = 1; + oled_page = 1; + } + if (oled_sub_pointer > 45) { // limits to switch between the two pages + oled_sub_pointer = 0; // TODO + oled_subsetFrame = 2; + oled_page = 2; + } + // } if (sub_pointer <= -15){ //TODO: replace/take out + // sub_pointer = 0; + // page = 1; + // subsetFrame = 1; + // } + if (oled_pointer_count <= 0) { + oled_pointer_count = 0; + } else if (oled_pointer_count >= 7) { + oled_pointer_count = 7; + } +} +#endif \ No newline at end of file diff --git a/options.h b/options.h index 1d7d743c..19841886 100644 --- a/options.h +++ b/options.h @@ -1,4 +1,8 @@ #ifndef _USER_H_ +#define _USER_H_ + +#define THIS_DEVICE_MASTER + using Ascii8 = uint8_t; /// Output resolution requested by user, *given to* applyPresets(). enum PresetPreference : uint8_t { diff --git a/platformio.ini b/platformio.ini index af2d8744..0bedde8a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,19 +15,22 @@ src_dir = ./ platform = espressif8266@2.6.3 board = d1_mini framework = arduino +board_build.filesystem = littlefs board_build.f_cpu = 160000000L board_build.ldscript = eagle.flash.4m1m.ld upload_speed = 921600 monitor_speed = 115200 -lib_deps = +lib_deps = me-no-dev/ESPAsyncTCP@^1.2.2 - me-no-dev/ESP Async WebServer@^1.2.3 + ; me-no-dev/ESP Async WebServer@^1.2.3 thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays@4.4.0 bluemurder/ESP8266-ping@^2.0.1 ;r-downing/PersWiFiManager@^3.0.1 ;links2004/WebSockets@^2.1.4 build_src_filter = - +<**/*.c> - +<**/*.cpp> - +<**/*.ino> - -<./3rdparty/*> \ No newline at end of file + +<**/*.c> + +<**/*.cpp> + +<**/*.ino> + -<./3rdparty/*> +build_flags = + -fmax-errors=3 \ No newline at end of file diff --git a/public/src/index.ts b/public/src/index.ts index 02002dcf..142bf6a7 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -287,7 +287,7 @@ const createWebSocket = () => { const toggleMethod = ( button: HTMLTableCellElement | HTMLElement, - mode: boolean + mode: bool ) => { if (button.tagName === "TD") { button.innerText = mode ? "toggle_on" : "toggle_off"; @@ -443,7 +443,7 @@ const savePreset = () => { ).then(() => { loadUser("4").then(() => { setTimeout(() => { - fetchSlotNames().then((success: boolean) => { + fetchSlotNames().then((success: bool) => { if (success) { updateSlotNames(); } @@ -606,7 +606,7 @@ const toggleCustomSlotFilters = () => { updateCustomSlotFilters(!customSlotFilters); }; -const updateHelp = (help: boolean) => { +const updateHelp = (help: bool) => { if (help) { document.body.classList.remove("gbs-help-hide"); } else { @@ -614,7 +614,7 @@ const updateHelp = (help: boolean) => { } }; -const updateDeveloperMode = (developerMode: boolean) => { +const updateDeveloperMode = (developerMode: bool) => { const el = document.querySelector('[gbs-section="developer"]') as HTMLElement; if (developerMode) { el.removeAttribute("hidden"); @@ -632,7 +632,7 @@ const updateDeveloperMode = (developerMode: boolean) => { }; const updateCustomSlotFilters = ( - customFilters: boolean = GBSStorage.read("customSlotFilters") === true + customFilters: bool = GBSStorage.read("customSlotFilters") === true ) => { if (customFilters) { GBSControl.ui.customSlotFilters.setAttribute("active", ""); @@ -655,7 +655,7 @@ const GBSStorage = { JSON.stringify(GBSStorage.lsObject) ); }, - read(key: string): string | number | boolean { + read(key: string): string | number | bool { GBSStorage.lsObject = JSON.parse( localStorage.getItem("GBSControlSlotNames") || "{}" ); @@ -683,7 +683,7 @@ const toggleButtonActive = (id: string) => ( } }; -const displayWifiWarning = (mode: boolean) => { +const displayWifiWarning = (mode: bool) => { GBSControl.ui.webSocketConnectionWarning.style.display = mode ? "block" : "none"; @@ -1271,7 +1271,7 @@ const initGeneralListeners = () => { }; const initDeveloperMode = () => { - const devMode = GBSStorage.read("developerMode") as boolean; + const devMode = GBSStorage.read("developerMode") as bool; if (devMode === undefined) { GBSStorage.write("developerMode", false); updateDeveloperMode(false); @@ -1281,7 +1281,7 @@ const initDeveloperMode = () => { }; const initHelp = () => { - let help = GBSStorage.read("help") as boolean; + let help = GBSStorage.read("help") as bool; if (help === undefined) { help = false; GBSStorage.write("help", help); diff --git a/serial.cpp b/serial.cpp new file mode 100644 index 00000000..5aef13b7 --- /dev/null +++ b/serial.cpp @@ -0,0 +1,14 @@ +#include "serial.h" + +/** + * @brief + * + */ +void discardSerialRxData() +{ + uint16_t maxThrowAway = 0x1fff; + while (Serial.available() && maxThrowAway > 0) { + Serial.read(); + maxThrowAway--; + } +} diff --git a/serial.h b/serial.h new file mode 100644 index 00000000..804946fc --- /dev/null +++ b/serial.h @@ -0,0 +1,108 @@ +/* +##################################################################################### +# File: serial.h # +# File Created: Friday, 19th April 2024 4:13:41 pm # +# Author: Sergey Ko # +# Last Modified: Thursday, 25th April 2024 2:21:37 pm # +# Modified By: Sergey Ko # +##################################################################################### +# CHANGELOG: # +##################################################################################### +*/ + +#ifndef _ESPSERIAL_H_ +#define _ESPSERIAL_H_ + +#include "src/WebSocketsServer.h" + +extern char serialCommand; +extern char userCommand; +extern WebSocketsServer webSocket; + +void discardSerialRxData(); + +// serial mirror class for websocket logs +class SerialMirror : public Stream +{ + size_t write(const uint8_t *data, size_t size) + { + if (ESP.getFreeHeap() > 20000) { + webSocket.broadcastTXT(data, size); + } else { + webSocket.disconnect(); + } + Serial.write(data, size); + return size; + } + + size_t write(const char *data, size_t size) + { + if (ESP.getFreeHeap() > 20000) { + webSocket.broadcastTXT(data, size); + } else { + webSocket.disconnect(); + } + Serial.write(data, size); + return size; + } + + size_t write(uint8_t data) + { + if (ESP.getFreeHeap() > 20000) { + webSocket.broadcastTXT(&data, 1); + } else { + webSocket.disconnect(); + } + Serial.write(data); + return 1; + } + + size_t write(char data) + { + if (ESP.getFreeHeap() > 20000) { + webSocket.broadcastTXT(&data, 1); + } else { + webSocket.disconnect(); + } + Serial.write(data); + return 1; + } + + int available() + { + return 0; + } + int read() + { + return -1; + } + int peek() + { + return -1; + } + void flush() {} +}; + +#if defined(ESP8266) +// serial mirror class for websocket logs +SerialMirror SerialM; +#else +#define SerialM Serial +#endif + +#define LOGF(D, ...) \ +do { \ + SerialM.printf(D, ##__VA_ARGS__); \ +} while(0) +#define LOGN(D) \ +do { \ + SerialM.println(D); \ +} while(0) +#define LOG(D) \ +do { \ + SerialM.print(D); \ +} while(0) + +// extern SerialMirror SerialM; + +#endif // _ESPSERIAL_H_ \ No newline at end of file diff --git a/server.cpp b/server.cpp new file mode 100644 index 00000000..f42803c3 --- /dev/null +++ b/server.cpp @@ -0,0 +1,557 @@ +/* +##################################################################################### +# File: server.cpp # +# File Created: Friday, 19th April 2024 3:11:40 pm # +# Author: Sergey Ko # +# Last Modified: Thursday, 25th April 2024 3:50:47 pm # +# Modified By: Sergey Ko # +##################################################################################### +# CHANGELOG: # +##################################################################################### +*/ + +#include "server.h" + +/** + * @brief Initializer + * + */ +void serverInit() +{ + server.on(F("/"), HTTP_GET, serverHome); + server.on(F("/sc"), HTTP_GET, serverSC); + server.on(F("/uc"), HTTP_GET, serverUC); + server.on(F("/bin/slots.bin"), HTTP_GET, serverSlots); + server.on(F("/slot/set"), HTTP_GET, serverSlotSet); + server.on(F("/slot/save"), HTTP_GET, serverSlotSave); + server.on(F("/slot/remove"), HTTP_GET, serverSlotRemove); + // server.on(F("/spiffs/upload"), HTTP_GET, serverFsUpload); + server.on(F("/spiffs/upload"), HTTP_POST, serverFsUploadResponder, serverFsUploadHandler); + server.on(F("/spiffs/download"), HTTP_GET, serverFsDownloadHandler); + server.on(F("/spiffs/dir"), HTTP_GET, serverFsDir); + server.on(F("/spiffs/format"), HTTP_GET, serverFsFormat); + server.on(F("/wifi/status"), HTTP_GET, serverWiFiStatus); + server.on(F("/gbs/restore-filters"), HTTP_GET, serverRestoreFilters); + // WiFi API + server.on(F("/wifi/list"), HTTP_ANY, serverWiFiList); + server.on("/wifi/wps", HTTP_ANY, serverWiFiWPS); + server.on("/wifi/connect", HTTP_ANY, serverWiFiConnect); + server.on("/wifi/ap", HTTP_ANY, serverWiFiAP); + server.on("/wifi/rst", HTTP_ANY, serverWiFiReset); + + server.begin(); // Webserver for the site +} + +/** + * @brief + * + */ +void serverHome() +{ + // Serial.println("sending web page"); + if (ESP.getFreeHeap() > 10000) { + server.sendHeader(F("Content-Encoding"), "gzip"); + server.send(200, mimeTextHtml, webui_html, sizeof(webui_html)); + } +} + +/** + * @brief + * + */ +void serverSC() +{ + if (ESP.getFreeHeap() > 10000) { + if (server.args() > 0) { + String p = server.arg(0); + // Serial.println(p->name()); + serialCommand = p.charAt(0); + + // hack, problem with '+' command received via url param + if (serialCommand == ' ') { + serialCommand = '+'; + } + } + server.send(200); // reply + } +} + +/** + * @brief + * + */ +void serverUC() +{ + if (ESP.getFreeHeap() > 10000) { + if (server.args() > 0) { + String p = server.arg(0); + // Serial.println(p->name()); + userCommand = p.charAt(0); + } + server.send(200); // reply + } +} + +/** + * @brief + * + */ +void serverSlots() +{ + if (ESP.getFreeHeap() > 10000) { + SlotMetaArray slotsObject; + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); + + if (!slotsBinaryFileRead) { + File slotsBinaryFileWrite = LittleFS.open(SLOTS_FILE, "w"); + for (int i = 0; i < SLOTS_TOTAL; i++) { + slotsObject.slot[i].slot = i; + slotsObject.slot[i].presetID = 0; + slotsObject.slot[i].scanlines = 0; + slotsObject.slot[i].scanlinesStrength = 0; + slotsObject.slot[i].wantVdsLineFilter = false; + slotsObject.slot[i].wantStepResponse = true; + slotsObject.slot[i].wantPeaking = true; + char emptySlotName[25] = "Empty "; + strncpy(slotsObject.slot[i].name, emptySlotName, 25); + } + slotsBinaryFileWrite.write((byte *)&slotsObject, sizeof(slotsObject)); + } + + server.streamFile(slotsBinaryFileRead, String(mimeOctetStream)); + + slotsBinaryFileRead.close(); + } +} + +/** + * @brief + * + */ +void serverSlotSet() +{ + bool result = false; + + if (ESP.getFreeHeap() > 10000) { + if (server.args() > 0) { + String slotParamValue = server.arg(0); + char slotValue[2]; + slotParamValue.toCharArray(slotValue, sizeof(slotValue)); + uopt->presetSlot = (uint8_t)slotValue[0]; + uopt->presetPreference = OutputCustomized; + saveUserPrefs(); + result = true; + } + } + + server.send(200, mimeAppJson, result ? "true" : "false"); +} + +/** + * @brief + * + */ +void serverSlotSave() +{ + bool result = false; + + if (ESP.getFreeHeap() > 10000) { + if (server.args() > 0) { + SlotMetaArray slotsObject; + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); + + if (slotsBinaryFileRead) { + slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFileRead.close(); + } else { + File slotsBinaryFileWrite = LittleFS.open(SLOTS_FILE, "w"); + + for (int i = 0; i < SLOTS_TOTAL; i++) { + slotsObject.slot[i].slot = i; + slotsObject.slot[i].presetID = 0; + slotsObject.slot[i].scanlines = 0; + slotsObject.slot[i].scanlinesStrength = 0; + slotsObject.slot[i].wantVdsLineFilter = false; + slotsObject.slot[i].wantStepResponse = true; + slotsObject.slot[i].wantPeaking = true; + char emptySlotName[25] = "Empty "; + strncpy(slotsObject.slot[i].name, emptySlotName, 25); + } + + slotsBinaryFileWrite.write((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFileWrite.close(); + } + + // index param + String slotIndexString = server.arg(0); + uint8_t slotIndex = lowByte(slotIndexString.toInt()); + if (slotIndex >= SLOTS_TOTAL) { + goto fail; + } + + // name param + String slotName = server.arg(1); + + char emptySlotName[25] = " "; + strncpy(slotsObject.slot[slotIndex].name, emptySlotName, 25); + + slotsObject.slot[slotIndex].slot = slotIndex; + slotName.toCharArray(slotsObject.slot[slotIndex].name, sizeof(slotsObject.slot[slotIndex].name)); + slotsObject.slot[slotIndex].presetID = rto->presetID; + slotsObject.slot[slotIndex].scanlines = uopt->wantScanlines; + slotsObject.slot[slotIndex].scanlinesStrength = uopt->scanlineStrength; + slotsObject.slot[slotIndex].wantVdsLineFilter = uopt->wantVdsLineFilter; + slotsObject.slot[slotIndex].wantStepResponse = uopt->wantStepResponse; + slotsObject.slot[slotIndex].wantPeaking = uopt->wantPeaking; + + File slotsBinaryOutputFile = LittleFS.open(SLOTS_FILE, "w"); + slotsBinaryOutputFile.write((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryOutputFile.close(); + + result = true; + } + } + +fail: + server.send(200, mimeAppJson, result ? "true" : "false"); +} + +/** + * @brief Remove slot request + * + */ +void serverSlotRemove() +{ + bool result = false; + char param = server.arg(0).charAt(0); + if (server.args() > 0) { + if (param == '0') { + LOG(F("Wait...")); + result = true; + } else { + Ascii8 slot = uopt->presetSlot; + Ascii8 nextSlot; + auto currentSlot = slotIndexMap.indexOf(slot); + + SlotMetaArray slotsObject; + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); + slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFileRead.close(); + String slotName = slotsObject.slot[currentSlot].name; + + // remove preset files + LittleFS.remove("/preset_ntsc." + String((char)slot)); + LittleFS.remove("/preset_pal." + String((char)slot)); + LittleFS.remove("/preset_ntsc_480p." + String((char)slot)); + LittleFS.remove("/preset_pal_576p." + String((char)slot)); + LittleFS.remove("/preset_ntsc_720p." + String((char)slot)); + LittleFS.remove("/preset_ntsc_1080p." + String((char)slot)); + LittleFS.remove("/preset_medium_res." + String((char)slot)); + LittleFS.remove("/preset_vga_upscale." + String((char)slot)); + LittleFS.remove("/preset_unknown." + String((char)slot)); + + uint8_t loopCount = 0; + uint8_t flag = 1; + while (flag != 0) { + slot = slotIndexMap[currentSlot + loopCount]; + nextSlot = slotIndexMap[currentSlot + loopCount + 1]; + flag = 0; + flag += LittleFS.rename("/preset_ntsc." + String((char)(nextSlot)), "/preset_ntsc." + String((char)slot)); + flag += LittleFS.rename("/preset_pal." + String((char)(nextSlot)), "/preset_pal." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc_480p." + String((char)(nextSlot)), "/preset_ntsc_480p." + String((char)slot)); + flag += LittleFS.rename("/preset_pal_576p." + String((char)(nextSlot)), "/preset_pal_576p." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc_720p." + String((char)(nextSlot)), "/preset_ntsc_720p." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc_1080p." + String((char)(nextSlot)), "/preset_ntsc_1080p." + String((char)slot)); + flag += LittleFS.rename("/preset_medium_res." + String((char)(nextSlot)), "/preset_medium_res." + String((char)slot)); + flag += LittleFS.rename("/preset_vga_upscale." + String((char)(nextSlot)), "/preset_vga_upscale." + String((char)slot)); + flag += LittleFS.rename("/preset_unknown." + String((char)(nextSlot)), "/preset_unknown." + String((char)slot)); + + slotsObject.slot[currentSlot + loopCount].slot = slotsObject.slot[currentSlot + loopCount + 1].slot; + slotsObject.slot[currentSlot + loopCount].presetID = slotsObject.slot[currentSlot + loopCount + 1].presetID; + slotsObject.slot[currentSlot + loopCount].scanlines = slotsObject.slot[currentSlot + loopCount + 1].scanlines; + slotsObject.slot[currentSlot + loopCount].scanlinesStrength = slotsObject.slot[currentSlot + loopCount + 1].scanlinesStrength; + slotsObject.slot[currentSlot + loopCount].wantVdsLineFilter = slotsObject.slot[currentSlot + loopCount + 1].wantVdsLineFilter; + slotsObject.slot[currentSlot + loopCount].wantStepResponse = slotsObject.slot[currentSlot + loopCount + 1].wantStepResponse; + slotsObject.slot[currentSlot + loopCount].wantPeaking = slotsObject.slot[currentSlot + loopCount + 1].wantPeaking; + // slotsObject.slot[currentSlot + loopCount].name = slotsObject.slot[currentSlot + loopCount + 1].name; + strncpy(slotsObject.slot[currentSlot + loopCount].name, slotsObject.slot[currentSlot + loopCount + 1].name, 25); + loopCount++; + } + + File slotsBinaryFileWrite = LittleFS.open(SLOTS_FILE, "w"); + slotsBinaryFileWrite.write((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFileWrite.close(); + LOGF("Preset \"%s\" removed\n", slotName.c_str()); + result = true; + } + } + + // fail: + server.send(200, mimeAppJson, result ? "true" : "false"); +} + +/** + * @brief + * + */ +void serverFsUploadResponder() +{ + server.send(200, mimeAppJson, "true"); +} + +/** + * @brief + * + */ +void serverFsUploadHandler() +{ + HTTPUpload &upload = server.upload(); + static fs::File _tempFile; + static bool err; + if (upload.status == UPLOAD_FILE_START) { + WiFiUDP::stopAll(); + _tempFile = LittleFS.open("/" + upload.filename, "w"); + err = false; + } else if (upload.status == UPLOAD_FILE_WRITE && upload.contentLength != 0 && !err) { + if (_tempFile.write(upload.buf, upload.contentLength) != upload.contentLength) { + err = true; + LOGN(F("upload file write faled")); + } else { + LOG(F(".")); + } + } else if (upload.status == UPLOAD_FILE_END && !err) { + _tempFile.close(); + LOGN(F("upload file complete")); + err = false; + } else if (upload.status == UPLOAD_FILE_ABORTED) { + err = false; + _tempFile.close(); + LOGN(F("upload file aborted")); + } +} + +/** + * @brief + * + */ +void serverFsDownloadHandler() +{ + if (ESP.getFreeHeap() > 10000) { + if (server.args() > 0) { + String _fn = server.arg(0); + if (_fn.length() != 0) { + fs::File _f = LittleFS.open(_fn, "r"); + if (_f) { + server.streamFile(_f, mimeOctetStream); + _f.close(); + goto fs_dl_hanle_pass; + } + } + } + } + server.send(200, mimeAppJson, "false"); +fs_dl_hanle_pass: + return; +} + +/** + * @brief + * + */ +void serverFsDir() +{ + if (ESP.getFreeHeap() > 10000) { + fs::Dir dir = LittleFS.openDir("/"); + String output = "["; + + while (dir.next()) { + output += "\""; + output += dir.fileName(); + output += "\","; + delay(1); // wifi stack + } + + output += "]"; + + output.replace(",]", "]"); + + server.send(200, mimeAppJson, output); + return; + } + server.send(200, mimeAppJson, "false"); +} + +/** + * @brief + * + */ +void serverFsFormat() +{ + server.send(200, mimeAppJson, LittleFS.format() ? "true" : "false"); +} + +/** + * @brief + * + */ +void serverWiFiStatus() +{ + WiFiMode_t wifiMode = WiFi.getMode(); + server.send(200, mimeAppJson, wifiMode == WIFI_AP ? "{\"mode\":\"ap\"}" : "{\"mode\":\"sta\",\"ssid\":\"" + WiFi.SSID() + "\"}"); +} + +/** + * @brief + * + */ +void serverRestoreFilters() +{ + SlotMetaArray slotsObject; + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); + bool result = false; + if (slotsBinaryFileRead) { + slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFileRead.close(); + auto currentSlot = slotIndexMap.indexOf(uopt->presetSlot); + if (currentSlot == -1) { + goto fail; + } + + uopt->wantScanlines = slotsObject.slot[currentSlot].scanlines; + + LOG(F("slot: ")); + LOG(uopt->presetSlot); + LOG(F("scanlines: ")); + if (uopt->wantScanlines) { + LOG(F("on (Line Filter recommended)")); + } else { + disableScanlines(); + LOG(F("off")); + } + saveUserPrefs(); + + uopt->scanlineStrength = slotsObject.slot[currentSlot].scanlinesStrength; + uopt->wantVdsLineFilter = slotsObject.slot[currentSlot].wantVdsLineFilter; + uopt->wantStepResponse = slotsObject.slot[currentSlot].wantStepResponse; + uopt->wantPeaking = slotsObject.slot[currentSlot].wantPeaking; + result = true; + } + +fail: + server.send(200, mimeAppJson, result ? "true" : "false"); +} + +/** + * @brief + * + */ +void serverWiFiList() +{ + String s; + uint8_t cntr = 0; + uint8_t i = 0; + int8_t n = WiFi.scanNetworks(); + if (n == 0 || n == -2) + n = WiFi.scanNetworks(); + else { + while (n == -1) { + n = WiFi.scanComplete(); + WDT_FEED(); + } + } + + // TODO: fuzzy logic + // build array of indices + int ix[n]; + for (i = 0; i < n; i++) + ix[i] = i; + + // sort by signal strength + for (i = 0; i < n; i++) { + for (int j = 1; j < n - i; j++) { + if (WiFi.RSSI(ix[j]) > WiFi.RSSI(ix[j - 1])) { + std::swap(ix[j], ix[j - 1]); + } + } + } + // remove duplicates + for (i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + if (WiFi.SSID(ix[i]).equals(WiFi.SSID(ix[j])) + && WiFi.encryptionType(ix[i]) == WiFi.encryptionType(ix[j])) + ix[j] = -1; + } + } + // TODO: END + server.chunkedResponseModeStart(200, mimeTextHtml); + while (cntr < n || ix[i] != -1) { // check s.length to limit memory usage + s = String(i ? "\n" : "") + ((constrain(WiFi.RSSI(ix[i]), -100, -50) + 100) * 2) + + "," + ((WiFi.encryptionType(ix[i]) == ENC_TYPE_NONE) ? 0 : 1) + "," + + WiFi.SSID(ix[i]); + server.sendContent(s.c_str()); + cntr++; + } + server.chunkedResponseFinalize(); +} + +void serverWiFiWPS() +{ + if (WiFi.status() != WL_CONNECTED) { + WiFi.disconnect(); + WiFi.mode(WIFI_STA); + WiFi.beginWPSConfig(); + delay(100); + wifiStartStaMode("", ""); + } + server.send(200, mimeTextHtml, FPSTR("attempting WPS")); +} + +// void serverWiFiConnect() +// { +// String ssid = server.arg("n"); +// String pwd = server.arg("p"); +// if (ssid.length() != 0) { // could be open +// wifiStartStaMode(ssid, pwd); +// server.send(200, mimeTextHtml, PSTR("connecting...")); +// } else +// server.send(406, mimeTextHtml, PSTR("empty ssid...")); +// } + +/** + * @brief + * + */ +void serverWiFiConnect() +{ + server.send(200, mimeAppJson, "true"); + String ssid = server.arg(FPSTR("n")); + String pwd = server.arg(FPSTR("p")); + + if (ssid.length()) { + if (pwd.length()) { + // false = only save credentials, don't connect + WiFi.begin(ssid.c_str(), pwd.c_str()); + } else { + WiFi.begin(ssid.c_str(), NULL); + } + } else { + WiFi.begin(); + } + + userCommand = 'u'; // next loop, set wifi station mode and restart device +} + +void serverWiFiAP() +{ + wifiStartApMode(); + String msg = String(F("access point: ")); + msg += ap_ssid; + server.send(200, mimeTextHtml, msg.c_str()); +} + +void serverWiFiReset() +{ + server.send(200, mimeTextHtml, PSTR("Rebooting...")); + delay(100); + ESP.restart(); +} \ No newline at end of file diff --git a/server.h b/server.h new file mode 100644 index 00000000..df374cc4 --- /dev/null +++ b/server.h @@ -0,0 +1,60 @@ +/* +##################################################################################### +# File: server.h # +# File Created: Friday, 19th April 2024 3:11:47 pm # +# Author: Sergey Ko # +# Last Modified: Thursday, 25th April 2024 3:50:47 pm # +# Modified By: Sergey Ko # +##################################################################################### +# CHANGELOG: # +##################################################################################### +*/ + +#ifndef _ESPWSERVER_H_ +#define _ESPWSERVER_H_ + +#include +#include +#include "webui_html.h" +#include "options.h" +#include "slot.h" +#include "serial.h" +#include "wifiman.h" + +extern ESP8266WebServer server; +extern char serialCommand; +extern char userCommand; +extern struct userOptions * uopt; +extern struct runTimeOptions *rto; + +extern void saveUserPrefs(); +extern void disableScanlines(); + +String slotIndexMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:,"; +const char mimeTextHtml[] PROGMEM = "text/html"; +const char mimeOctetStream[] PROGMEM = "application/octet-stream"; +const char mimeAppJson[] PROGMEM = "application/json"; + +void serverInit(); +void serverHome(); +void serverSC(); +void serverUC(); +// void serverWiFiConnect(); +void serverSlots(); +void serverSlotSet(); +void serverSlotSave(); +void serverSlotRemove(); +void serverFsUploadResponder(); +void serverFsUploadHandler(); +void serverFsDownloadHandler(); +void serverFsDir(); +void serverFsFormat(); +void serverWiFiStatus(); +void serverRestoreFilters(); +void serverWiFiList(); +void serverWiFiWPS(); +void serverWiFiConnect(); +void serverWiFiAP(); +void serverWiFiReset(); + +#endif // _ESPWSERVER_H_ \ No newline at end of file diff --git a/slot.h b/slot.h index 7550be57..d3737655 100644 --- a/slot.h +++ b/slot.h @@ -1,4 +1,5 @@ #ifndef _SLOT_H_ +#define _SLOT_H_ // SLOTS #define SLOTS_FILE "/slots.bin" // the file where to store slots metadata #define SLOTS_TOTAL 72 // max number of slots diff --git a/src/WebSockets.h b/src/WebSockets.h index d0813d30..2cba0106 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -29,7 +29,7 @@ #include #define bit(b) (1UL << (b)) // Taken directly from Arduino.h #else -#include +#include #include #endif diff --git a/PersWiFiManager.cpp b/tmp/PersWiFiManager.cpp similarity index 100% rename from PersWiFiManager.cpp rename to tmp/PersWiFiManager.cpp diff --git a/PersWiFiManager.h b/tmp/PersWiFiManager.h similarity index 100% rename from PersWiFiManager.h rename to tmp/PersWiFiManager.h diff --git a/gbs-control.ino b/tmp/gbs-control.ino similarity index 98% rename from gbs-control.ino rename to tmp/gbs-control.ino index 2134cb2c..59e13107 100644 --- a/gbs-control.ino +++ b/tmp/gbs-control.ino @@ -28,7 +28,7 @@ static inline void writeBytes(uint8_t slaveRegister, uint8_t *values, uint8_t numValues); -const uint8_t *loadPresetFromSPIFFS(byte forVideoMode); +const uint8_t *loadPresetFromLFS(byte forVideoMode); SSD1306Wire display(0x3c, D2, D1); //inits I2C address & pins for OLED const int pin_clk = 14; //D5 = GPIO14 (input of one direction for encoder) @@ -68,7 +68,7 @@ volatile int oled_sub_pointer = 0; // https://github.com/me-no-dev/ESPAsyncWebServer #include #include -#include "FS.h" +#include #include #include #include // mDNS library for finding gbscontrol.local on the local network @@ -3216,7 +3216,7 @@ void doPostPresetLoadSteps() if (uopt->enableAutoGain) { if (uopt->presetPreference == OutputCustomized) { // Loaded custom preset, we want to keep newly loaded gain. Save - // gain written by loadPresetFromSPIFFS -> writeProgramArrayNew. + // gain written by loadPresetFromLFS -> writeProgramArrayNew. adco->r_gain = GBS::ADC_RGCTRL::read(); adco->g_gain = GBS::ADC_GGCTRL::read(); adco->b_gain = GBS::ADC_BGCTRL::read(); @@ -4192,7 +4192,7 @@ void applyPresets(uint8_t result) applyPresets(): - If uopt->presetPreference == OutputCustomized (yes): - - loadPresetFromSPIFFS() + - loadPresetFromLFS() - All custom presets are saved with GBS_PRESET_CUSTOM = 1. - writeProgramArrayNew() - GBS_PRESET_ID = output resolution ID @@ -4244,7 +4244,7 @@ void applyPresets(uint8_t result) } #if defined(ESP8266) else if (uopt->presetPreference == OutputCustomized) { - const uint8_t *preset = loadPresetFromSPIFFS(result); + const uint8_t *preset = loadPresetFromLFS(result); writeProgramArrayNew(preset, false); if (applySavedBypassPreset()) { return; @@ -4279,7 +4279,7 @@ void applyPresets(uint8_t result) } #if defined(ESP8266) else if (uopt->presetPreference == OutputCustomized) { - const uint8_t *preset = loadPresetFromSPIFFS(result); + const uint8_t *preset = loadPresetFromLFS(result); writeProgramArrayNew(preset, false); if (applySavedBypassPreset()) { return; @@ -7198,7 +7198,7 @@ void setup() pinMode(pin_data, INPUT_PULLUP); pinMode(pin_switch, INPUT_PULLUP); -#if USE_NEW_OLED_MENU +#if USE_NEW_OLED_MENU attachInterrupt(digitalPinToInterrupt(pin_clk), isrRotaryEncoderRotateForNewMenu, FALLING); attachInterrupt(digitalPinToInterrupt(pin_switch), isrRotaryEncoderPushForNewMenu, FALLING); initOLEDMenu(); @@ -7320,11 +7320,11 @@ void setup() GBS::PLLAD_PDZ::write(0); // AD PLL off // file system (web page, custom presets, ect) - if (!SPIFFS.begin()) { - SerialM.println(F("SPIFFS mount failed! ((1M SPIFFS) selected?)")); + if (!LittleFS.begin()) { + SerialM.println(F("FS mount failed! ((1M FS) selected?)")); } else { // load user preferences file - File f = SPIFFS.open("/preferencesv2.txt", "r"); + File f = LittleFS.open("/preferencesv2.txt", "r"); if (!f) { SerialM.println(F("no preferences file yet, create new")); loadDefaultUserOptions(); @@ -8967,7 +8967,7 @@ void handleType2Command(char argument) saveUserPrefs(); } break; case '4': // save custom preset - savePresetToSPIFFS(); + savePresetToFS(); uopt->presetPreference = OutputCustomized; // custom saveUserPrefs(); break; @@ -9012,7 +9012,7 @@ void handleType2Command(char argument) break; case 'e': // print files on spiffs { - Dir dir = SPIFFS.openDir("/"); + Dir dir = LittleFS.openDir("/"); while (dir.next()) { SerialM.print(dir.fileName()); SerialM.print(" "); @@ -9020,7 +9020,7 @@ void handleType2Command(char argument) delay(1); // wifi stack } //// - File f = SPIFFS.open("/preferencesv2.txt", "r"); + File f = LittleFS.open("/preferencesv2.txt", "r"); if (!f) { SerialM.println(F("failed opening preferences file")); } else { @@ -9415,7 +9415,7 @@ void handleType2Command(char argument) break; case 'O': // info - if (GBS::ADC_INPUT_SEL::read() == 1) + if (GBS::ADC_INPUT_SEL::read() == 1) { SerialM.println("RGB reg"); SerialM.println(F("------------ ")); @@ -9431,8 +9431,8 @@ void handleType2Command(char argument) SerialM.println(GBS::VDS_USIN_GAIN::read(), DEC); SerialM.print(F("UCOS_GAIN: ")); SerialM.println(GBS::VDS_UCOS_GAIN::read(), DEC); - } - else + } + else { SerialM.println("YPbPr reg"); SerialM.println(F("------------ ")); @@ -9465,7 +9465,7 @@ void handleType2Command(char argument) GBS::ADC_BOFCTRL::write(adco->b_off); SerialM.println("RGB:defauit"); } - else + else { GBS::VDS_Y_GAIN::write(128); GBS::VDS_UCOS_GAIN::write(28); @@ -9591,10 +9591,10 @@ void startWebserver() server.on("/bin/slots.bin", HTTP_GET, [](AsyncWebServerRequest *request) { if (ESP.getFreeHeap() > 10000) { SlotMetaArray slotsObject; - File slotsBinaryFileRead = SPIFFS.open(SLOTS_FILE, "r"); + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); if (!slotsBinaryFileRead) { - File slotsBinaryFileWrite = SPIFFS.open(SLOTS_FILE, "w"); + File slotsBinaryFileWrite = LittleFS.open(SLOTS_FILE, "w"); for (int i = 0; i < SLOTS_TOTAL; i++) { slotsObject.slot[i].slot = i; slotsObject.slot[i].presetID = 0; @@ -9612,7 +9612,7 @@ void startWebserver() slotsBinaryFileRead.close(); } - request->send(SPIFFS, "/slots.bin", "application/octet-stream"); + request->send(LittleFS, "/slots.bin", "application/octet-stream"); } }); @@ -9645,13 +9645,13 @@ void startWebserver() if (params > 0) { SlotMetaArray slotsObject; - File slotsBinaryFileRead = SPIFFS.open(SLOTS_FILE, "r"); + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); if (slotsBinaryFileRead) { slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFileRead.close(); } else { - File slotsBinaryFileWrite = SPIFFS.open(SLOTS_FILE, "w"); + File slotsBinaryFileWrite = LittleFS.open(SLOTS_FILE, "w"); for (int i = 0; i < SLOTS_TOTAL; i++) { slotsObject.slot[i].slot = i; @@ -9693,7 +9693,7 @@ void startWebserver() slotsObject.slot[slotIndex].wantStepResponse = uopt->wantStepResponse; slotsObject.slot[slotIndex].wantPeaking = uopt->wantPeaking; - File slotsBinaryOutputFile = SPIFFS.open(SLOTS_FILE, "w"); + File slotsBinaryOutputFile = LittleFS.open(SLOTS_FILE, "w"); slotsBinaryOutputFile.write((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryOutputFile.close(); @@ -9724,22 +9724,22 @@ void startWebserver() auto currentSlot = slotIndexMap.indexOf(slot); SlotMetaArray slotsObject; - File slotsBinaryFileRead = SPIFFS.open(SLOTS_FILE, "r"); + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFileRead.close(); String slotName = slotsObject.slot[currentSlot].name; // remove preset files - SPIFFS.remove("/preset_ntsc." + String((char)slot)); - SPIFFS.remove("/preset_pal." + String((char)slot)); - SPIFFS.remove("/preset_ntsc_480p." + String((char)slot)); - SPIFFS.remove("/preset_pal_576p." + String((char)slot)); - SPIFFS.remove("/preset_ntsc_720p." + String((char)slot)); - SPIFFS.remove("/preset_ntsc_1080p." + String((char)slot)); - SPIFFS.remove("/preset_medium_res." + String((char)slot)); - SPIFFS.remove("/preset_vga_upscale." + String((char)slot)); - SPIFFS.remove("/preset_unknown." + String((char)slot)); - + LittleFS.remove("/preset_ntsc." + String((char)slot)); + LittleFS.remove("/preset_pal." + String((char)slot)); + LittleFS.remove("/preset_ntsc_480p." + String((char)slot)); + LittleFS.remove("/preset_pal_576p." + String((char)slot)); + LittleFS.remove("/preset_ntsc_720p." + String((char)slot)); + LittleFS.remove("/preset_ntsc_1080p." + String((char)slot)); + LittleFS.remove("/preset_medium_res." + String((char)slot)); + LittleFS.remove("/preset_vga_upscale." + String((char)slot)); + LittleFS.remove("/preset_unknown." + String((char)slot)); + uint8_t loopCount = 0; uint8_t flag = 1; while (flag != 0) @@ -9747,15 +9747,15 @@ void startWebserver() slot = slotIndexMap[currentSlot + loopCount]; nextSlot = slotIndexMap[currentSlot + loopCount + 1]; flag = 0; - flag += SPIFFS.rename("/preset_ntsc." + String((char)(nextSlot)), "/preset_ntsc." + String((char)slot)); - flag += SPIFFS.rename("/preset_pal." + String((char)(nextSlot)), "/preset_pal." + String((char)slot)); - flag += SPIFFS.rename("/preset_ntsc_480p." + String((char)(nextSlot)), "/preset_ntsc_480p." + String((char)slot)); - flag += SPIFFS.rename("/preset_pal_576p." + String((char)(nextSlot)), "/preset_pal_576p." + String((char)slot)); - flag += SPIFFS.rename("/preset_ntsc_720p." + String((char)(nextSlot)), "/preset_ntsc_720p." + String((char)slot)); - flag += SPIFFS.rename("/preset_ntsc_1080p." + String((char)(nextSlot)), "/preset_ntsc_1080p." + String((char)slot)); - flag += SPIFFS.rename("/preset_medium_res." + String((char)(nextSlot)), "/preset_medium_res." + String((char)slot)); - flag += SPIFFS.rename("/preset_vga_upscale." + String((char)(nextSlot)), "/preset_vga_upscale." + String((char)slot)); - flag += SPIFFS.rename("/preset_unknown." + String((char)(nextSlot)), "/preset_unknown." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc." + String((char)(nextSlot)), "/preset_ntsc." + String((char)slot)); + flag += LittleFS.rename("/preset_pal." + String((char)(nextSlot)), "/preset_pal." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc_480p." + String((char)(nextSlot)), "/preset_ntsc_480p." + String((char)slot)); + flag += LittleFS.rename("/preset_pal_576p." + String((char)(nextSlot)), "/preset_pal_576p." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc_720p." + String((char)(nextSlot)), "/preset_ntsc_720p." + String((char)slot)); + flag += LittleFS.rename("/preset_ntsc_1080p." + String((char)(nextSlot)), "/preset_ntsc_1080p." + String((char)slot)); + flag += LittleFS.rename("/preset_medium_res." + String((char)(nextSlot)), "/preset_medium_res." + String((char)slot)); + flag += LittleFS.rename("/preset_vga_upscale." + String((char)(nextSlot)), "/preset_vga_upscale." + String((char)slot)); + flag += LittleFS.rename("/preset_unknown." + String((char)(nextSlot)), "/preset_unknown." + String((char)slot)); slotsObject.slot[currentSlot + loopCount].slot = slotsObject.slot[currentSlot + loopCount + 1].slot; slotsObject.slot[currentSlot + loopCount].presetID = slotsObject.slot[currentSlot + loopCount + 1].presetID; @@ -9769,14 +9769,14 @@ void startWebserver() loopCount++; } - File slotsBinaryFileWrite = SPIFFS.open(SLOTS_FILE, "w"); + File slotsBinaryFileWrite = LittleFS.open(SLOTS_FILE, "w"); slotsBinaryFileWrite.write((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFileWrite.close(); SerialM.println("Preset \"" + slotName + "\" removed"); result = true; } } - + fail: request->send(200, "application/json", result ? "true" : "false"); }); @@ -9790,7 +9790,7 @@ void startWebserver() [](AsyncWebServerRequest *request) { request->send(200, "application/json", "true"); }, [](AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { if (!index) { - request->_tempFile = SPIFFS.open("/" + filename, "w"); + request->_tempFile = LittleFS.open("/" + filename, "w"); } if (len) { request->_tempFile.write(data, len); @@ -9804,7 +9804,7 @@ void startWebserver() if (ESP.getFreeHeap() > 10000) { int params = request->params(); if (params > 0) { - request->send(SPIFFS, request->getParam(0)->value(), String(), true); + request->send(LittleFS, request->getParam(0)->value(), String(), true); } else { request->send(200, "application/json", "false"); } @@ -9815,7 +9815,7 @@ void startWebserver() server.on("/spiffs/dir", HTTP_GET, [](AsyncWebServerRequest *request) { if (ESP.getFreeHeap() > 10000) { - Dir dir = SPIFFS.openDir("/"); + Dir dir = LittleFS.openDir("/"); String output = "["; while (dir.next()) { @@ -9836,7 +9836,7 @@ void startWebserver() }); server.on("/spiffs/format", HTTP_GET, [](AsyncWebServerRequest *request) { - request->send(200, "application/json", SPIFFS.format() ? "true" : "false"); + request->send(200, "application/json", LittleFS.format() ? "true" : "false"); }); server.on("/wifi/status", HTTP_GET, [](AsyncWebServerRequest *request) { @@ -9846,7 +9846,7 @@ void startWebserver() server.on("/gbs/restore-filters", HTTP_GET, [](AsyncWebServerRequest *request) { SlotMetaArray slotsObject; - File slotsBinaryFileRead = SPIFFS.open(SLOTS_FILE, "r"); + File slotsBinaryFileRead = LittleFS.open(SLOTS_FILE, "r"); bool result = false; if (slotsBinaryFileRead) { slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); @@ -9940,8 +9940,8 @@ void initUpdateOTA() else // U_SPIFFS type = "filesystem"; - // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end() - SPIFFS.end(); + // NOTE: if updating LittleFS this would be the place to unmount LittleFS using LittleFS.end() + LittleFS.end(); SerialM.println("Start updating " + type); }); ArduinoOTA.onEnd([]() { @@ -9975,14 +9975,14 @@ void StrClear(char *str, uint16_t length) } } -const uint8_t *loadPresetFromSPIFFS(byte forVideoMode) +const uint8_t *loadPresetFromLFS(byte forVideoMode) { static uint8_t preset[432]; String s = ""; Ascii8 slot = 0; File f; - f = SPIFFS.open("/preferencesv2.txt", "r"); + f = LittleFS.open("/preferencesv2.txt", "r"); if (f) { SerialM.println(F("preferencesv2.txt opened")); uint8_t result[3]; @@ -10006,23 +10006,23 @@ const uint8_t *loadPresetFromSPIFFS(byte forVideoMode) SerialM.print(": "); if (forVideoMode == 1) { - f = SPIFFS.open("/preset_ntsc." + String((char)slot), "r"); + f = LittleFS.open("/preset_ntsc." + String((char)slot), "r"); } else if (forVideoMode == 2) { - f = SPIFFS.open("/preset_pal." + String((char)slot), "r"); + f = LittleFS.open("/preset_pal." + String((char)slot), "r"); } else if (forVideoMode == 3) { - f = SPIFFS.open("/preset_ntsc_480p." + String((char)slot), "r"); + f = LittleFS.open("/preset_ntsc_480p." + String((char)slot), "r"); } else if (forVideoMode == 4) { - f = SPIFFS.open("/preset_pal_576p." + String((char)slot), "r"); + f = LittleFS.open("/preset_pal_576p." + String((char)slot), "r"); } else if (forVideoMode == 5) { - f = SPIFFS.open("/preset_ntsc_720p." + String((char)slot), "r"); + f = LittleFS.open("/preset_ntsc_720p." + String((char)slot), "r"); } else if (forVideoMode == 6) { - f = SPIFFS.open("/preset_ntsc_1080p." + String((char)slot), "r"); + f = LittleFS.open("/preset_ntsc_1080p." + String((char)slot), "r"); } else if (forVideoMode == 8) { - f = SPIFFS.open("/preset_medium_res." + String((char)slot), "r"); + f = LittleFS.open("/preset_medium_res." + String((char)slot), "r"); } else if (forVideoMode == 14) { - f = SPIFFS.open("/preset_vga_upscale." + String((char)slot), "r"); + f = LittleFS.open("/preset_vga_upscale." + String((char)slot), "r"); } else if (forVideoMode == 0) { - f = SPIFFS.open("/preset_unknown." + String((char)slot), "r"); + f = LittleFS.open("/preset_unknown." + String((char)slot), "r"); } if (!f) { @@ -10049,14 +10049,14 @@ const uint8_t *loadPresetFromSPIFFS(byte forVideoMode) return preset; } -void savePresetToSPIFFS() +void savePresetToFS() { uint8_t readout = 0; File f; Ascii8 slot = 0; // first figure out if the user has set a preferenced slot - f = SPIFFS.open("/preferencesv2.txt", "r"); + f = LittleFS.open("/preferencesv2.txt", "r"); if (f) { uint8_t result[3]; result[0] = f.read(); // todo: move file cursor manually @@ -10075,23 +10075,23 @@ void savePresetToSPIFFS() SerialM.println(String((char)slot)); if (rto->videoStandardInput == 1) { - f = SPIFFS.open("/preset_ntsc." + String((char)slot), "w"); + f = LittleFS.open("/preset_ntsc." + String((char)slot), "w"); } else if (rto->videoStandardInput == 2) { - f = SPIFFS.open("/preset_pal." + String((char)slot), "w"); + f = LittleFS.open("/preset_pal." + String((char)slot), "w"); } else if (rto->videoStandardInput == 3) { - f = SPIFFS.open("/preset_ntsc_480p." + String((char)slot), "w"); + f = LittleFS.open("/preset_ntsc_480p." + String((char)slot), "w"); } else if (rto->videoStandardInput == 4) { - f = SPIFFS.open("/preset_pal_576p." + String((char)slot), "w"); + f = LittleFS.open("/preset_pal_576p." + String((char)slot), "w"); } else if (rto->videoStandardInput == 5) { - f = SPIFFS.open("/preset_ntsc_720p." + String((char)slot), "w"); + f = LittleFS.open("/preset_ntsc_720p." + String((char)slot), "w"); } else if (rto->videoStandardInput == 6) { - f = SPIFFS.open("/preset_ntsc_1080p." + String((char)slot), "w"); + f = LittleFS.open("/preset_ntsc_1080p." + String((char)slot), "w"); } else if (rto->videoStandardInput == 8) { - f = SPIFFS.open("/preset_medium_res." + String((char)slot), "w"); + f = LittleFS.open("/preset_medium_res." + String((char)slot), "w"); } else if (rto->videoStandardInput == 14) { - f = SPIFFS.open("/preset_vga_upscale." + String((char)slot), "w"); + f = LittleFS.open("/preset_vga_upscale." + String((char)slot), "w"); } else if (rto->videoStandardInput == 0) { - f = SPIFFS.open("/preset_unknown." + String((char)slot), "w"); + f = LittleFS.open("/preset_unknown." + String((char)slot), "w"); } if (!f) { @@ -10168,7 +10168,7 @@ void savePresetToSPIFFS() void saveUserPrefs() { - File f = SPIFFS.open("/preferencesv2.txt", "w"); + File f = LittleFS.open("/preferencesv2.txt", "w"); if (!f) { SerialM.println(F("saveUserPrefs: open file failed")); return; diff --git a/wifiman.cpp b/wifiman.cpp new file mode 100644 index 00000000..a267cce8 --- /dev/null +++ b/wifiman.cpp @@ -0,0 +1,136 @@ +/* +##################################################################################### +# File: wifiman.cpp # +# File Created: Friday, 19th April 2024 2:25:33 pm # +# Author: Sergey Ko # +# Last Modified: Thursday, 25th April 2024 2:29:05 pm # +# Modified By: Sergey Ko # +##################################################################################### +# CHANGELOG: # +##################################################################################### +*/ + + +#include "wifiman.h" + +static time_t _connectCheckTime = 0; +static time_t lastTimePing = 0; + +void wifiEventHandler(System_Event_t *e) +{ + if (e->event == WIFI_EVENT_STAMODE_CONNECTED) { + LOG(F("(WiFi): STA mode connected; IP: ")); + LOGN(WiFi.localIP().toString()); + if (MDNS.begin(device_hostname_partial, WiFi.localIP())) { // MDNS request for gbscontrol.local + //Serial.println("MDNS started"); + MDNS.addService("http", "tcp", 80); // Add service to MDNS-SD + MDNS.announce(); + } + LOGN(st_info_string); + } + else if(e->event == WIFI_EVENT_MODE_CHANGE) + { + if(WiFi.getMode() == WIFI_AP_STA) { + LOGN(F(ap_info_string)); + // add mdns announce here as well? + } + } else if(e->event == WIFI_EVENT_STAMODE_DISCONNECTED) { + _connectCheckTime = millis(); + LOGF("Station disconnected, reason: %ld", event.reason); + } +} + + +/** + * @brief + * + */ +void wifiInit() { + wifi_set_event_handler_cb(wifiEventHandler); + + if (WiFi.SSID().length() == 0) { + // no stored network to connect to > start AP mode right away + wifiStartApMode(); + dnsServer.setErrorReplyCode(DNSReplyCode::NoError); + dnsServer.start((byte)53, "*", WiFi.localIP()); //used for captive portal in AP mode + } else { + wifiStartStaMode(); // first try connecting to stored network, go AP mode after timeout + } +} + +/** + * @brief + * + */ +void wifiDisable() { + //WiFi.disconnect(); // deletes credentials + WiFi.mode(WIFI_OFF); + WiFi.forceSleepBegin(); +} + +/** + * @brief + * + */ +bool wifiStartStaMode(const String & ssid, const String & pass) { + // millis() at this point: typically 65ms + // start web services as early in boot as possible + WiFi.mode(WIFI_STA); + WiFi.hostname(device_hostname_partial); // was _full + WiFi.setSleepMode(WIFI_NONE_SLEEP); + if (ssid.length()) { + if (pass.length()) + WiFi.begin(ssid.c_str(), pass.c_str()); + else + WiFi.begin(ssid.c_str()); + } else { + WiFi.begin(); + } + return (WiFi.status() == WL_CONNECTED); +} + +/** + * @brief + * + */ +void wifiStartApMode() { + wifi_set_event_handler_cb(wifiEventHandler); + // WiFi.disconnect(); + // delay(100); + // IPAddress apIP(192, 168, 4, 1); + WiFi.mode(WIFI_AP_STA); + // WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); + WiFi.softAP(ap_ssid, strlen(ap_password) != 0 ? ap_password : NULL); +} + +/** + * @brief Put this method inside of main loop + * + */ +void wifiLoop(bool instant) { + if(WiFi.getMode() != WIFI_AP_STA + && millis() > (_connectCheckTime + 5000)) { + // check WiFi connection status, switch to AP if not connected + if (WiFi.status() != WL_CONNECTED) { + wifiStartApMode(); + } + _connectCheckTime = millis(); + } + if (rto->webServerEnabled && rto->webServerStarted) { + MDNS.update(); + dnsServer.processNextRequest(); + + if ((millis() - lastTimePing) > 953) { // slightly odd value so not everything happens at once + webSocket.broadcastPing(); + } + if (((millis() - lastTimePing) > 973) || instant) { + if ((webSocket.connectedClients(false) > 0) || instant) { // true = with compliant ping + updateWebSocketData(); + } + lastTimePing = millis(); + } + if (rto->allowUpdatesOTA) { + ArduinoOTA.handle(); + } + } +} \ No newline at end of file diff --git a/wifiman.h b/wifiman.h new file mode 100644 index 00000000..0e8cd2b6 --- /dev/null +++ b/wifiman.h @@ -0,0 +1,68 @@ +/* +##################################################################################### +# File: wifiman.h # +# File Created: Friday, 19th April 2024 2:25:42 pm # +# Author: Sergey Ko # +# Last Modified: Thursday, 25th April 2024 3:01:44 pm # +# Modified By: Sergey Ko # +##################################################################################### +# CHANGELOG: # +##################################################################################### +*/ + +#ifndef _WIFIMAN_H +#define _WIFIMAN_H + +#include +#include +#include +#include +#include "options.h" + +#ifdef THIS_DEVICE_MASTER +const char *ap_ssid = "gbscontrol"; +const char *ap_password = "qqqqqqqq"; +// change device_hostname_full and device_hostname_partial to rename the device +// (allows 2 or more on the same network) +// new: only use _partial throughout, comply to standards +const char *device_hostname_full = "gbscontrol.local"; +const char *device_hostname_partial = "gbscontrol"; // for MDNS +static const char ap_info_string[] PROGMEM = + "(WiFi): AP mode (SSID: gbscontrol, pass 'qqqqqqqq'): Access 'gbscontrol.local' in your browser"; +static const char st_info_string[] PROGMEM = + "(WiFi): Access 'http://gbscontrol:80' or 'http://gbscontrol.local' (or device IP) in your browser"; +#else +const char *ap_ssid = "gbsslave"; +const char *ap_password = "qqqqqqqq"; +const char *device_hostname_full = "gbsslave.local"; +const char *device_hostname_partial = "gbsslave"; // for MDNS +static const char ap_info_string[] PROGMEM = + "(WiFi): AP mode (SSID: gbsslave, pass 'qqqqqqqq'): Access 'gbsslave.local' in your browser"; +static const char st_info_string[] PROGMEM = + "(WiFi): Access 'http://gbsslave:80' or 'http://gbsslave.local' (or device IP) in your browser"; +#endif + +extern DNSServer dnsServer; +extern struct runTimeOptions *rto; +extern void updateWebSocketData(); + +// HOWTO: Rely on the previously implemented logic +// __________ _____________ __________________ yes _____________________ +// | if ssid | -> | connect AP | -> | connect failed? | ----> | fallback to APmode | +// ---------- ------------- ------------------ --------------------- +// ^ _________________ |_____________ +// | | yes v no | +// | no ____________________ _______________ | +// ---- | is now connected? | < -- | continue ops | < -- +// -------------------- --------------- +// +// THE OBJECTIVE: Do not rely on build-in autoreconnect routine, +// use the custom one instead. + +void wifiInit(); +void wifiDisable(); +bool wifiStartStaMode(const String & ssid, const String & pass); +void wifiStartApMode(); +void wifiLoop(bool instant); + +#endif // _WIFIMAN_H \ No newline at end of file From 317dcf1ebd54b210a5c5b488e874b447fb1f3643 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Fri, 26 Apr 2024 00:07:15 -0600 Subject: [PATCH 02/41] interim (ws) --- OLEDMenuImplementation.cpp | 8 +- framesync.h | 54 +- main.cpp | 403 +- options.h | 12 +- platformio.ini | 17 +- public/src/index.ts | 18 +- {src => tmp}/WebSockets.cpp | 0 {src => tmp}/WebSockets.h | 0 {src => tmp}/WebSocketsServer.cpp | 0 {src => tmp}/WebSocketsServer.h | 0 tw.h | 12 +- webui.html | 138 +- webui_html.h | 28391 ++++++++++++++-------------- wifiman.cpp | 251 +- wifiman.h | 34 +- serial.cpp => wserial.cpp | 2 +- serial.h => wserial.h | 28 +- server.cpp => wserver.cpp | 305 +- server.h => wserver.h | 9 +- 19 files changed, 14826 insertions(+), 14856 deletions(-) rename {src => tmp}/WebSockets.cpp (100%) rename {src => tmp}/WebSockets.h (100%) rename {src => tmp}/WebSocketsServer.cpp (100%) rename {src => tmp}/WebSocketsServer.h (100%) rename serial.cpp => wserial.cpp (90%) rename serial.h => wserial.h (84%) rename server.cpp => wserver.cpp (64%) rename server.h => wserver.h (83%) diff --git a/OLEDMenuImplementation.cpp b/OLEDMenuImplementation.cpp index 2a488158..de9bc9fc 100644 --- a/OLEDMenuImplementation.cpp +++ b/OLEDMenuImplementation.cpp @@ -2,12 +2,12 @@ #include #include +#include +#include #include "OLEDMenuImplementation.h" #include "options.h" #include "tv5725.h" #include "slot.h" -#include "src/WebSockets.h" -#include "src/WebSocketsServer.h" #include "fonts.h" #include "OSDManager.h" @@ -145,7 +145,7 @@ bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL if (slotsBinaryFileRead) { slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFileRead.close(); - for (int i; i < SLOTS_TOTAL; ++i) { + for (int i = 0; i < SLOTS_TOTAL; ++i) { const SlotMeta &slot = slotsObject.slot[i]; if (strcmp(EMPTY_SLOT_NAME, slot.name) == 0 || !strlen(slot.name)) { continue; @@ -310,7 +310,7 @@ bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, // shouldn't happen? manager->registerItem(item, 0, IMAGE_ITEM(TEXT_WIFI_DISCONNECTED)); } - } else if (wifiMode == WIFI_AP) { + } else if (wifiMode == WIFI_AP_STA) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_WIFI_CONNECT_TO)); sprintf(ssid, "SSID: %s (%s)", ap_ssid, ap_password); manager->registerItem(item, 0, ssid); diff --git a/framesync.h b/framesync.h index 853e013b..b7c54eca 100644 --- a/framesync.h +++ b/framesync.h @@ -216,12 +216,12 @@ class FrameSyncManager // allow ~4 negative (inPeriod is < outPeriod) clock cycles jitter if ((inPeriod > outPeriod ? inPeriod - outPeriod : outPeriod - inPeriod) <= 4) { /*if (inPeriod >= outPeriod) { - Serial.print("inPeriod >= out: "); - Serial.println(inPeriod - outPeriod); + LOG("inPeriod >= out: "); + LOGN(inPeriod - outPeriod); } else { - Serial.print("inPeriod < out: "); - Serial.println(outPeriod - inPeriod); + LOG("inPeriod < out: "); + LOGN(outPeriod - inPeriod); }*/ bestHtotal = inHtotal; } else { @@ -235,14 +235,14 @@ class FrameSyncManager #ifdef FS_DEBUG if (bestHtotal != inHtotal) { - Serial.print(F(" wants new htotal, oldbest: ")); - Serial.print(inHtotal); - Serial.print(F(" newbest: ")); - Serial.println(bestHtotal); - Serial.print(F(" inPeriod: ")); - Serial.print(inPeriod); - Serial.print(F(" outPeriod: ")); - Serial.println(outPeriod); + LOG(F(" wants new htotal, oldbest: ")); + LOG(inHtotal); + LOG(F(" newbest: ")); + LOGN(bestHtotal); + LOG(F(" inPeriod: ")); + LOG(inPeriod); + LOG(F(" outPeriod: ")); + LOGN(outPeriod); } #endif return true; @@ -254,11 +254,11 @@ class FrameSyncManager static void reset(uint8_t frameTimeLockMethod) { #ifdef FS_DEBUG - Serial.print("FS reset(), with correction: "); + LOG(F("FS reset(), with correction: ")); #endif if (syncLastCorrection != 0) { #ifdef FS_DEBUG - Serial.println("Yes"); + LOGN(F("Yes")); #endif uint16_t vtotal = 0, vsst = 0; VRST_SST::read(vtotal, vsst); @@ -278,7 +278,7 @@ class FrameSyncManager } #ifdef FS_DEBUG else { - Serial.println("No"); + LOGN(F("No")); } #endif fsDebugPrintf("FrameSyncManager::reset(%d)\n", frameTimeLockMethod); @@ -431,7 +431,7 @@ class FrameSyncManager Serial.printf("phase: %7d target: %7d", phase, target); if (correction == syncLastCorrection) { // terminate line if returning early - Serial.println(); + LOGN(); } #endif #ifdef FS_DEBUG_LED @@ -497,8 +497,8 @@ class FrameSyncManager static bool runFrequency() { if (maybeFreqExt_per_videoFps < 0) { - SerialM.printf( - "Error: trying to tune external clock frequency while clock frequency uninitialized!\n"); + LOGN( + "Error: trying to tune external clock frequency while clock frequency uninitialized!"); return true; } @@ -518,7 +518,7 @@ class FrameSyncManager return true; } if (GBS::PLL648_CONTROL_01::read() != 0x75) { - SerialM.printf( + LOGF( "Error: trying to tune external clock frequency while set to internal clock, PLL648_CONTROL_01=%d!\n", GBS::PLL648_CONTROL_01::read()); return true; @@ -554,13 +554,13 @@ class FrameSyncManager // TODO make vsyncPeriodAndPhase() restore TEST_BUS_SEL, not the caller? GBS::TEST_BUS_SEL::write(0x0); if (!ret) { - SerialM.printf("runFrequency(): vsyncPeriodAndPhase failed, retrying...\n"); + LOGN("runFrequency(): vsyncPeriodAndPhase failed, retrying..."); continue; } fpsInput = esp8266_clock_freq / (float)periodInput; if (fpsInput < 47.0f || fpsInput > 86.0f) { - SerialM.printf( + LOGF( "runFrequency(): fpsInput wrong: %f, retrying...\n", fpsInput); continue; @@ -572,13 +572,13 @@ class FrameSyncManager GBS::TEST_BUS_SEL::write(0x0); uint32_t periodInput2 = getPulseTicks(); if (periodInput2 == 0) { - SerialM.printf("runFrequency(): getPulseTicks failed, retrying...\n"); + LOGN("runFrequency(): getPulseTicks failed, retrying..."); continue; } float fpsInput2 = esp8266_clock_freq / (float)periodInput2; if (fpsInput2 < 47.0f || fpsInput2 > 86.0f) { - SerialM.printf( - "runFrequency(): fpsInput2 wrong: %f, retrying...\n", + LOGF( + "runFrequency(): fpsInput2 wrong: %f, retrying...", fpsInput2); continue; } @@ -587,7 +587,7 @@ class FrameSyncManager float diff = fabs(fpsInput2 - fpsInput); float relDiff = diff / std::min(fpsInput, fpsInput2); if (relDiff != relDiff || diff > 0.5f || relDiff > 0.00833f) { - SerialM.printf( + LOGF( "FrameSyncManager::runFrequency() measured inconsistent FPS %f and %f, retrying...\n", fpsInput, fpsInput2); @@ -598,7 +598,7 @@ class FrameSyncManager break; } if (!success) { - SerialM.printf("FrameSyncManager::runFrequency() failed!\n"); + LOGN("FrameSyncManager::runFrequency() failed!"); return false; } @@ -644,7 +644,7 @@ class FrameSyncManager fpsOutput = std::max(fpsOutput, prevFpsOutput * (1 - MAX_FPS_CHANGE)); if (fabs(rawFpsOutput - prevFpsOutput) >= 1.f) { - SerialM.printf( + LOGF( "FPS excursion detected! Measured input FPS %f, previous output FPS %f", fpsInput, prevFpsOutput); } diff --git a/main.cpp b/main.cpp index 0117609f..b24a8edf 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,13 @@ -#include +#include // mDNS library for finding gbscontrol.local on the local network +#include +#include +#include +// #include #include +#include "options.h" +#include "wserial.h" +#include "wifiman.h" + #include "ntsc_240p.h" #include "pal_240p.h" #include "ntsc_720x480.h" @@ -16,16 +24,13 @@ #include "presetDeinterlacerSection.h" #include "presetHdBypassSection.h" #include "ofw_RGBS.h" -#include "options.h" #include "slot.h" -#include "serial.h" #include "tv5725.h" #include "osd.h" #include "SSD1306Wire.h" #include "images.h" -#include "server.h" -#include "wifiman.h" +#include "wserver.h" #define HAVE_BUTTONS 0 #define USE_NEW_OLED_MENU 1 @@ -63,19 +68,6 @@ volatile int oled_main_pointer = 0; // volatile vars change done with ISR volatile int oled_pointer_count = 0; volatile int oled_sub_pointer = 0; #endif -// ESPAsyncTCP and ESPAsyncWebServer libraries by me-no-dev -// download (green "Clone or download" button) and extract to Arduino libraries folder -// Windows: "Documents\Arduino\libraries" or full path: "C:\Users\rama\Documents\Arduino\libraries" -// https://github.com/me-no-dev/ESPAsyncTCP -// https://github.com/me-no-dev/ESPAsyncWebServer -// #include -// #include -#include -#include -#include -#include // mDNS library for finding gbscontrol.local on the local network -#include - // PersWiFiManager library by Ryan Downing // https://github.com/r-downing/PersWiFiManager // included in project root folder to allow modifications within limitations of the Arduino framework @@ -86,8 +78,8 @@ volatile int oled_sub_pointer = 0; // https://github.com/Links2004/arduinoWebSockets // included in src folder to allow header modifications within limitations of the Arduino framework // See 3rdparty/WebSockets for unmodified source and license -#include "src/WebSockets.h" -#include "src/WebSocketsServer.h" +// #include +// #include // Optional: // ESP8266-ping library to aid debugging WiFi issues, install via Arduino library manager @@ -99,6 +91,13 @@ unsigned long pingLastTime; Pinger pinger; // pinger global object to aid debugging WiFi issues #endif +#if defined(ESP8266) +// serial mirror class for websocket logs +SerialMirror SerialM; +#else +#define SerialM Serial +#endif + typedef TV5725 GBS; unsigned long lastVsyncLock = millis(); @@ -198,12 +197,6 @@ struct MenuAttrs }; typedef MenuManager Menu; -/// Video processing mode, loaded into register GBS_PRESET_ID by applyPresets() -/// and read to rto->presetID by doPostPresetLoadSteps(). Shown on web UI. -enum PresetID : uint8_t { - PresetHdBypass = 0x21, - PresetBypassRGBHV = 0x22, -}; struct runTimeOptions rtos; struct runTimeOptions *rto = &rtos; struct userOptions uopts; @@ -211,8 +204,8 @@ struct userOptions *uopt = &uopts; struct adcOptions adcopts; struct adcOptions *adco = &adcopts; -char serialCommand; // Serial / Web Server commands -char userCommand; // Serial / Web Server commands +char serialCommand = '@'; // Serial / Web Server commands +char userCommand = '@'; // Serial / Web Server commands static uint8_t lastSegment = 0xFF; // GBS segment for direct access // uint8_t globalDelay; // used for dev / debug @@ -305,11 +298,11 @@ float getSourceFieldRate(bool useSPBus) if (useSPBus) { if (rto->syncTypeCsync) { - // Serial.println("TestBus for csync"); + // LOGN("TestBus for csync"); if (testBusSelBackup != 0xa) GBS::TEST_BUS_SEL::write(0xa); } else { - // Serial.println("TestBus for HV Sync"); + // LOGN("TestBus for HV Sync"); if (testBusSelBackup != 0x0) GBS::TEST_BUS_SEL::write(0x0); // RGBHV: TB 0x20 has vsync } @@ -1073,7 +1066,7 @@ void updateHVSyncEdge() if (rto->syncTypeCsync == false) { if ((syncStatus & 0x08) != 0x08) // if !vs active { - Serial.println(F("VS can't detect sync edge")); + LOGN(F("VS can't detect sync edge")); } else { if ((syncStatus & 0x04) == 0x00) { if (printVS != 1) { @@ -1202,7 +1195,7 @@ void setAndUpdateSogLevel(uint8_t level) latchPLLAD(); GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status GBS::INTERRUPT_CONTROL_00::write(0x00); - // Serial.print("sog: "); Serial.println(rto->currentLevelSOG); + // LOG(F("sog: ")); LOGN(rto->currentLevelSOG); } // in operation: t5t04t1 for 10% lower power on ADC @@ -1286,13 +1279,13 @@ bool optimizePhaseSP() prevPrevBadHt = prevBadHt; prevBadHt = badHt; - // Serial.print(rto->phaseSP); Serial.print(" badHt: "); Serial.println(badHt); + // LOG(rto->phaseSP); LOG(" badHt: "); LOGN(badHt); } - // Serial.println(goodHt); + // LOGN(goodHt); if (goodHt < 17) { - // Serial.println("pxClk unstable"); + // LOGN("pxClk unstable"); return 0; } @@ -1307,13 +1300,13 @@ bool optimizePhaseSP() // shift ADC phase 180 degrees for the following if (rto->videoStandardInput >= 5 && rto->videoStandardInput <= 7) { if (rto->osr == 2) { - // Serial.println("shift adc phase"); + // LOGN("shift adc phase"); rto->phaseADC += 16; rto->phaseADC &= 0x1f; } } else if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { if (rto->osr == 4) { - // Serial.println("shift adc phase"); + // LOGN("shift adc phase"); rto->phaseADC += 16; rto->phaseADC &= 0x1f; } @@ -1331,8 +1324,8 @@ bool optimizePhaseSP() } } - // Serial.println(millis() - startTime); - // Serial.print("worstPhaseSP: "); Serial.println(worstPhaseSP); + // LOGN(millis() - startTime); + // LOGN("worstPhaseSP: "); LOGN(worstPhaseSP); /*static uint8_t lastLevelSOG = 99; if (lastLevelSOG != rto->currentLevelSOG) { @@ -1412,13 +1405,13 @@ void optimizeSogLevel() // LOG(F("OK @SOG ")); LOGN(rto->currentLevelSOG); printInfo(); break; // found, exit } else { - // Serial.print(" inner test failed syncGoodCounter: "); Serial.println(syncGoodCounter); + // LOG(F(" inner test failed syncGoodCounter: "); LOGN(syncGoodCounter)); } } else { // getVideoMode() == 0 - // Serial.print("sog-- syncGoodCounter: "); Serial.println(syncGoodCounter); + // LOG(F("sog-- syncGoodCounter: "); LOGN(syncGoodCounter)); } } else { // syncGoodCounter < 40 - // Serial.print("outer test failed syncGoodCounter: "); Serial.println(syncGoodCounter); + // LOG(F("outer test failed syncGoodCounter: ")); LOGN(syncGoodCounter); } if (rto->currentLevelSOG >= 2) { @@ -1896,8 +1889,8 @@ void shiftHorizontal(uint16_t amountToShift, bool subtracting) GBS::VDS_HB_ST::write(hbst); GBS::VDS_HB_SP::write(hbsp); - // Serial.print("hbst: "); Serial.println(hbst); - // Serial.print("hbsp: "); Serial.println(hbsp); + // LOG("hbst: "); LOGN(hbst); + // LOG("hbsp: "); LOGN(hbsp); } void shiftHorizontalLeft() @@ -2707,7 +2700,7 @@ bool runAutoBestHTotal() { if (!FrameSync::ready() && rto->autoBestHtotalEnabled == true && rto->videoStandardInput > 0 && rto->videoStandardInput < 15) { - // Serial.println("running"); + // LOGN("running"); // unsigned long startTime = millis(); bool stableNow = 1; @@ -2715,14 +2708,14 @@ bool runAutoBestHTotal() for (uint8_t i = 0; i < 64; i++) { if (!getStatus16SpHsStable()) { stableNow = 0; - // Serial.println("prevented: !getStatus16SpHsStable"); + // LOGN("prevented: !getStatus16SpHsStable"); break; } } if (stableNow) { if (GBS::STATUS_INT_SOG_BAD::read()) { - // Serial.println("prevented_2!"); + // LOGN("prevented_2!"); resetInterruptSogBadBit(); delay(40); stableNow = false; @@ -2752,13 +2745,13 @@ bool runAutoBestHTotal() GBS::IF_TEST_SEL::write(ifBusSelBackup); if (GBS::STATUS_INT_SOG_BAD::read()) { - // Serial.println("prevented_5 INT_SOG_BAD!"); + // LOGN("prevented_5 INT_SOG_BAD!"); stableNow = false; } for (uint8_t i = 0; i < 16; i++) { if (!getStatus16SpHsStable()) { stableNow = 0; - // Serial.println("prevented_5: !getStatus16SpHsStable"); + // LOGN("prevented_5: !getStatus16SpHsStable"); break; } } @@ -2778,7 +2771,7 @@ bool runAutoBestHTotal() delay(1); if (!getStatus16SpHsStable()) { stableNow = false; - // Serial.println("prevented_3!"); + // LOGN("prevented_3!"); break; } } @@ -2788,8 +2781,8 @@ bool runAutoBestHTotal() bool success = applyBestHTotal(bestHTotal); if (success) { rto->syncLockFailIgnore = 16; - // Serial.print("ok, took: "); - // Serial.println(millis() - startTime); + // LOG(F("ok, took: ")); + // LOGN(millis() - startTime); return true; // success } } @@ -2810,9 +2803,9 @@ bool runAutoBestHTotal() rto->autoBestHtotalEnabled = false; } } - Serial.print(F("bestHtotal retry (")); - Serial.print(rto->syncLockFailIgnore); - Serial.println(")"); + LOG(F("bestHtotal retry (")); + LOG(rto->syncLockFailIgnore); + LOGN(F(")")); } } else if (FrameSync::ready()) { // FS ready but mode is 0 or 15 or autoBestHtotal is off @@ -2897,13 +2890,13 @@ bool applyBestHTotal(uint16_t bestHTotal) // bestHTotal 0? could be an invald manual retime if (bestHTotal == 0) { - Serial.println(F("bestHTotal 0")); + LOGN(F("bestHTotal 0")); return false; } if (rto->forceRetime == false) { if (GBS::STATUS_INT_SOG_BAD::read() == 1) { - // Serial.println("prevented in apply"); + // LOGN("prevented in apply"); return false; } } @@ -2959,19 +2952,19 @@ bool applyBestHTotal(uint16_t bestHTotal) // fix over / underflows if (h_blank_display_start_position > (bestHTotal - 8) || isLargeDiff) { // typically happens when scaling Hz up (60 to 70) - // Serial.println("overflow h_blank_display_start_position"); + // LOGN("overflow h_blank_display_start_position"); h_blank_display_start_position = bestHTotal * 0.936f; } if (h_blank_display_stop_position > bestHTotal || isLargeDiff) { - // Serial.println("overflow h_blank_display_stop_position"); + // LOGN("overflow h_blank_display_stop_position"); h_blank_display_stop_position = bestHTotal * 0.178f; } if ((h_blank_memory_start_position > bestHTotal) || (h_blank_memory_start_position > h_blank_display_start_position) || isLargeDiff) { - // Serial.println("overflow h_blank_memory_start_position"); + // LOGN("overflow h_blank_memory_start_position"); h_blank_memory_start_position = h_blank_display_start_position * 0.971f; } if (h_blank_memory_stop_position > bestHTotal || isLargeDiff) { - // Serial.println("overflow h_blank_memory_stop_position"); + // LOGN("overflow h_blank_memory_stop_position"); h_blank_memory_stop_position = h_blank_display_stop_position * 0.64f; } @@ -3717,7 +3710,7 @@ void doPostPresetLoadSteps() if (getVideoMode() == rto->videoStandardInput) { bool ok = 0; float sfr = getSourceFieldRate(0); - // Serial.println(sfr, 3); + // LOGN(sfr, 3); if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) { if (sfr > 58.6f && sfr < 61.4f) ok = 1; @@ -3876,8 +3869,8 @@ void doPostPresetLoadSteps() timeout = millis() - timeout; if (timeout > 1000) { - Serial.print(F("to1 is: ")); - Serial.println(timeout); + LOG(F("to1 is: ")); + LOGN(timeout); } if (timeout >= 1500) { if (rto->currentLevelSOG >= 7) { @@ -4096,7 +4089,7 @@ void applyPresets(uint8_t result) if (uopt->PalForce60 == 1) { if (uopt->presetPreference != 2) { // != custom. custom saved as pal preset has ntsc customization if (result == 2 || result == 4) { - Serial.println(F("PAL@50 to 60Hz")); + LOGN(F("PAL@50 to 60Hz")); rto->presetIsPalForce60 = 1; } if (result == 2) { @@ -4260,7 +4253,7 @@ void applyPresets(uint8_t result) rto->videoStandardInput = result; if (waitExtra) { // extra time needed for digital resets, so that autobesthtotal works first attempt - // Serial.println("waitExtra 400ms"); + // LOGN("waitExtra 400ms"); delay(400); // min ~ 300 } doPostPresetLoadSteps(); @@ -4272,7 +4265,7 @@ void unfreezeVideo() GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); } rto->videoIsFrozen = false;*/ - // Serial.print("u"); + // LOG("u"); GBS::CAPTURE_ENABLE::write(1); } @@ -4282,7 +4275,7 @@ void freezeVideo() GBS::IF_VB_ST::write(GBS::IF_VB_SP::read()); } rto->videoIsFrozen = true;*/ - // Serial.print("f"); + // LOG("f"); GBS::CAPTURE_ENABLE::write(0); } @@ -4711,13 +4704,13 @@ void updateSpDynamic(bool withCurrentVideoModeCheck) } } if (testOk != 12) { - // Serial.print(" testok: "); Serial.println(testOk); + // LOG(" testok: "); LOGN(testOk); ratioHs = 0.032; // 0.032: (~100 / 2560) is ~2.5uS on NTSC (find with crtemudriver) } - // Serial.print(" (debug) hPeriod: "); Serial.println(hPeriod); - // Serial.print(" (debug) ratioHs: "); Serial.println(ratioHs, 5); - // Serial.print(" (debug) ignoreBase: 0x"); LOGF("0x%04X\n", ignoreLength); + // LOG(" (debug) hPeriod: "); LOGN(hPeriod); + // LOG(" (debug) ratioHs: "); LOGN(ratioHs, 5); + // LOG(" (debug) ignoreBase: 0x"); LOGF("0x%04X\n", ignoreLength); uint16_t pllDiv = GBS::PLLAD_MD::read(); ignoreLength = ignoreLength + (pllDiv * (ratioHs * 0.38)); // for factor: crtemudriver tests // LOG(F(" (debug) ign.length: 0x"); LOGF("0x%04X\n", ignoreLength); @@ -4848,11 +4841,11 @@ void updateCoastPosition(bool autoCoast) } rto->coastPositionIsSet = 1; - /*Serial.print("coast ST: "); Serial.print("0x"); LOGF("0x%04X", GBS::SP_H_CST_ST::read()); - Serial.print(", "); - Serial.print("SP: "); Serial.print("0x"); LOGF("0x%04X", GBS::SP_H_CST_SP::read()); - Serial.print(" total: "); Serial.print("0x"); LOGF("0x%04X", accInHlength); - Serial.print(" ~ "); Serial.println(accInHlength / 4);*/ + /*LOG("coast ST: "); LOG("0x"); LOGF("0x%04X", GBS::SP_H_CST_ST::read()); + LOG(", "); + LOG("SP: "); LOG("0x"); LOGF("0x%04X", GBS::SP_H_CST_SP::read()); + LOG(" total: "); LOG("0x"); LOGF("0x%04X", accInHlength); + LOG(" ~ "); LOGN(accInHlength / 4);*/ } } @@ -4892,7 +4885,7 @@ void updateClampPosition() if ((thisInHlength > (prevInHlength - 3)) && (thisInHlength < (prevInHlength + 3))) { accInHlength += thisInHlength; } else { - // Serial.println("updateClampPosition unstable"); + // LOGN("updateClampPosition unstable"); return; } if (!getStatus16SpHsStable()) { @@ -4941,11 +4934,11 @@ void updateClampPosition() (stop < (oldClampSP - 1) || stop > (oldClampSP + 1))) { GBS::SP_CS_CLP_ST::write(start); GBS::SP_CS_CLP_SP::write(stop); - /*Serial.print("clamp ST: "); Serial.print("0x"); Serial.print(start, HEX); - Serial.print(", "); - Serial.print("SP: "); Serial.print("0x"); Serial.print(stop, HEX); - Serial.print(" total: "); Serial.print("0x"); Serial.print(accInHlength, HEX); - Serial.print(" / "); Serial.println(accInHlength);*/ + /*LOG("clamp ST: "); LOG("0x"); LOG(start, HEX); + LOG(", "); + LOG("SP: "); LOG("0x"); LOG(stop, HEX); + LOG(" total: "); LOG("0x"); LOG(accInHlength, HEX); + LOG(" / "); LOGN(accInHlength);*/ } rto->clampPositionIsSet = true; @@ -5442,8 +5435,8 @@ void runAutoGain() if (getStatus16SpHsStable() && (GBS::STATUS_00::read() == status00reg)) { limit_found++; // 240p test suite (SNES ver): display vertical lines (hor. line test) - // Serial.print("g: "); Serial.println(greenValue, HEX); - // Serial.print("--"); Serial.println(); + // LOG("g: "); LOGN(greenValue, HEX); + // LOG("--"); LOGN(); } else return; @@ -5686,7 +5679,7 @@ void printInfo() uint8_t lockCounter = 0; int32_t wifi = 0; - if ((WiFi.status() == WL_CONNECTED) || (WiFi.getMode() == WIFI_AP)) { + if ((WiFi.status() == WL_CONNECTED) || (WiFi.getMode() == WIFI_AP_STA)) { wifi = WiFi.RSSI(); } @@ -5892,7 +5885,7 @@ void runSyncWatcher() // okay, source still active so count this one, break back to outer for loop badHsActive++; lastVsyncLock = millis(); // delay this - // Serial.print(badHsActive); Serial.print(" "); + // LOG(badHsActive); LOG(" "); break; } } @@ -6153,8 +6146,8 @@ void runSyncWatcher() LOG(F(" ")); LOG(vidModeReadout); LOGN(F(" ")); - // Serial.print("Old: "); Serial.print(rto->videoStandardInput); - // Serial.print(" New: "); Serial.println(detectedVideoMode); + // LOG("Old: "); LOG(rto->videoStandardInput); + // LOG(" New: "); LOGN(detectedVideoMode); rto->videoIsFrozen = false; if (GBS::SP_SOG_MODE::read() == 1) { @@ -6361,7 +6354,7 @@ void runSyncWatcher() // timing adjust after a few stable cycles // should arrive here with either odd or even VPERIOD_IF /*if (timingAdjustDelay != 0) { - Serial.print(timingAdjustDelay); Serial.print(" "); + LOG(timingAdjustDelay); LOG(" "); }*/ if (timingAdjustDelay != 0) { if ((VPERIOD_IF % 2) == oddEvenWhenArmed) { @@ -6377,7 +6370,7 @@ void runSyncWatcher() } } /*else { - Serial.println("!!!"); + LOGN("!!!"); }*/ } } @@ -6436,7 +6429,7 @@ void runSyncWatcher() delay(4); float sourceRate = getSourceFieldRate(1); - Serial.println(sourceRate); + LOGN(sourceRate); // todo: this hack is hard to understand when looking at applypreset and mode is suddenly 1,2 or 3 if (uopt->presetPreference == 2) { @@ -6742,7 +6735,7 @@ void runSyncWatcher() resetSyncProcessor(); // todo: fix MD being stuck in last mode when sync disappears // resetModeDetect(); rto->noSyncCounter = 0; - // Serial.println("RGBHV limit no sync"); + // LOGN("RGBHV limit no sync"); } static unsigned long lastTimeSogAndPllRateCheck = millis(); @@ -6777,7 +6770,7 @@ void runSyncWatcher() // typical: currentPllRate: 1560, currentPllRate: 3999 max seen the pll reach: 5008 for 1280x1024@75 if (GBS::STATUS_INT_SOG_BAD::read() == 0) { currentPllRate = getPllRate(); - // Serial.println(currentPllRate); + // LOGN(currentPllRate); if (currentPllRate > 100 && currentPllRate < 7500) { if ((currentPllRate < (oldPllRate - 3)) || (currentPllRate > (oldPllRate + 3))) { delay(40); @@ -6903,7 +6896,7 @@ bool checkBoardPower() GBS::ADC_UNUSED_69::write(0); // attempt to clear if (rto->boardHasPower == true) { - Serial.println(F("! power / i2c lost !")); + LOGN(F("! power / i2c lost !")); } return 0; @@ -6918,7 +6911,7 @@ bool checkBoardPower() // if (SCL_SDA != 6) //{ // if (rto->boardHasPower == true) { - // Serial.println("! power / i2c lost !"); + // LOGN("! power / i2c lost !"); // } // // I2C stays off and pins are INPUT // return 0; @@ -6970,7 +6963,7 @@ void calibrateAdcOffset() // loop breaks either when the timer runs out, or hitTargetCounter reaches target while ((millis() - startTimer) < 800) { readout16 = GBS::TEST_BUS::read() & 0x7fff; - // Serial.println(readout16, HEX); + // LOGN(readout16, HEX); // readout16 is unsigned, always >= 0 if (readout16 < 7) { hitTargetCounter++; @@ -6979,15 +6972,15 @@ void calibrateAdcOffset() if (i == 0) { GBS::ADC_GOFCTRL::write(GBS::ADC_GOFCTRL::read() + 1); // incr. offset readout = GBS::ADC_GOFCTRL::read(); - Serial.print(" G: "); + LOG(F(" G: ")); } else if (i == 1) { GBS::ADC_ROFCTRL::write(GBS::ADC_ROFCTRL::read() + 1); readout = GBS::ADC_ROFCTRL::read(); - Serial.print(" R: "); + LOG(F(" R: ")); } else if (i == 2) { GBS::ADC_BOFCTRL::write(GBS::ADC_BOFCTRL::read() + 1); readout = GBS::ADC_BOFCTRL::read(); - Serial.print(" B: "); + LOG(F(" B: ")); } LOGF("0x%04X", readout); @@ -7021,7 +7014,7 @@ void calibrateAdcOffset() if (i == 2) { adco->b_off = GBS::ADC_BOFCTRL::read(); } - Serial.println(""); + LOGN(); } if (readout >= 0x52) { @@ -7033,7 +7026,7 @@ void calibrateAdcOffset() GBS::ADC_ROFCTRL::write(adco->r_off); GBS::ADC_BOFCTRL::write(adco->b_off); - // Serial.println(millis() - overallTimer); + // LOGN(millis() - overallTimer); } void loadDefaultUserOptions() @@ -7134,7 +7127,7 @@ void ICACHE_RAM_ATTR isrRotaryEncoderPushForNewMenu() void setup() { - rto->videoStandardInput = 0; + // rto->videoStandardInput = 0; display.init(); // inits OLED on I2C bus display.flipScreenVertically(); // orientation fix for OLED @@ -7169,6 +7162,7 @@ void setup() rto->allowUpdatesOTA = false; // need to initialize for wifiLoop() WiFi.setSleepMode(WIFI_NONE_SLEEP); // low latency responses, less chance for missing packets WiFi.setOutputPower(16.0f); // float: min 0.0f, max 20.5f + wifiInit(); startWebserver(); rto->webServerStarted = true; } else { @@ -7362,14 +7356,14 @@ void setup() delay(1); } - if (WiFi.status() == WL_CONNECTED) { - // nothing - } else if (WiFi.SSID().length() == 0) { - LOGN(FPSTR(ap_info_string)); - } else { - LOGN(F("(WiFi): still connecting..")); - WiFi.reconnect(); // only valid for station class (ok here) - } + // if (WiFi.status() == WL_CONNECTED) { + // // nothing + // } else if (WiFi.SSID().length() == 0) { + // LOGN(ap_info_string); + // } else { + // LOGN(F("(WiFi): still connecting..")); + // WiFi.reconnect(); // only valid for station class (ok here) + // } // dummy commands GBS::STATUS_00::read(); @@ -7419,9 +7413,9 @@ void setup() externalClockGenDetectAndInitialize(); } if (rto->extClockGenDetected == 1) { - Serial.println(F("ext clockgen detected")); + LOGN(F("ext clockgen detected")); } else { - Serial.println(F("no ext clockgen")); + LOGN(F("no ext clockgen")); } zeroAll(); @@ -7433,7 +7427,7 @@ void setup() LOG(F("Chip ID: ")); LOGF("0x%04X", productId); LOG(F(" ")); - LOGF("0x%02X", revisionId); + LOGF("0x%02X\n", revisionId); if (uopt->enableCalibrationADC) { // enabled by default @@ -7536,116 +7530,9 @@ void handleButtons(void) } #endif -void updateWebSocketData() -{ - if (rto->webServerEnabled && rto->webServerStarted) { - if (webSocket.connectedClients() > 0) { - - constexpr size_t MESSAGE_LEN = 6; - char toSend[MESSAGE_LEN] = {0}; - toSend[0] = '#'; // makeshift ping in slot 0 - - if (rto->isCustomPreset) { - toSend[1] = '9'; - } else - switch (rto->presetID) { - case 0x01: - case 0x11: - toSend[1] = '1'; - break; - case 0x02: - case 0x12: - toSend[1] = '2'; - break; - case 0x03: - case 0x13: - toSend[1] = '3'; - break; - case 0x04: - case 0x14: - toSend[1] = '4'; - break; - case 0x05: - case 0x15: - toSend[1] = '5'; - break; - case 0x06: - case 0x16: - toSend[1] = '6'; - break; - case PresetHdBypass: // bypass 1 - case PresetBypassRGBHV: // bypass 2 - toSend[1] = '8'; - break; - default: - toSend[1] = '0'; - break; - } - - toSend[2] = (char)uopt->presetSlot; - - // '@' = 0x40, used for "byte is present" detection; 0x80 not in ascii table - toSend[3] = '@'; - toSend[4] = '@'; - toSend[5] = '@'; - if (uopt->enableAutoGain) { - toSend[3] |= (1 << 0); - } - if (uopt->wantScanlines) { - toSend[3] |= (1 << 1); - } - if (uopt->wantVdsLineFilter) { - toSend[3] |= (1 << 2); - } - if (uopt->wantPeaking) { - toSend[3] |= (1 << 3); - } - if (uopt->PalForce60) { - toSend[3] |= (1 << 4); - } - if (uopt->wantOutputComponent) { - toSend[3] |= (1 << 5); - } - - if (uopt->matchPresetSource) { - toSend[4] |= (1 << 0); - } - if (uopt->enableFrameTimeLock) { - toSend[4] |= (1 << 1); - } - if (uopt->deintMode) { - toSend[4] |= (1 << 2); - } - if (uopt->wantTap6) { - toSend[4] |= (1 << 3); - } - if (uopt->wantStepResponse) { - toSend[4] |= (1 << 4); - } - if (uopt->wantFullHeight) { - toSend[4] |= (1 << 5); - } - if (uopt->enableCalibrationADC) { - toSend[5] |= (1 << 0); - } - if (uopt->preferScalingRgbhv) { - toSend[5] |= (1 << 1); - } - if (uopt->disableExternalClockGenerator) { - toSend[5] |= (1 << 2); - } - // send ping and stats - if (ESP.getFreeHeap() > 14000) { - webSocket.broadcastTXT(toSend, MESSAGE_LEN); - } else { - webSocket.disconnect(); - } - } - } -} void loop() @@ -7696,8 +7583,8 @@ void loop() serialCommand = ' '; } if (serialCommand != '@') { - LOGF("%s command %c at settings source %d, custom slot %d, status %x\n", - "serial", serialCommand, uopt->presetPreference, uopt->presetSlot, rto->presetID); + LOGF("%s command %c (0x%02X) at settings source %d, custom slot %d, status %x\n", + "serial", serialCommand, serialCommand, uopt->presetPreference, uopt->presetSlot, rto->presetID); // multistage with bad characters? if (inputStage > 0) { // need 's', 't' or 'g' @@ -7898,10 +7785,10 @@ void loop() case '!': // fastGetBestHtotal(); // readEeprom(); - Serial.print(F("sfr: ")); - Serial.println(getSourceFieldRate(1)); - Serial.print(F("pll: ")); - Serial.println(getPllRate()); + LOG(F("sfr: ")); + LOGN(getSourceFieldRate(1)); + LOG(F("pll: ")); + LOGN(getPllRate()); break; case '$': { // EEPROM write protect pin (7, next to Vcc) is under original MCU control @@ -7926,7 +7813,7 @@ void loop() // Wire.endTransmission(); // delay(5); - Serial.println("done"); + LOGN(F("done")); } break; case 'j': // resetPLL(); @@ -7951,7 +7838,7 @@ void loop() case '#': rto->videoStandardInput = 13; applyPresets(13); - // Serial.println(getStatus00IfHsVsStable()); + // LOGN(getStatus00IfHsVsStable()); // globalDelay++; // LOGN(globalDelay); break; @@ -8396,7 +8283,7 @@ void loop() } break; case '_': { uint32_t ticks = FrameSync::getPulseTicks(); - Serial.println(ticks); + LOGN(ticks); } break; case '~': goLowPowerWithInputDetection(); // test reset + input detect @@ -8413,8 +8300,8 @@ void loop() } if (what.equals("f")) { if (rto->extClockGenDetected) { - Serial.print(F("old freqExtClockGen: ")); - Serial.println((uint32_t)rto->freqExtClockGen); + LOG(F("old freqExtClockGen: ")); + LOGN((uint32_t)rto->freqExtClockGen); rto->freqExtClockGen = Serial.parseInt(); // safety range: 1 - 250 MHz if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) { @@ -8422,8 +8309,8 @@ void loop() rto->clampPositionIsSet = 0; rto->coastPositionIsSet = 0; } - Serial.print(F("set freqExtClockGen: ")); - Serial.println((uint32_t)rto->freqExtClockGen); + LOG(F("set freqExtClockGen: ")); + LOGN((uint32_t)rto->freqExtClockGen); } break; } @@ -8472,13 +8359,13 @@ void loop() setAndUpdateSogLevel(value); } else if (what.equals("ifini")) { GBS::IF_INI_ST::write(value); - // Serial.println(GBS::IF_INI_ST::read()); + // LOGN(GBS::IF_INI_ST::read()); } else if (what.equals("ifvst")) { GBS::IF_VB_ST::write(value); - // Serial.println(GBS::IF_VB_ST::read()); + // LOGN(GBS::IF_VB_ST::read()); } else if (what.equals("ifvsp")) { GBS::IF_VB_SP::write(value); - // Serial.println(GBS::IF_VB_ST::read()); + // LOGN(GBS::IF_VB_ST::read()); } else if (what.equals("vsstc")) { setCsVsStart(value); } else if (what.equals("vsspc")) { @@ -8531,22 +8418,22 @@ void loop() externalClockGenResetClock(); if (rto->extClockGenDetected) { rto->extClockGenDetected = 0; - Serial.println(F("ext clock gen bypass")); + LOGN(F("ext clock gen bypass")); } else { rto->extClockGenDetected = 1; - Serial.println(F("ext clock gen active")); + LOGN(F("ext clock gen active")); externalClockGenSyncInOutRate(); } //{ // float bla = 0; // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); - // Serial.println(bla, 5); + // LOGN(bla, 5); //} break; default: - LOG(F("unknown command ")); - LOGF("0x%04X", serialCommand); + LOG(F("unknown command: ")); + LOGF("0x%04X\n", serialCommand); break; } @@ -8594,7 +8481,7 @@ void loop() } else if (rto->syncLockFailIgnore > 0) { rto->syncLockFailIgnore = 16; } - // Serial.println(millis() - startTime); + // LOGN(millis() - startTime); if (debug_backup != 0x0) { GBS::TEST_BUS_SEL::write(debug_backup); @@ -8618,7 +8505,7 @@ void loop() // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; // if (testbus >= 0x0FFD){ - // Serial.println(testbus,HEX); + // LOGN(testbus,HEX); // } // if (rto->videoIsFrozen && (rto->continousStableCounter >= 2)) { // unfreezeVideo(); @@ -8784,7 +8671,7 @@ void loop() if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { - Serial.println(F("power good")); + LOGN(F("power good")); delay(350); // i've seen the MTV230 go on briefly on GBS power cycle startWire(); { @@ -8809,12 +8696,14 @@ void loop() if (rto->enableDebugPings && millis() - pingLastTime > 1000) { // regular interval pings if (pinger.Ping(WiFi.gatewayIP(), 1, 750) == false) { - Serial.println("Error during last ping command."); + LOGN(F("Error during last ping command.")); } pingLastTime = millis(); } } #endif + // web client handler + server.handleClient(); } #if defined(ESP8266) @@ -8842,7 +8731,7 @@ void handleType2Command(char argument) webSocket.close(); loadDefaultUserOptions(); saveUserPrefs(); - Serial.println(F("options set to defaults, restarting")); + LOGN(F("options set to defaults, restarting")); delay(60); ESP.reset(); // don't use restart(), messes up websocket reconnects // @@ -8902,7 +8791,7 @@ void handleType2Command(char argument) break; case 'a': webSocket.close(); - Serial.println(F("restart")); + LOGN(F("restart")); delay(60); ESP.reset(); // don't use restart(), messes up websocket reconnects break; @@ -9174,7 +9063,7 @@ void handleType2Command(char argument) delay(30); // WiFi.mode(WIFI_STA); // WiFi.hostname(device_hostname_partial); // _full - wifiStartStaMode("", ""); + wifiStartStaMode(""); // delay(30); // ESP.reset(); break; @@ -9378,16 +9267,16 @@ void handleType2Command(char argument) // void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length) { // switch (type) { // case WStype_DISCONNECTED: -// //Serial.print("WS: #"); Serial.print(num); Serial.print(" disconnected,"); -// //Serial.print(" remaining: "); Serial.println(webSocket.connectedClients()); +// //LOG("WS: #"); LOG(num); LOG(" disconnected,"); +// //LOG(" remaining: "); LOGN(webSocket.connectedClients()); // break; // case WStype_CONNECTED: -// //Serial.print("WS: #"); Serial.print(num); Serial.print(" connected, "); -// //Serial.print(" total: "); Serial.println(webSocket.connectedClients()); +// //LOG("WS: #"); LOG(num); LOG(" connected, "); +// //LOG(" total: "); LOGN(webSocket.connectedClients()); // updateWebSocketData(); // break; // case WStype_PONG: -// //Serial.print("p"); +// //LOG("p"); // updateWebSocketData(); // break; // } @@ -9397,8 +9286,6 @@ void handleType2Command(char argument) void startWebserver() { - wifiInit(); - webSocket.begin(); // Websocket for interaction serverInit(); @@ -9459,10 +9346,10 @@ void initUpdateOTA() LOGN(F("\nEnd")); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - SerialM.printf("Progress: %u%%\r", (progress / (total / 100))); + LOGF("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { - SerialM.printf("Error[%u]: ", error); + LOGF("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) LOGN(F("Auth Failed")); else if (error == OTA_BEGIN_ERROR) diff --git a/options.h b/options.h index 19841886..ac790f89 100644 --- a/options.h +++ b/options.h @@ -1,8 +1,6 @@ #ifndef _USER_H_ #define _USER_H_ -#define THIS_DEVICE_MASTER - using Ascii8 = uint8_t; /// Output resolution requested by user, *given to* applyPresets(). enum PresetPreference : uint8_t { @@ -107,4 +105,12 @@ struct adcOptions uint8_t g_off; uint8_t b_off; }; -#endif \ No newline at end of file + +/// Video processing mode, loaded into register GBS_PRESET_ID by applyPresets() +/// and read to rto->presetID by doPostPresetLoadSteps(). Shown on web UI. +enum PresetID : uint8_t { + PresetHdBypass = 0x21, + PresetBypassRGBHV = 0x22, +}; + +#endif // _USER_H_ \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 0bedde8a..545fae4a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,16 +12,19 @@ lib_dir = ./src/ src_dir = ./ [env:d1_mini] -platform = espressif8266@2.6.3 +platform = espressif8266 board = d1_mini framework = arduino -board_build.filesystem = littlefs board_build.f_cpu = 160000000L board_build.ldscript = eagle.flash.4m1m.ld -upload_speed = 921600 +board_build.filesystem = littlefs +board_build.flash_mode = qio +upload_speed = 57600 +upload_resetmethod = ck monitor_speed = 115200 lib_deps = - me-no-dev/ESPAsyncTCP@^1.2.2 + me-no-dev/ESPAsyncTCP + https://github.com/Links2004/arduinoWebSockets.git ; me-no-dev/ESP Async WebServer@^1.2.3 thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays@4.4.0 bluemurder/ESP8266-ping@^2.0.1 @@ -32,5 +35,9 @@ build_src_filter = +<**/*.cpp> +<**/*.ino> -<./3rdparty/*> + -<./tmp/*> build_flags = - -fmax-errors=3 \ No newline at end of file + -fmax-errors=3 + -D PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED + -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH + -D VTABLES_IN_FLASH \ No newline at end of file diff --git a/public/src/index.ts b/public/src/index.ts index 142bf6a7..02002dcf 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -287,7 +287,7 @@ const createWebSocket = () => { const toggleMethod = ( button: HTMLTableCellElement | HTMLElement, - mode: bool + mode: boolean ) => { if (button.tagName === "TD") { button.innerText = mode ? "toggle_on" : "toggle_off"; @@ -443,7 +443,7 @@ const savePreset = () => { ).then(() => { loadUser("4").then(() => { setTimeout(() => { - fetchSlotNames().then((success: bool) => { + fetchSlotNames().then((success: boolean) => { if (success) { updateSlotNames(); } @@ -606,7 +606,7 @@ const toggleCustomSlotFilters = () => { updateCustomSlotFilters(!customSlotFilters); }; -const updateHelp = (help: bool) => { +const updateHelp = (help: boolean) => { if (help) { document.body.classList.remove("gbs-help-hide"); } else { @@ -614,7 +614,7 @@ const updateHelp = (help: bool) => { } }; -const updateDeveloperMode = (developerMode: bool) => { +const updateDeveloperMode = (developerMode: boolean) => { const el = document.querySelector('[gbs-section="developer"]') as HTMLElement; if (developerMode) { el.removeAttribute("hidden"); @@ -632,7 +632,7 @@ const updateDeveloperMode = (developerMode: bool) => { }; const updateCustomSlotFilters = ( - customFilters: bool = GBSStorage.read("customSlotFilters") === true + customFilters: boolean = GBSStorage.read("customSlotFilters") === true ) => { if (customFilters) { GBSControl.ui.customSlotFilters.setAttribute("active", ""); @@ -655,7 +655,7 @@ const GBSStorage = { JSON.stringify(GBSStorage.lsObject) ); }, - read(key: string): string | number | bool { + read(key: string): string | number | boolean { GBSStorage.lsObject = JSON.parse( localStorage.getItem("GBSControlSlotNames") || "{}" ); @@ -683,7 +683,7 @@ const toggleButtonActive = (id: string) => ( } }; -const displayWifiWarning = (mode: bool) => { +const displayWifiWarning = (mode: boolean) => { GBSControl.ui.webSocketConnectionWarning.style.display = mode ? "block" : "none"; @@ -1271,7 +1271,7 @@ const initGeneralListeners = () => { }; const initDeveloperMode = () => { - const devMode = GBSStorage.read("developerMode") as bool; + const devMode = GBSStorage.read("developerMode") as boolean; if (devMode === undefined) { GBSStorage.write("developerMode", false); updateDeveloperMode(false); @@ -1281,7 +1281,7 @@ const initDeveloperMode = () => { }; const initHelp = () => { - let help = GBSStorage.read("help") as bool; + let help = GBSStorage.read("help") as boolean; if (help === undefined) { help = false; GBSStorage.write("help", help); diff --git a/src/WebSockets.cpp b/tmp/WebSockets.cpp similarity index 100% rename from src/WebSockets.cpp rename to tmp/WebSockets.cpp diff --git a/src/WebSockets.h b/tmp/WebSockets.h similarity index 100% rename from src/WebSockets.h rename to tmp/WebSockets.h diff --git a/src/WebSocketsServer.cpp b/tmp/WebSocketsServer.cpp similarity index 100% rename from src/WebSocketsServer.cpp rename to tmp/WebSocketsServer.cpp diff --git a/src/WebSocketsServer.h b/tmp/WebSocketsServer.h similarity index 100% rename from src/WebSocketsServer.h rename to tmp/WebSocketsServer.h diff --git a/tw.h b/tw.h index 2d0340a2..adc17676 100644 --- a/tw.h +++ b/tw.h @@ -75,22 +75,22 @@ namespace tw } #if 0 - Serial.print("READ "); Serial.print(addr, HEX); Serial.print("@"); Serial.print(reg, HEX); Serial.print(": "); + LOG(F("READ ")); LOGF("%04X", addr); LOG(F("@")); LOGF("%04X", reg); LOG(F(": ")); for (uint8_t i = 0; i < size; ++i) { - Serial.print(output[i] >> 4, HEX); Serial.print(output[i] & 0xF, HEX); + LOG(output[i] >> 4, HEX); LOG(output[i] & 0xF, HEX); } - Serial.println(); + LOGN(); #endif } inline void rawWrite(uint8_t addr, uint8_t reg, uint8_t const *input, uint8_t size) { #if 0 - Serial.print("WRITE "); Serial.print(addr, HEX); Serial.print("@"); Serial.print(reg, HEX); Serial.print(": "); + LOG(F("WRITE ")); LOGF("%04X", addr); LOG(F("@")); LOGF("%04X", reg); LOG(F(": ")); for (uint8_t i = 0; i < size; ++i) { - Serial.print(input[i] >> 4, HEX); Serial.print(input[i] & 0xF, HEX); + LOG(input[i] >> 4, HEX); LOG(input[i] & 0xF, HEX); } - Serial.println(); + LOGN(); #endif Wire.beginTransmission(addr); Wire.write(reg); diff --git a/webui.html b/webui.html index d0bc8f8d..208efefd 100644 --- a/webui.html +++ b/webui.html @@ -908,17 +908,9 @@ onclick="savePreset()" active > -
add_circle_outline
+
fiber_manual_record
save preset
- @@ -1403,119 +1395,10 @@
  • Peaking increases contrast around horizontal brightness steps, and is recommended.
  • Step Response increases the sharpness of horizontal color steps, and is recommended.
  • - -
    - -
    wb_sunny
    -
    Сolor correction
    -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    - - -
    -
      - -
    • Pb/U gain - change blue-luma gain.
    • -
    • Pr/V gain - change red-luma gain.
    • -
    + - + - + - -
    -
    - -
    code
    -
    Output
    -
    -
    - -
    -
    - -
    -
    +
    + +
    code
    +
    Output
    +
    +
    + +
    +
    + +
    +
    - -
    + +
    - +
    - - - + + + + \ No newline at end of file diff --git a/public/src/index.js b/public/src/index.js index 45e2ef52..e31a685c 100644 --- a/public/src/index.js +++ b/public/src/index.js @@ -227,7 +227,7 @@ const createWebSocket = () => { GBSControl.wsNoSuccessConnectingCounter = 0; GBSControl.ws = new WebSocket(GBSControl.webSocketServerUrl, ["arduino"]); GBSControl.ws.onopen = () => { - console.log("ws onopen"); + // console.log("ws onopen"); displayWifiWarning(false); GBSControl.wsConnectCounter++; clearTimeout(GBSControl.wsTimeout); @@ -236,7 +236,7 @@ const createWebSocket = () => { GBSControl.wsNoSuccessConnectingCounter = 0; }; GBSControl.ws.onclose = () => { - console.log("ws.onclose"); + // console.log("ws.onclose"); clearTimeout(GBSControl.wsTimeout); GBSControl.isWsActive = false; }; @@ -250,8 +250,10 @@ const createWebSocket = () => { messageDataAt3, // adcAutoGain & scanlines & vdsLineFilter & wantPeaking & PalForce60 & wantOutputComponent (binary) messageDataAt4, // matchPresetSource & enableFrameTimeLock & deintMode & wantTap6 & wantStepResponse & wantFullHeight (binary) messageDataAt5, // enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator (binary) + // dev + messageDataAt6, // printInfos, invertSync, oversampling, ADC Filter ] = message.data; - console.log(message); + // console.log(message.data); if (messageDataAt0 != "#") { GBSControl.queuedText += message.data; GBSControl.dataQueued += message.data.length; @@ -261,7 +263,7 @@ const createWebSocket = () => { } } else { - console.log("buttonMapping: " + messageDataAt1); + // console.log("buttonMapping: " + messageDataAt1) // ! curent/selected resolution const resID = GBSControl.buttonMapping[messageDataAt1]; const resEl = document.querySelector(`[gbs-element-ref="${resID}"]`); @@ -269,12 +271,13 @@ const createWebSocket = () => { ? resEl.getAttribute("gbs-element-ref") : "none"; GBSControl.ui.presetButtonList.forEach(toggleButtonActive(activePresetButton)); - // ! current/selected preset slot + // ! current/selected slot const slotId = "slot-" + messageDataAt2; const activeSlotButton = document.querySelector(`[gbs-element-ref="${slotId}"]`); if (activeSlotButton) { GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); } + // settings tab if (messageDataAt3 && messageDataAt4 && messageDataAt5) { const optionByte0 = messageDataAt3.charCodeAt(0); const optionByte1 = messageDataAt4.charCodeAt(0); @@ -354,6 +357,30 @@ const createWebSocket = () => { } }); } + // developer mode tab + if (messageDataAt6) { + const optionByte4 = messageDataAt6.charCodeAt(0); + const printInfoButton = document.querySelector(`button[gbs-message="i"][gbs-message-type="action"]`); + const invertSync = document.querySelector(`button[gbs-message="8"][gbs-message-type="action"]`); + const oversampling = document.querySelector(`button[gbs-message="o"][gbs-message-type="action"]`); + const adcFilter = document.querySelector(`button[gbs-message="F"][gbs-message-type="action"]`); + if ((optionByte4 & 0x01) == 0x01) + printInfoButton.setAttribute("active", ""); + else + printInfoButton.removeAttribute("active"); + if ((optionByte4 & 0x02) == 0x02) + invertSync.setAttribute("active", ""); + else + invertSync.removeAttribute("active"); + if ((optionByte4 & 0x04) == 0x04) + oversampling.setAttribute("active", ""); + else + oversampling.removeAttribute("active"); + if ((optionByte4 & 0x08) == 0x08) + adcFilter.setAttribute("active", ""); + else + adcFilter.removeAttribute("active"); + } } }; }; @@ -812,13 +839,13 @@ const doBackup = () => { .then((files) => { backupFiles = files; total = files.length; - const funcs = files.map((path) => () => __awaiter(this, void 0, void 0, function* () { - return yield fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then((response) => { + const funcs = files.map((path) => () => { + return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then((response) => { GBSControl.ui.progressBackup.setAttribute("gbs-progress", `${done}/${total}`); done++; return checkFetchResponseStatus(response) && response.arrayBuffer(); }); - })); + }); return serial(funcs); }) .then((files) => { diff --git a/public/src/index.ts b/public/src/index.ts index 1edfc14d..453e5753 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -278,7 +278,7 @@ const createWebSocket = () => { GBSControl.ws = new WebSocket(GBSControl.webSocketServerUrl, ["arduino"]); GBSControl.ws.onopen = () => { - console.log("ws onopen"); + // console.log("ws onopen"); displayWifiWarning(false); @@ -290,7 +290,7 @@ const createWebSocket = () => { }; GBSControl.ws.onclose = () => { - console.log("ws.onclose"); + // console.log("ws.onclose"); clearTimeout(GBSControl.wsTimeout); GBSControl.isWsActive = false; @@ -309,9 +309,11 @@ const createWebSocket = () => { messageDataAt3, // adcAutoGain & scanlines & vdsLineFilter & wantPeaking & PalForce60 & wantOutputComponent (binary) messageDataAt4, // matchPresetSource & enableFrameTimeLock & deintMode & wantTap6 & wantStepResponse & wantFullHeight (binary) messageDataAt5, // enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator (binary) + // dev + messageDataAt6, // printInfos, invertSync, oversampling, ADC Filter ] = message.data; -console.log(message); +// console.log(message.data); if (messageDataAt0 != "#") { GBSControl.queuedText += message.data; @@ -322,7 +324,7 @@ console.log(message); GBSControl.dataQueued = 0; } } else { -console.log("buttonMapping: " + messageDataAt1) +// console.log("buttonMapping: " + messageDataAt1) // ! curent/selected resolution const resID = GBSControl.buttonMapping[messageDataAt1]; const resEl = document.querySelector( @@ -331,11 +333,10 @@ console.log("buttonMapping: " + messageDataAt1) const activePresetButton = resEl ? resEl.getAttribute("gbs-element-ref") : "none"; - GBSControl.ui.presetButtonList.forEach( toggleButtonActive(activePresetButton) ); - // ! current/selected preset slot + // ! current/selected slot const slotId = "slot-" + messageDataAt2; const activeSlotButton = document.querySelector( `[gbs-element-ref="${slotId}"]` @@ -344,7 +345,7 @@ console.log("buttonMapping: " + messageDataAt1) if (activeSlotButton) { GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); } - + // settings tab if (messageDataAt3 && messageDataAt4 && messageDataAt5) { const optionByte0 = messageDataAt3.charCodeAt(0); const optionByte1 = messageDataAt4.charCodeAt(0); @@ -431,6 +432,31 @@ console.log("buttonMapping: " + messageDataAt1) } }); } + // developer mode tab + if(messageDataAt6) { + const optionByte4 = messageDataAt6.charCodeAt(0); + const printInfoButton = document.querySelector(`button[gbs-message="i"][gbs-message-type="action"]`); + const invertSync = document.querySelector(`button[gbs-message="8"][gbs-message-type="action"]`); + const oversampling = document.querySelector(`button[gbs-message="o"][gbs-message-type="action"]`); + const adcFilter = document.querySelector(`button[gbs-message="F"][gbs-message-type="action"]`); + if((optionByte4 & 0x01) == 0x01) + printInfoButton.setAttribute("active", ""); + else + printInfoButton.removeAttribute("active"); + if((optionByte4 & 0x02) == 0x02) + invertSync.setAttribute("active", ""); + else + invertSync.removeAttribute("active"); + if((optionByte4 & 0x04) == 0x04) + oversampling.setAttribute("active", ""); + else + oversampling.removeAttribute("active"); + if((optionByte4 & 0x08) == 0x08) + adcFilter.setAttribute("active", ""); + else + adcFilter.removeAttribute("active"); + + } } }; }; @@ -981,8 +1007,8 @@ const doBackup = () => { .then((files: string[]) => { backupFiles = files; total = files.length; - const funcs = files.map((path: string) => async () => { - return await fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then( + const funcs = files.map((path: string) => () => { + return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then( (response) => { GBSControl.ui.progressBackup.setAttribute( "gbs-progress", @@ -997,6 +1023,7 @@ const doBackup = () => { return serial(funcs); }) .then((files: ArrayBuffer[]) => { + console.log("after download backup complete"); const headerDescriptor = files.reduce((acc, f, index) => { acc[backupFiles[index]] = f.byteLength; return acc; diff --git a/scripts/extras.py b/scripts/extras.py index 0d30d852..80109e3d 100644 --- a/scripts/extras.py +++ b/scripts/extras.py @@ -6,7 +6,7 @@ # prepare WebUI def before_buildfs(source, target, env): - print('\n[\U0001F37A] building WebUI\n') + print('\n\U0001F37A: building WebUI\n') env.Execute("npm run build") env.AddPreAction("$BUILD_DIR/littlefs.bin", before_buildfs) @@ -15,7 +15,7 @@ def before_buildfs(source, target, env): def after_buildfs(source, target, env): path = target[0].get_abspath() shutil.copyfile(path, f'{root}/builds/filesystem.bin') - print('\n[\U0001F37A] filesystem.bin has been copied into /builds\n') + print('\n\U0001F37A: filesystem.bin has been copied into /builds\n') env.AddPostAction("$BUILD_DIR/littlefs.bin", after_buildfs) @@ -34,8 +34,8 @@ def after_build(source, target, env): ino = ino.replace('#include "', '#include "src/') with open(fino, 'w') as f: f.write(ino) - print("\n[\U0001F37A] gbs-control.ino updated\n") + print("\n\U0001F37A: gbs-control.ino updated\n") shutil.copyfile(os.path.splitext(path)[0] + ".bin", f'{root}/builds/firmware.bin') - print("[\U0001F37A] firmware.bin has been copied into /builds\n") + print("\U0001F37A: firmware.bin has been copied into /builds\n") env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", after_build) \ No newline at end of file diff --git a/scripts/generate_translations.py b/scripts/generate_translations.py index 12224cd8..9f2dfd97 100644 --- a/scripts/generate_translations.py +++ b/scripts/generate_translations.py @@ -16,7 +16,7 @@ DEFAULT_FONT_SIZE = 12 # load translations -with open(os.getcwd() + '/translation.json', 'r') as data: +with open(os.getcwd() + '/translation.json', 'r', encoding='utf-8') as data: menu_items = json.load(data) res = """ diff --git a/scripts/pre.py b/scripts/pre.py index 8c8344db..b314876a 100644 --- a/scripts/pre.py +++ b/scripts/pre.py @@ -20,7 +20,7 @@ subprocess.call([sys.executable, '-m', 'pip', 'install', 'pillow'], stdout=subprocess.DEVNULL) # starting with i18n -print(f'\n[\U0001F37A] generating locale data ({conf["ui-lang"]})\n') +print(f'\n\U0001F37A: generating locale data ({conf["ui-lang"]})\n') r = subprocess.Popen([ sys.executable, f'{root}/scripts/generate_translations.py', @@ -38,4 +38,4 @@ env.Append(CPPDEFINES=defs) # continue execution -print(f"\n[\U0001F37A] running build of v.{conf['version']}\n") \ No newline at end of file +print(f"\n\U0001F37A: running build of v.{conf['version']}\n") \ No newline at end of file diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index 2cbcc7d4..951aa4d2 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -51,9 +51,9 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen case MT_DOWNSCALE: preset = Output15kHz; break; - case MT_BYPASS: - preset = OutputCustom; - break; + // case MT_BYPASS: + // preset = OutputCustom; + // break; default: break; } @@ -90,6 +90,16 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen manager->freeze(); return false; } + +/** + * @brief + * + * @param manager + * @param item + * @param isFirstTime + * @return true + * @return false + */ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool isFirstTime) { if (!isFirstTime) { @@ -109,8 +119,10 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL uopt->presetSlot = 'A' + item->tag; // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:, // uopt->presetPreference = OutputResolution::OutputCustomized; // rto->presetID = OutputCustom; - rto->resolutionID = OutputCustom; - saveUserPrefs(); + + // @sk: rely on chance that it's already set before manually + // rto->resolutionID = OutputCustom; + // saveUserPrefs(); if (rto->videoStandardInput == 14) { // vga upscale path: let synwatcher handle it rto->videoStandardInput = 15; @@ -137,8 +149,8 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool) { int curNumSlot = 0; - manager->clearSubItems(item); SlotMetaArray slotsObject; + manager->clearSubItems(item); fs::File slotsBinaryFileRead = LittleFS.open(FPSTR(slotsFile), "r"); if (slotsBinaryFileRead) { slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); @@ -146,7 +158,7 @@ bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL String slot_name = String(emptySlotName); for (int i = 0; i < SLOTS_TOTAL; ++i) { const SlotMeta &slot = slotsObject.slot[i]; - if (strcmp(slot_name.c_str(), slot.name) == 0 || !strlen(slot.name)) { + if (strncmp(slot_name.c_str(), slot.name, sizeof(slot.name)) == 0) { continue; } curNumSlot++; @@ -156,9 +168,11 @@ bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL manager->registerItem(item, slot.slot, slot.name, presetSelectionMenuHandler); } } + // show notice for user to go to webUI if (curNumSlot > OLED_MENU_MAX_SUBITEMS_NUM) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_TOO_MANY_PRESETS)); } + // if no presets created yet if (!item->numSubItem) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_NO_PRESETS)); } @@ -219,13 +233,13 @@ bool resetMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, } /** - * @brief - * - * @param manager - * @param nav - * @param isFirstTime - * @return true - * @return false + * @brief + * + * @param manager + * @param nav + * @param isFirstTime + * @return true + * @return false */ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav nav, bool isFirstTime) { @@ -295,7 +309,7 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav if (currentInput == 1) { display.drawString(0, 41, "RGB"); } else { - display.drawString(0, 41, "YpBpR"); + display.drawString(0, 41, "YPbPr"); } if (currentInput == 1) { @@ -316,12 +330,12 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav } /** - * @brief - * - * @param manager - * @param item - * @return true - * @return false + * @brief + * + * @param manager + * @param item + * @return true + * @return false */ bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool) { diff --git a/src/main.cpp b/src/main.cpp index c1bb70d1..ab9f384c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Saturday, 18th May 2024 11:39:33 pm # +# Last Modified: Friday, 24th May 2024 9:52:18 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -181,6 +181,9 @@ void setup() rto->currentLevelSOG = 5; rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run + // dev + rto->invertSync = false; + adco->r_gain = 0; adco->g_gain = 0; adco->b_gain = 0; @@ -464,6 +467,7 @@ void loop() uopt->presetSlot, uopt->presetSlot, // rto->presetID + rto->resolutionID, rto->resolutionID ); // multistage with bad characters? @@ -829,7 +833,7 @@ void loop() } saveUserPrefs(); break; - case 'F': + case 'F': // switch ADC filter button (dev.mode) _WS(F("ADC filter ")); if (GBS::ADC_FLTR::read() > 0) { GBS::ADC_FLTR::write(0); @@ -967,8 +971,9 @@ void loop() GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); } break; - case '8': + case '8': // invert sync button (dev. mode) // _WSN("invert sync"); + rto->invertSync = !rto->invertSync; invertHS(); invertVS(); // optimizePhaseSP(); @@ -977,7 +982,7 @@ void loop() writeProgramArrayNew(ntsc_720x480, false); doPostPresetLoadSteps(); break; - case 'o': { + case 'o': { // oversampring button (dev.mode) if (rto->osr == 1) { setOverSampleRatio(2, false); } else if (rto->osr == 2) { @@ -987,7 +992,7 @@ void loop() } delay(4); optimizePhaseSP(); - _WSF(PSTR("OSR %dx\n"), rto->osr); + _WSF(PSTR("OSR 0x%02X\n"), rto->osr); rto->phaseIsSet = 0; // do it again in modes applicable } break; case 'g': diff --git a/src/options.h b/src/options.h index 24d242c7..977d8986 100644 --- a/src/options.h +++ b/src/options.h @@ -98,7 +98,7 @@ enum OutputResolution : char { OutputBypass = 'q', // passthrough 0 / bypass 0 | 'K' | | PresetHdBypass = 's', // passthrough 1 / bypass 1 PresetBypassRGBHV = 'u', // passthrough 2 / bypass 2 - OutputCustom = 'w', // ? + // OutputCustom = 'w', // ? }; // userOptions holds user preferences / customizations @@ -194,6 +194,8 @@ struct runTimeOptions bool isValidForScalingRGBHV; bool useHdmiSyncFix; bool extClockGenDetected; + // dev + bool invertSync; }; // remember adc options across presets struct adcOptions @@ -248,7 +250,7 @@ const char * const preset_names[] PROGMEM = { const char preferencesFile[] PROGMEM = "/preferencesv2.txt"; const char systemInfo[] PROGMEM = "h:%4u v:%4u PLL:%01u A:%02x%02x%02x S:%02x.%02x.%02x %c%c%c%c I:%02x D:%04x m:%hu ht:%4d vt:%4d hpw:%4d u:%3x s:%2x S:%2d W:%2d\n"; -const char commandDescr[] PROGMEM = "> %s command: %c (0x%02X) slotID: %c (0x%02X), resolutionID: %c\n\n"; +const char commandDescr[] PROGMEM = "> %s command: %c (0x%02X) slotID: %c (0x%02X), resolutionID: %c (0x%02X)\n\n"; #ifdef THIS_DEVICE_MASTER const char ap_ssid[] PROGMEM = "gbscontrol"; diff --git a/src/presets.cpp b/src/presets.cpp index 41941d35..0300b474 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Sunday, 19th May 2024 12:07:51 pm # +# Last Modified: Friday, 24th May 2024 11:59:56 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -93,6 +93,9 @@ void setResetParameters() rto->useHdmiSyncFix = 0; rto->notRecognizedCounter = 0; + // DEV + rto->invertSync = false; + adco->r_gain = 0; adco->g_gain = 0; adco->b_gain = 0; @@ -191,16 +194,16 @@ void doPostPresetLoadSteps() // adco->r_gain gets applied if uopt->enableAutoGain is set. if (uopt->enableAutoGain) { // if (uopt->presetPreference == OutputCustomized) { - if (rto->resolutionID == OutputCustom) { + // if (rto->resolutionID == OutputCustom) { // Loaded custom preset, we want to keep newly loaded gain. Save // gain written by loadPresetFromLFS -> writeProgramArrayNew. adco->r_gain = GBS::ADC_RGCTRL::read(); adco->g_gain = GBS::ADC_GGCTRL::read(); adco->b_gain = GBS::ADC_BGCTRL::read(); - } else { + // } else { // Loaded fixed preset. Keep adco->r_gain from before overwriting // registers. - } + // } } // GBS::PAD_SYNC_OUT_ENZ::write(1); // no sync out @@ -216,7 +219,13 @@ void doPostPresetLoadSteps() } // set output resolution // rto->presetID = static_cast(GBS::GBS_PRESET_ID::read()); - rto->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); + + // @sk: override resolution via user preset + if (rto->resolutionID == OutputBypass + || rto->resolutionID == PresetHdBypass + || rto->resolutionID == PresetBypassRGBHV) { + rto->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); + } rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); GBS::ADC_UNUSED_64::write(0); @@ -1121,14 +1130,14 @@ void applyPresets(uint8_t videoMode) // only if the preset to load isn't custom // (else the command will instantly disable debug view) // if (rto->presetID != OutputCustom) { - if (rto->resolutionID != OutputCustom) { + // if (rto->resolutionID != OutputCustom) { serialCommand = 'D'; // debug view - } + // } } if (videoMode == 0) { // Unknown - _WSN(F("Source format not properly recognized, using active resolution over the fallback preset!")); + _WSN(F("Source format not properly recognized, using active resolution")); videoMode = 3; // in case of success: override to 480p60 GBS::ADC_INPUT_SEL::write(1); // RGB delay(100); @@ -1170,7 +1179,7 @@ void applyPresets(uint8_t videoMode) if (uopt->PalForce60 == 1) { // if (uopt->presetPreference != 2) { // != custom. custom saved as pal preset has ntsc customization - if (rto->resolutionID != OutputCustom) { // != custom. custom saved as pal preset has ntsc customization + // if (rto->resolutionID != OutputCustom) { // != custom. custom saved as pal preset has ntsc customization if (videoMode == 2 || videoMode == 4) { _WSN(F("PAL@50 to 60Hz")); rto->presetIsPalForce60 = 1; @@ -1181,7 +1190,7 @@ void applyPresets(uint8_t videoMode) if (videoMode == 4) { videoMode = 3; } - } + // } } /// If uopt->presetPreference == OutputCustomized and we load a custom @@ -1272,15 +1281,19 @@ void applyPresets(uint8_t videoMode) } #if defined(ESP8266) // else if (uopt->presetPreference == OutputCustomized) { - else if (rto->resolutionID == OutputCustom) { + /* else if (rto->resolutionID == OutputCustom) {*/ + if (rto->resolutionID != OutputBypass + && rto->resolutionID != PresetHdBypass + && rto->resolutionID != PresetBypassRGBHV) { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); - _WSF(PSTR("CUSTOM preset: %d is now active\n"), preset); + _WSF(PSTR("Bypass* preset: %d is now active\n"), preset); if (applySavedBypassPreset()) { return; } + } // } else if (uopt->presetPreference == 4) { - } else if (rto->resolutionID == Output1024p) { + else if (rto->resolutionID == Output1024p) { if (uopt->matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) { writeProgramArrayNew(ntsc_240p, false); // pref = x1024 override to x960 _WSN(F("ntsc_240p is now active")); @@ -1323,15 +1336,19 @@ void applyPresets(uint8_t videoMode) } #if defined(ESP8266) // else if (uopt->presetPreference == OutputCustomized) { - else if (rto->resolutionID == OutputCustom) { + /* else if (rto->resolutionID == OutputCustom) {*/ + if (rto->resolutionID != OutputBypass + && rto->resolutionID != PresetHdBypass + && rto->resolutionID != PresetBypassRGBHV) { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); - _WSF(PSTR("CUSTOM preset: %d is now active\n"), preset); + _WSF(PSTR("Bypass* preset: %d is now active\n"), preset); if (applySavedBypassPreset()) { return; } + } // } else if (uopt->presetPreference == 4) { - } else if (rto->resolutionID == Output1024p) { + else if (rto->resolutionID == Output1024p) { writeProgramArrayNew(pal_1280x1024, false); _WSN(F("pal_1280x1024 is now active")); } diff --git a/src/slot.h b/src/slot.h index f2899d16..e5fbea82 100644 --- a/src/slot.h +++ b/src/slot.h @@ -3,8 +3,8 @@ // SLOTS const char slotsFile[] PROGMEM = "/slots.bin"; // the file where to store slots metadata -const char emptySlotName[] PROGMEM = "Empty "; -const char emptySlotLine[] PROGMEM = " "; +const char emptySlotName[] PROGMEM = "Empty "; +const char emptySlotLine[] PROGMEM = " "; typedef struct { diff --git a/src/video.cpp b/src/video.cpp index e635e864..e43e3168 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Saturday, 18th May 2024 10:05:44 pm # +# Last Modified: Friday, 24th May 2024 11:59:56 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -329,7 +329,7 @@ void externalClockGenSyncInOutRate() int32_t diff = rto->freqExtClockGen - old; - _WSF(PSTR("source Hz: %.5f new out: %.5f clock: %u (%s%d)"), + _WSF(PSTR("source Hz: %.5f new out: %.5f clock: %u (%s%d)\n"), sfr, getOutputFrameRate(), rto->freqExtClockGen, @@ -421,8 +421,7 @@ void externalClockGenResetClock() else if (activeDisplayClock == 0) rto->freqExtClockGen = 81000000; // no preset loaded else if (!rto->outModeHdBypass) { - _DBG(F("preset display clock: ")); - _DBGF("0x%02X\n", activeDisplayClock); + _DBGF(PSTR("preset display clock: 0x%02X\n"), activeDisplayClock); } // problem: around 108MHz the library seems to double the clock @@ -883,7 +882,7 @@ bool snapToIntegralFrameRate(void) return false; } - _WSF(PSTR("Snap to %.1fHz\n"), target); + _WSF(PSTR("Snap to %.2fHz\n"), target); // We'll be adjusting the htotal incrementally, so store current and best match. uint16_t currentHTotal = GBS::VDS_HSYNC_RST::read(); @@ -1397,9 +1396,9 @@ void setOutModeHdBypass(bool regsInitialized) if (GBS::ADC_UNUSED_62::read() != 0x00) { // remember debug view // if (uopt->presetPreference != 2) { - if (rto->resolutionID != OutputCustom) { + // if (rto->resolutionID != OutputCustom) { serialCommand = 'D'; - } + // } } GBS::SP_NO_COAST_REG::write(0); // enable vblank coast (just in case) @@ -1941,9 +1940,9 @@ void runAutoGain() adco->r_gain = GBS::ADC_RGCTRL::read(); adco->g_gain = GBS::ADC_GGCTRL::read(); adco->b_gain = GBS::ADC_BGCTRL::read(); - - printInfo(); - delay(2); // let it settle a little + // @sk: suspended + // printInfo(); + // delay(2); // let it settle a little lastTimeAutoGain = millis(); } } @@ -4021,7 +4020,7 @@ void runSyncWatcher() // rto->printInfos = 0; if ((millis() - lastSyncDrop) > 1500) { // minimum space between runs if (rto->printInfos == false) { - _WS(F("\n.")); + _WS(F(".")); } } else { if (rto->printInfos == false) { @@ -4094,6 +4093,7 @@ void runSyncWatcher() uint8_t extSyncBackup = GBS::SP_EXT_SYNC_SEL::read(); GBS::SP_EXT_SYNC_SEL::write(0); delay(240); + _DBGN(F("printInfo from runSyncWatcher")); printInfo(); if (GBS::STATUS_SYNC_PROC_VSACT::read() == 1) { delay(10); @@ -4177,7 +4177,7 @@ void runSyncWatcher() // if format changed to valid, potentially new video mode if (((detectedVideoMode != 0 && detectedVideoMode != rto->videoStandardInput) || - (detectedVideoMode != 0 && rto->videoStandardInput == 0)) && + (detectedVideoMode != 0 && rto->videoStandardInput == 0)) && rto->videoStandardInput != 15) { // before thoroughly checking for a mode change, watch format via newVideoModeCounter if (newVideoModeCounter < 255) { @@ -4503,7 +4503,10 @@ void runSyncWatcher() // todo: this hack is hard to understand when looking at applypreset and mode is suddenly 1,2 or 3 // if (uopt->presetPreference == 2) { - if (rto->resolutionID == OutputCustom) { + // if (rto->resolutionID == OutputCustom) { + if (rto->resolutionID != OutputBypass + && rto->resolutionID != PresetHdBypass + && rto->resolutionID != PresetBypassRGBHV) { // custom preset defined, try to load (set mode = 14 here early) rto->videoStandardInput = 14; } else { diff --git a/src/wifiman.cpp b/src/wifiman.cpp index e0910e66..ecca66f2 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Saturday, 18th May 2024 10:00:27 pm # +# Last Modified: Friday, 24th May 2024 10:07:02 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -95,9 +95,8 @@ void updateWebSocketData() if (rto->webServerEnabled && rto->webServerStarted) { if (webSocket.connectedClients() > 0) { - - constexpr size_t MESSAGE_LEN = 6; - char toSend[MESSAGE_LEN] = {0}; + constexpr size_t MESSAGE_LEN = 7; + char toSend[MESSAGE_LEN] = ""; toSend[0] = '#'; // makeshift ping in slot 0 // toSend[1] = static_cast(rto->presetID); @@ -153,6 +152,7 @@ void updateWebSocketData() toSend[3] = '@'; toSend[4] = '@'; toSend[5] = '@'; + toSend[6] = '0'; if (uopt->enableAutoGain) { toSend[3] |= (1 << 0); @@ -202,6 +202,21 @@ void updateWebSocketData() toSend[5] |= (1 << 2); } + // developer panel controls status + /// print info button + if(rto->printInfos) { + toSend[6] |= (1 << 0); + } + if(rto->invertSync) { + toSend[6] |= (1 << 1); + } + if(rto->osr != 0) { + toSend[6] |= (1 << 2); + } + if(GBS::ADC_FLTR::read() != 0) { + toSend[6] |= (1 << 3); + } + webSocket.broadcastTXT(toSend, MESSAGE_LEN); } } diff --git a/src/wifiman.h b/src/wifiman.h index b0013aae..4346d9c5 100644 --- a/src/wifiman.h +++ b/src/wifiman.h @@ -3,7 +3,7 @@ # File: wifiman.h # # File Created: Friday, 19th April 2024 2:25:42 pm # # Author: Sergey Ko # -# Last Modified: Sunday, 5th May 2024 3:33:20 pm # +# Last Modified: Friday, 24th May 2024 9:54:01 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -17,6 +17,7 @@ #include #include #include +#include "tv5725.h" #include "options.h" #include "wserial.h" diff --git a/src/wserver.cpp b/src/wserver.cpp index 26031851..98d0db1a 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Sunday, 19th May 2024 12:06:21 pm # +# Last Modified: Friday, 24th May 2024 9:15:00 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -137,7 +137,7 @@ void serverSlots() slotsObject.slot[i].wantVdsLineFilter = false; slotsObject.slot[i].wantStepResponse = true; slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, slot_name.c_str(), slot_name.length()); + strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); } slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); } else { @@ -232,7 +232,7 @@ void serverSlotSave() slotsObject.slot[i].wantVdsLineFilter = false; slotsObject.slot[i].wantStepResponse = true; slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, slot_name.c_str(), slot_name.length()); + strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); } slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); @@ -248,7 +248,7 @@ void serverSlotSave() } String slot_line = String(emptySlotLine); - strncpy(slotsObject.slot[slotIndex].name, slot_line.c_str(), slot_line.length()); + strncpy(slotsObject.slot[slotIndex].name, slot_line.c_str(), sizeof(slotsObject.slot[slotIndex].name)); slotsObject.slot[slotIndex].slot = slotIndex; // slotsObject.slot[slotIndex].presetNameID = 0; @@ -329,7 +329,7 @@ void serverSlotRemove() slotsObject.slot[i].wantVdsLineFilter = false; slotsObject.slot[i].wantStepResponse = true; slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, slot_name.c_str(), slot_name.length()); + strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); break; } } @@ -858,6 +858,7 @@ void handleType2Command(char argument) uopt->presetSlot, uopt->presetSlot, // rto->presetID + rto->resolutionID, rto->resolutionID ); switch (argument) { @@ -899,12 +900,13 @@ void handleType2Command(char argument) // save new slotID into preferences saveUserPrefs(); } break; - case '4': // save custom preset - savePresetToFS(); - // uopt->presetPreference = OutputCustomized; // custom - rto->resolutionID = OutputCustom; // custom - saveUserPrefs(); - break; + // @sk: never used + // case '4': // save custom preset + // savePresetToFS(); + // // uopt->presetPreference = OutputCustomized; // custom + // rto->resolutionID = OutputCustom; // custom + // saveUserPrefs(); + // break; case '5': // Frame Time Lock toggle uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; From 35c92ed538c1f31cc7356e99a61ae052f8b66a6c Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Tue, 28 May 2024 14:47:40 -0600 Subject: [PATCH 19/41] WIP: backup/restore update, no OutputCustom, README update, cleanup & fixes --- .gitignore | 6 +- README.md | 50 +- builds/filesystem.bin | Bin 1024000 -> 1024000 bytes builds/firmware.bin | Bin 549776 -> 551200 bytes configure.json | 2 +- data/index.html | Bin 172294 -> 172808 bytes doc/DEVELOPER_GUIDE.md | 44 + doc/img/4e6bb9363629898.jpg | Bin 0 -> 15518 bytes doc/img/669cd5363629833.jpg | Bin 0 -> 34874 bytes doc/img/e2dd64363629965.jpg | Bin 0 -> 29936 bytes doc/img/slot-preset-prefs.png | Bin 0 -> 80304 bytes doc/slot-preset-prefs.png | Bin 85577 -> 0 bytes gbs-control.ino | 875 +------------ public/src/index.html.tpl | 13 +- public/src/index.js | 334 +++-- public/src/index.ts | 382 +++--- src/OLEDMenuImplementation.cpp | 20 +- src/OLEDMenuManager.cpp | 4 +- src/OLEDMenuManager.h | 2 +- src/main.cpp | 875 +------------ src/menu.cpp | 6 +- src/options.h | 8 +- src/presets.cpp | 1039 +++++++++------ src/video.cpp | 13 +- src/wifiman.cpp | 25 +- src/wserial.cpp | 6 +- src/wserial.h | 2 +- src/wserver.cpp | 2217 +++++++++++++++++++++++++------- src/wserver.h | 11 +- 29 files changed, 2999 insertions(+), 2935 deletions(-) create mode 100644 doc/DEVELOPER_GUIDE.md create mode 100644 doc/img/4e6bb9363629898.jpg create mode 100644 doc/img/669cd5363629833.jpg create mode 100644 doc/img/e2dd64363629965.jpg create mode 100644 doc/img/slot-preset-prefs.png delete mode 100644 doc/slot-preset-prefs.png diff --git a/.gitignore b/.gitignore index 1c1b35f5..e5867c9b 100644 --- a/.gitignore +++ b/.gitignore @@ -386,4 +386,8 @@ ASALocalRun/ .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch -i18n/ \ No newline at end of file +i18n/ + +# WebUI +data/ +public/src/index.js diff --git a/README.md b/README.md index e325ad3f..306ac1fc 100644 --- a/README.md +++ b/README.md @@ -39,19 +39,22 @@ https://circuit-board.de/forum/index.php/Thread/15601-GBS-8220-Custom-Firmware-i - Preset - is a collection of predefined runtime values (including output screen resolution, etc). - Slot - is a collection of presets. -When you connecting a new device, GBS tries to identify the input video signal. There are 9 signal types (VIDEO_ID), which are also used to identify preset for current slot while saving/loading custom preferences. +When you connecting a new device, GBS tries to identify the input video signal. There are 9 signal types (VIDEO_ID), which also used to identify preset for current slot while saving/loading preferences. -To store/load slots the following principles must be taken into account: +While managing slots the following principles must be taken into account: -1. General parameters of a SLOT are stored in slots.bin, where each of 72 slots has the structure: +1. General parameters of a SLOT are stored in slots.bin, where each of (SLOTS_TOTAL) slots has structure: 1.1. slot name\ - 1.2. input video signal ID (VIDEO_ID)\ - 1.3. output resolution\ + + 1.2. output resolution\ ... etc. - Each slot has its own SLOT_ID which is one character long. -2. There is only ONE preset for ONE slot. Preset file names are formatted as `input_video_format.SLOT_ID`, for example: + Each slot has its own SLOT_ID which is one character long. The input video signal ID (VIDEO_ID) is not stored in slots. + + > This allows to use multiple presets with the same slot, when current preset depends on the input video signal ID. + +2. Preset file names are formatted as `input_video_format.SLOT_ID`, for example: - preset_ntsc.SLOT_ID - preset_pal.SLOT_ID @@ -60,19 +63,22 @@ To store/load slots the following principles must be taken into account: 3. Current/Active SLOT_ID and other auxiliar pararmeters are stored in preferencev2.txt file. -The following diagram represents structure of the custom/user configuration: +The following diagram represents structure of custom/user configuration: -![user configuration structure](./doc/slot-preset-prefs.png) +![gbs-control user configuration structure](./doc/img/slot-preset-prefs.png) ## Build and Upload
    +>***PRO Tip:***\ +You may consider using the latest compiled binaries from [/builds](./builds/) directory. + ### Using Platformio IDE (preferred) >***Please note:***\ If your objective is to make changes to the Project, please use VSCode + Platformio IDE. -1. Just clone the repository, open it with your VSCode and press Build/Upload. It's never been easier :) +1. Clone the repository, open it with your VSCode and press Build/Upload. It's never been easier :) >***Please note:***\ Platformio IDE enables upload speed limitation on ESP8266. Upload process at any higher upload speed will fail. @@ -109,7 +115,7 @@ https://github.com/bluemurder/esp8266-ping.git ## Translations and UI locale -GBS-C's UI ***(not the web interface yet)*** currently can be translated using ```translation.json``` file in the Project root directory. If you wish to add a translation, please use tag-SUBTAG format (IETF BCP 47 standard) for locale names. +WebUI currently can be translated using ```translation.json``` file in the Project root directory. If you wish to add a translation, please use tag-SUBTAG format (IETF BCP 47 standard) for locale names. ### Platformio IDE (preferred) @@ -139,15 +145,15 @@ python /scripts/generate_translations.py --fonts=YOUR_FONT your-LOCALE 5. Now you're ready to build and upload the firmware. -## Web-interface +## WebUI Make sure the latest version of ```node-js``` installed on your machine. The following will do all the preparations automatically and it's the same in all environments, however the conversion scripts for Windows are not ready yet (see: public/scripts). ### Using Platformio IDE (recommended) -You can use "Platform - Build Filesystem Image" command in Platformio menu to get the web-interface re-generated. Either you may use the direct method described below. +You can use "Platform - Build or Upload Filesystem Image" command in Platformio menu to get the web-interface re-generated and uploaded. Either you may use the manual method described below. -### Using Arduino IDE and others +### Manually build WebUI If any changes were made, run the following command in Project root directory to update the web-interface: @@ -155,6 +161,14 @@ If any changes were made, run the following command in Project root directory to npm run build ``` +#### Uploading via Arduino IDE + +1. Download the latest release of (ESP8266LittleFS.jar](https://github.com/earlephilhower/arduino-esp8266littlefs-plugin/releases). +2. Copy JAR file into your Arduino tools directory (see: "Preferences - Sketchbook location" + tools) +3. Restart Arduino IDE, open [gbs-control.ino](./gbs-control.ino) file. +4. From the Tools menu, select “ESP8266 LittleFS Data Upload“. The contents of [/data](./data/) directory will be converted into a binary image file and the upload process will begin. + + ## OTA update >***A work of warning:***\ @@ -175,6 +189,10 @@ Make sure you've enabled OTA mode in Control panel of GBSС. For more details visit: https://github.com/JAndrassy/ArduinoOTA/blob/master/README.md -## Old Documentation +## Additional information + +See [/doc/developer_guide.md](./doc/DEVELOPER_GUIDE.md). + +## Old documentation -- https://ramapcsx2.github.io/gbs-control \ No newline at end of file +https://ramapcsx2.github.io/gbs-control \ No newline at end of file diff --git a/builds/filesystem.bin b/builds/filesystem.bin index 627110a0c640888576999e3251b8bb23dc62d158..e1a2d9db3245ecc812e3ca1ac7e624086c6ed24e 100644 GIT binary patch delta 25923 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 Pci7{XSE5DmDh}Lre@FQ+{skh& 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 TKmxZAKm+jKgAhQM5I_MCfiOB1 diff --git a/builds/firmware.bin b/builds/firmware.bin index f037a7ade372315bc264385d6b0df8473759f6a1..5f0cb167dc7329e3c1e874e1e0030f94dedb7946 100644 GIT binary patch delta 109453 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 fC$ods6+XihE|&A zQYVGi;o*=NWzbEvLsjh3z;>L1Q}8KmLok1q9xoz|YgDu{>1|X?-A#k%Y5GUz9Qg$5 z)rZ$z_|v3#$6|Fh7DaUqeU8T7Ka0NZ zY>MwkdQdsOB304>C9TE-s%Vg=-xXEtk~ce%$A4qwHNX=E>Ax}Rvz_u>SG-;RPYe<$ zMzfG;G>@j%Ja8GMu(hdEo$@E0d~>HbWiK6)N%Nm0e!!VgUlV;sS6eb+6@R*`#$Sis zz)XtlnEY551qt#>G5Z@X&i z@KMl|A7a5smG5YRnp>H7kzS+L9{+g2mWVD=^#SE_8@zDA--`%{+pJ&^UsiyfMBa<@@0!-$mnO zBt?JJg<)|cAS@1m@aNkt8_W$s@`p$VL{n`Hy@rc2XmUZ;XWD7?jV)_H305Ep=xfmn zIC(VX6*xuR1} zBDGEvI?Y>KapOmq8c#XR+j?Sy!0i~$N~GE^FbPUwH|oq=)8s_diL2u}&D&<+x(}sa z1Ly_nD#Q%O6I}FOC2D~lwvQcag_^~>q!~g$EDH7pMuD^m=_bkBsH5be)R7-h za}UEm=^NCJKj=b|vrqwE2|pECZOwt{SPL*)%2ma3A@E1>cRmN=fZl$<37ir#nr0qB zQ)gHw8j#w0!C3RFj&SukQ0H z99V#6#WbFMSdCdwC&;R^tfb-P)4&%oDc&W|N>Jaje@FTwVoKZH@|@1H4baETGr9qW zrI@{P73eHlDKiE(3#HkeZ*4$5?#8mNHe9Bo@UR%}?6N-F?ZF5{@gS|m)4UwP?3t@+ z>_@aAF|axR8ki#9gZmF$1>A>lj{*5!gZFv|9v{Q4fTRCeZ$ZgC+zJ3Jg_{gF25tyk z0^Fm3xesm`+{17W!94=E9Bw|`PEe4}!tIBn|C`|Mg+IM#;yn-UR=CIT9S>zOj@kH= z3D*OO{|9eaao4%%6t8>IK6vmH`%ldYIj558nDAaTP}nWiuz5k_8J0GM)W+iQ=Hjr_ zg4)PD&;@J$BGzAm1?6m9Su-o32C-JU&9g{h!@0QnFaCroTE!fok4e7};EfvKP7fge zH4f`hYOeIU)1_&2j5ihr8`GiRvC~-HlVuTX?%VE6{|peIwz*)4IwA(V!#92XvXu}w#-Gzi8F(5&iP?!(RVK645er;>pxU#=#&jG zg-m44D;;v*PC6%;>)Nr%%7;7EUO2~F%Ru9_4L!{$zifb-2-6p->b>==KA1B}HVr^9@JLHV13nUv(aAV%^= zl``cnmeNByO1|wTz!qdaf68F zeM>OkLs|Y}V$-x{A~jnSf7KvtTqEeIOg)ihk#2_qfV~7gcF$5&{3+>sYg1r)hpIGn!$>>1+;fPB1Bv! zEo4A&qVa}zN%BUH;;KJ-pa;HXXn=3?*E?blA0BclAFJ5*OC%`5AHi`y;mB%?k)v%e zHvqyS0MYR4-q9MqwWvBA<1D#%xNZAm@P5MQZR6HW-Qo)eq+Y#%gTHWzNG`4?etRJSxT+pFESLgdM>%%?NU z5n93zw#5rle`+_$jGcl1+J+mipW3jJ?RCk=JEjY2orzEEf>qoKE^odRZ=kFG*4ALN zZF^9{kE>xo;tqau*RPRD4Or^8R-1bZ>^5J~SLw|8!O|;A@q8BBTYd@I#hsS-ndV&B zDevjhuTpDF^2gZVq#Bd*pZP3xRCAkUm9)pi>MGGBr-jCf2KFWW1%*3#WN-B*CzLIF zD?yY9{tJ}mOO>V?XgbxgFDf@LUc34liFnh(*`+04YJVtr{ zUKTBIi}K~Y>|ZgV)SLA5rE|8o(UTqjoVm(E5heHOC5g1k-{wNRr5n518T$bxmw zvs3m{%V?Csru`gyq-Q4bmrWY^>ECoWe?o5#i8&u>4he%Do9Z^)YY!U&9JMDaeH)>e zenmFMZ|ySY$DkX8FyL~@8*#8j!{EyTrKG(vLZ@HSgMk}Fx87i&n%j^IJ%LP`e2J92 z(Uhs^i|pCrx0TBaS*FESnOba&G)q4@&)n|V&?!~!C4-fRZ`rG_^o&qoXRr@HtS*Z~OBviJ| zER@DDZfvtxyTKGxxXlPY&Ko}xO5HlUUtnQH*c6ykS*yb?7XQbz+ehmzXaUD^Hf!Vj=7cmdEVGs;tlqe6<%*>6#{+`( zjpmyJrxlQVys~i#OA6`4O4pTUh@_0IV zRM6Ste&EsSU0{%d`FGEpi>7J!Bkpdb?aq%&^f=%bwaF7YEUVNBD6(YNbTJPs5*U9O z%_0}knNn>dJP;Myj;itst*XycfP|K?@Np&w4ckG+(SD6W{Q3V$HBDKQhDG*M)u!f( z``aVqB(;fWbc*()uz3A=PxJN!7T$nHNeffIy3B>{#UeK6 zoY0uiz72XdnN9R3ZlIwwWKM${wkV_Dbog;eAi7~ho0TzR8{ea6I^uxcd=?C>L>IXiT`r#Ru zwXI9~IC1lipR7OA!Ro#!3CHH@eL(!AIOWa%!vW>U@c@gF=tpqP)eTK*pI84r#^wa>TeNm{t{7Pr;$}Xeb&+HG> zlaRMDx{vLt)(H)3AyQ1L$q(gy z&{4DHw&=V7ZCY+JAY_Um#5$-;?1OL&J|0iox@W=P)GxPgH*Es`TQ=H+lvAV4LQ-ur zOyBTb7m3s;#kST)s;{DHJ-8!#j9M`@jK=?~F5s^?&XlH7U#ViNw&oQIqJNE=8RapY z*C0kTis4t9U_h_DR~KEUSVOu*rz#JlGN5y9c8fl8csc(SS!9+I`3=l7kwrB(beAS| z)AmoRXP!u>1DIm@L&co8UhHhM38gjN0cy9kvr{~$sy3}gbV=T9w}?M?VtvNY&ew+a zFVUqD?xIzP0tUI2ifw*TiMq+Scs&n7WDee$a2aq3aN+a~CCcYNQ;t8xQiSEZH$Tk! z2yu?9|kZXW0lk>GURC3w@<==kt3tTcu#8x>a?b;YPlx5^cNj+DkBc6a5PGTJu#pW zKDt7Y7yYcWJ`Slam4`(&i2ebmbcE;hFSDJ<1+7w@fl1LC&_P`chF5Kzg-hc)u`z&Q z@X3oB!P?ddrkuRa)UDDDol}+eSbt$ztrC@6A z6dT*}HZIH$YCyx>tX2c6Q1{6r@##RPVyEK-klrj$$mo#NbG4cd({ zt^|zLjD~c{MUtZa`)k~wa!glB7#%_S8=v1>_0nF5xRRvZaYN?H%}aFF zukfKB!v~HqdP(PbFM}9^?UvoFwNFU`R()+^-9+Ev-kJ4&H)fWee`HW%R}}GC_J&gWbZ4H!O*dbPc=GmvrX`5 zObW%U39n|^U`7MS%6NsoPH2r%fHUrMfYGb&p&m4&#mzNHx+BEM#kdv;zB zvh|nJ9SJOwLI;>ZK~H6%N7##XU`hvW>4?^rl<>skjk?;A;9V4T!QTZ0>hPlgIRJB; z=f%T&A)TP#}ia3qDDOv zHw&F$LglT7|Lo zUw*C}T#56X+RSW3H3j9sCZX zUZ2JeFy5zW9}xG8d$5^7Kd1P|9W>@PnUY!!rwl)O1OSSk0mwVE3Sl0gnB(y#+Uk zm>-F-FR;aJ7ed4(Ds9xO3}a#K+hz6-3%1drcBlcQurXm+G&!OfnNoU;+{_u+aT#Uprq_oz*;DetU? zDCtBMqn8Hu21EVA&&*ZvV4;?y0&G<<3mh&z9%-wB3N-0?1HRN>qpXnrsS4+Tz054G zu`2w55}{G_&kjK}DI%c$lsh}Luwt3LDjr0eoxzx%l*Ug{#%=*zIt1j`3mYgUCG?uk z?N#A6hXz|0Onzsg03x4>!jL^0+@p!AmZrCU>E3^axRSPN_QdC`wxIFmn7LTxRzD9G zM}H>oWQNkma=;^rTTeV46Hn2qz0taJ;ug3 zbgFcx!FSj0Y0R;;8apv01FK>`!|sG83bLwia*s+1y&uuk+r9Eq>(S^E+7#EDjm5e% zp`Rhv$p~UC2U2bTzw~Py>&%ZAcYS%*Kr3S>wM;yU!(OG}d6x81es@81T7LCDW&noGe~B`);A}>vVDL^dz)y`LIUOv>3bupQX?m=H z_*-?}eNfES^B<$KF}dW%sBCsnlr9l>CR3}T4vKPBRP7cv8||B{v*v-MOkBDe=Nq`c zFbXr^vM}KGMknShMI+VBQJyX(`Q@pR^`CyKPXq~mBezv$P`{7IP{W^aK0dOr!mSU; z=M#rw{G{-r$ik`=8Y?tZbe1R&A)&LpWcBV98cX zYOXf?)%b`e)tv>y>HuC<5Vfi}Ts{;fRzm_XbrF?)S4>G&d|_1vamP74(28G@t9R2isFf{9*h!qI51hX*y_%|#im^)B?5;8B=CAv)r7sZ_rhp9R`}Zt z)>rZ7w;2QxCJCy=*ak7CQ8YD+(UDd6fsJl9T6hA6;TXKZGj%TaOx9j&7w}b&;zW6h zq3Tv`D9Cj%XyIqP1NOSrS50+-aWTVSfdCMVKT&5r zOW1F^A;1q4>K9^zlnM=%rzpycQOc8Rpovu86{WnhhV@R8Ka29IZwc3U{FbRn#JK_n z0L!P~&__Mx8m=_0VFo|Gf-8Yfus-?xp$J>Wd$uDtfc!1K`>Fa;VAUU=5|yH_aY-Mu zkYJ4LbLI`IL#SF82xK;IDMdXZ4G*$aT*80e*+U=oF!apu)*fhvUO~J7>rH(u;f!4mKuT7002@xQ(-fPqAQS>f`86 z?x^~)pAw&BU*q5&)SL~0BCJ{77A)R-P|k{A0!6Dj>dw^D-Ou(pnrK{*l0VSH_%|sirK~@|@x}kG`^by5ti~l8W z9E2lZoaW-8f&xWRSM{nB#0&26*{S;R7TKZI;Y0+fG1BHikKGyrSBn1uu?{Nrpre)j zd(j(c*=$@RvW4`I%88u}GAkifR8ZabR6Hl9^(D9;;10u8!hHy*74T$4l~8rU53Dr# z7@W|ebTm@Aw3emLO8XIUJr(yBKxaY;P)qSbWqE%Jor_U=FI)orGqlnjHdpA(#eU{u zE~dMK-j`xxkZ@TfN@T9m^CeN@=udfe3^3v}COr|QEPopEv_~t|1CfwVlty42@(~c& z@N5LFXwzj6C?7w~`UI&XP3GDtd8A1>{WKfsSmkZP%sTb>AS$z~GIdwhTQ_!hyJTTS9wkMFPW#rh!K z0&h9pl!j}4J|f&JplsTMEyso@@DNkVBbm>qE>BrIwk)+QWy`te&#g_37`|n^ zIF3odCZ+#+_L3ieD@v(d&j!RuuSb=wGFwu9GaodA$RBrFGqfw7+oOb)vw^r;Gie)f zh6!iy(HLg1WgDMrNzF=~0HZ&)s&Mms9kuTu6XZ~9`|&|0WqvsmgVYEU?IsZ>Wpg>s z@oI|6R#7%03sp@qja|8b6=Ij9C5`$MB_>$C$%77gkRe^hL&-U2IJ7LdZ!y@-=0UWp zoXhR7?lRk|o%{VNYu6{#zGqGwv@bHOy7ufri>$-;hl5=nGkki(7(duS zI4(2m2Q@B8%d)FC^g1VC9UI>WtRj@(6xH<19&>Fth$T{b6m9jj@$%Rxe41-h_@JmB ziy9XU+FwlUx>u|k6R1u%<^a^BKP%>xq3bun<>33ZC&ZjAy#4XE;C<>pVon0yLln`G z6GZ`=#2kOT=a-8)t^2`}utv-|yiUyd3I8+KiaAH|u3atW?85uLC&iri@SZA*IV&;# z9)tf=cpqLR=KL3L=VM~dHu}c|iWU_J_3|> zx<&O`KaErUIg_KVNQU>=llHBOFeoT=31Go6mwSfFvO7eFC zRM)$$?+~E;o?CqTT0r>(rFfPArKjDHJfaleaf>gx9oN*G9|xrRvzFvjZtL@aOpxDn zi(A|aSZc2LoEyVaKg3p*pfyx6nrhKGD~CE2V5C~|^h|)o4J#~dpjfZE#r4;gMm zgaA?8tNjY4SxE5&0jiI+K#;>6}5FaV@C&1whq91nQ9QcUy}*u<|bkaq_jWd^eS#PAl+Y zcl|f}fu`$VJKa1#)@(^DDx|Xz(({mdH9Buv2q?Zp?6rGWX${di?U(Iu-+p$Sm^*s^ zfivSkQ(4}s7w&Qt2Q{Teq~;bD^Bj9_Nd=qop#Txv)RpF{ekHl_@@a#arQ56e5r$Jf z11Jv`*Z@`Ej9|XYdrH%mrPdWR)qWtQ;6aN{Lt3Sf2LpL{;7+z*uoZ)J!uS`_VDBFr zk;xVaGk^`z!V&2JmwS^|&iJpBbE4p;uhiyjM^n=y)qkC`wvu#Px`j}2(`o-Yu3|w8 zu~nI*|BC{yY{%7X8jeG5!$DvL(%2|{$f<3%^mOz{w;>yIn%@|u?|rx-BaIkSnV7+ZX+Hd;~e{8J&DrNmjQ(9=j z&DCgl8?o6=EI+JO=I95?3kowOJZriD>X!PP38Y-6?la5?%V#9Aqh6wHUNtDk72Fw( z#d4HxhXP>3?q-X!y>%jX`P}qA>=ywOsh-@etKMHC>*Dd#-V-B@mp%Q*? z!0-!3uGxB&MLz4F+k$f+{;EBrsN(8w189MGx6?pie78X#4?gJJH{Ia{psVedj!-I3 z8_KqzK5Mo5tTiZi{g+vSrGC9V^JCsVrQ*M=e*(J4H}-Md3c}z=$LRy4<4qX+vTRVc zZu2uZuBhm z4;#DbEYFY8e+M#+K3ISwUZLm*!FlnEeN^ryH~*p=LsWXi;KSu~x}od3dut+Xc{tY7 zpot37&D>CNczr}=L$S4f$A`+MXPFrPi~pGx68eP!q7`PAu-`gIZ^YbL*kAqLU#WkV z-5Gts-=03;d0`o(o9@e4x_DvAhK2q4d4DDUIX122yuUeJEKE&(tJM1^ z3?b9GpbJp;vkZtV%`zxGwlGl`zfT#6w2Xq$7!D@@OcOr{Egd!wePR}ZPl|!3`QLOg~4`cruoohwbYP% zKT?^Dm2lwzbtk+hn-7hZWCO*JzV-)$LUo4&B^|mN{_5ud7;8S1C9O7~0{D~dFMkBT zEc2lZ&;|2DL2EArJ3zG|}dYqmaY5|^E5K+7oY1joxou*z(rYg~R&}zvaLkSljiH`#ywn9`h~n z;!j9T?@#IVZi-A#gm4*t)>L;|n6$wlo~p^+(LDpU751x7z)K!uFyDM=zBINh_LN1cY3y-W!}YXL&bWGNufBgy4WoD3s=%#B%>GR zaBDMB-I;VaK6ib$_-V}yu>I^;-*wkS=&C-dF|+(5K_#$`ip0WLB;sVt`zW*EpbiO9WLG(Q_bgb$h}p3($)iX+8( zizA!Dtp~K?@S6DCx!vM=PjTdz-8BYXRhg$a7Ef_zT`i7Wq7_H&Hdt@?I;mR7)9EZb zv|>qvJiCeXkRdn8S1i65#ZoQT7AvPF9+)o5Hf3IN&gY;UK7*DUi|?sb;QXypp2W3~ z1LVho7Ps~MhcIYdA0)5EiAPN`;I9;8sMbAY{fX$Hvs7z-lG9Kpc>i;=AxZ!7d$kc?<^se&?#%pMHoJeJptAyh42|dS zMu0ee+zo|swRZW24(m}OI?44B^3APE?pBtZB+WBe)ZEi9aY#+!v7p$0Q*Ykk_N5+6 zW#vbkm8Z8t5;hz)J%JhyS73t@?@e$UDk?EfK;Si3EfY{L}`Xywba*xV9nT-=Gc7<&V0$ISvRf>%$2F{Gn_P*Qucz|39|A z1TLzo{eSKm?yz`g1qX#e=Uz}iLAiq^80av1M^sS3B{ej$GAk`L+pSUS(jxWdlE-?j zaLG0+x3_wGtpvTKg{5Svy;_P^8k&OO#xno!xdUdu|2v=0nS1Wp?%B_Cp7WgVBlgt? z!9p+rwgfP2w|@l<#xSd47QoDgDS^p{832<669Hp@nQ%92o{puZwlW`M&`e4*t4ckM zrTyzlGx+#uY=A3M8x}S;WNnv9?c#62yx)VK^{2BBq;6r%*73EaHh#1XrxvITtaFub zYmA)Her^XjQ?as-sHLI~`O6M5dz<>P2@#a@u~0!@90e=3L(Z-3p33p8eiWNr8x+D& z0|%nd5xA%q9WyQa;44+$sSLFh^$hwd@5D(Qr%r;N;XAbk2NFIN>y*IXW?}d|TfkF! zC#y>coglz@2eYq5dyMCQLwoq3iWm<6VGX3c$?E^x*fp$aYh!^43rBVQ`Dz@OV+4+8 zZM(6t?0dEW!+TUTAabON=i($jD%w-A64pU7UWVZ1xwuU9Y{eNZZw!FooXbZ<`zq&p zDiKyVvSU8o7mS1Gm&Rq`|zl6UnA#%J0r#%S2vpJ)W{5wJ7*ZeQwCrOSn~bIR4Z+< zI~-zt&=Ww%l;oA$_Byi3UfyG`uxR?N}jm~A%Mt;C=UYhOChZ^aEe`1$r5KPIll5!Tpc z?@(a_AiOqz>h_AOgCXu9W+N{qZMJN+q9HbIPWEoYtTGrAJ9dIciVkerjipvfPxYiH zck-u}ABpUfi8)>je6cY)OiEArMp92>1(MQ}fdqp?gz9H;7QO&WlbqHrSmLBJY~uF3Je|DFjJ02!zeBytUiK(*R9vwDOOJdEdaI|1+VMEK z8=69GbDXekn{gnr$k{Gcr?EYl;zXgd~B#){WR#$u>^g;6~VZ=M5Ko^k5yt5}4|=U^mUC_Gm8EA~o!`!~SKJu-HtLF^UiHe$oR-p-}HI;_la&s^la@JcQww=s6*M~SVVdUiZpKrukke1@vl_XUx z3}xpF$BD&lI$3eZap2LdGtgTAk)-z)vvPqgCeJ(4Mud8R`b2CS*#x@j#vYnQrP4ZY5cYJ%D_6z3TSt$3Sr8u|4O`tP^7+l+RT*Y4;j0*cJv(V1P%)sbCPs#fZd^RSR;A2{+ZUYp8+^M&pK z$Z|}))59F-4K(8eoMIVb_CT-@vr-10Y<4P%?Cd6tImOuIte50j0qOI7a^-+s2aa8X z3}yA0j$TrRLr1-rL|m`uoY06?mO46Y+Vhx(#J0_X@igi5>>VwC*eZ=4#i)XHj-n4* z<+rxzq&mL?P0mlyn{ha(K%C>DDs(DcyG3v99o7r(1)C*%!dz-nD}q?7{(sEBgbfZW1E52ieNlJuv8YV zj|jvu{NxQfFK2}VwXgG#);6gxpam4gQ4*=wKX8I(q2del%BOF<&vhrgt@PjTLux@#roK|Y+rVLozD<|ulumCfy}d~dQSS**(WzOgu3EqSr_7|`-Awe3H! zh@E~;bWG*yF#X-N3B881NAUR+wyEonCck8bE4e zSSwFB@=~vfi>erJX>Ai=s4+*RJIYX(@)szJTHr|AB|ch(@lwdeWvYvrf8Wkhs4J`; z?WCS+SY9y~)7Wctzz3YI=Ni=9N|^4mlD$9Qtxt34ucS1&sXN7JWxWg#SAo1ds_Fp;HbMC8{f^4fRi27PjIW8+LQwJ;QRl{xLny`V z0N*oY9paF`-duE`#RrdJ=(Q@=E0$0X(4DF+R(4$5(l!>}xkg6}TL3*%(h{+hHRbubZZrlK789OlExd1X-3@C8K*$`5F z&K(T>*0wBd3j-P-l7)53od)zj-RD%(JtYgRlFsVyMY_ z#LQ5l1F!q(AMC~aIu+BUvP0+V8Re6hUrtA641f6rkfg>*%foQc7>jbvydHP!s@~b z#da2goB(J}&g(e0HT(e5-S-$a`)ft-r{FrhtaF|)6X977^9;dqvUe=(`7l@!Scs8Rj{-vvgL&9$19GPBf{`=WMtYzzl=w{9xJ*_88bBV17d8 zn!bRz1x#nSov?3$Sq<|H%v_ifn0%N4Fm9L~kf0b3lmB^gz?%ij@rT3?Hio$JK!|?< zRyp_=;9`K$HS-5jwuT(o^5KcCAEuZquYEk97*Z_qXW)57zc3MRi{5wNfmj6$OZ3Bc|B7=KZVzq{y#cu04buYi6%2)8VUIJ9F)$D6xd}Or z?nr20N1#wn|4LMk_&xr@>5RFOR_T1eQ ziD&TkigBm2f*YH(LK+$-4`Y&j1;~i(W6aKpGcK#2U6#E;|9^wxnGe(%ygV2o!1)2~ zszk={&sfR~Xzv4o10Uusz6P0Hsj`G`w%}h|?c4+|K!&HXL_KejxLfKfGZ?F11iP|? zf5j=M2i?VPXg3%5G;pdiv^Dm!h9Fq+Qsr#*w7qE8RbS<7J;4l>0}pMs_8M4H8T^aR ziM0mVtrxJs#@L%+3}ytBr<{d28qDyO_R*enPG#2O(p3IQryF8il^NnR3CDF&a7KYCH^5NUH31p4}Z2@jQf}#_!ruWk7ET^ zE~1(;)M4OvO;;9lEnA0M{|U_#*BR7b>YYA}J$BjXpZkj|X8MeVEX%DcBZ@2TC>|PN zvS7<{_pLEe#TBz|jfpX#`VAnNq3a3mb8n4d8(Ck)JwOA*`-6B#H}X~7W#SR8KtnuS z?V`7T%!vj5uR!mPX)4nU9sLA1&(jU)DE#B-C>}y;GKFXp2jS%~)(?sHL8IorR6UQA zDh$ep^~DvOuQEfwHT$o6dK@VR*0*1u0$#>|cpK(Tn2%tdgK4ZdT;0VWqzfOJq71^5 zjTMVc5eA{KvEpTu$spu5R;)9H8HA~g75_%51ambg^MsO~0@2>87rJ(QOZlK);xarR z{e$82AG7bTb?aW93a?Z_7k$Eo1(Y@Q>Yk?FZ-&c@+6%4zHiH~!H|0W0G)^M;Zni8l zwgu&NkRuox4#8xtL4Lfw8fux?RZ$*qkF@*483-sVvQc?Hs3SP4`n~`~#*FsMgyqp}%R9F1hR6{C&ZXr^VIoYdy3sM!WTrRMmV3g;M4f@FR)LS7ie?;=b!H&kBbqio*f$*~$FjfO)M_wj zWevDipv?**X9%X=9>g~T2e<#}GlSUWrDHH$a z2GccQ4WOF?G2dvz{HLd5)1GSde|&vLjOv^bqhtf?HOqStX)=#>we`CB3B z)rL`!YA`5}-qA6&wfCFV2|>AvxhF!VLLJi)LEF*{?P~Jp%p(D<08MLp1i+{%g+Upd zA%@Fj&_;HCU{f=;@3zWB-wV^?I13a*F?zH;72CeUvnU0(JQLMkCn$7|7EZ9c0VNf%etlfhD6vY?x zh$-{M|9*d@Av1rix*cnZJp)ECF55;4Y z(x+CxWKfc>97z9ireg^9iTv7TK*_(+3@G`3G61~Q3@+&v_P4y5t<6T>+k_5PR4v)0skcM+!GL$un7p z`razGep`T^Y2c2tThDUA7dU*l@#Fyq5vj)4?1E$2ZEe_P{O_X)gJCr!KfEw0F#C5W zdpE!=gb|}QK}qWCpL6kd6>J~4gp>_4sF9e>pn+vXy$|AZy%-LrHnv{y)Y>EX{CcLh zQ+@9|)M|M6;q|OPs(&`8Zc)Q7rLKhn$f_{lDUicoPq8DaGym{-{PL208q;BD3gQ;twak3-X!Szg= zjV3j8Bn!l=rxCAz!>q-VmgR@;zNX6eh?DgO9f8BCLNos=W*%)&y=xaj_QXeVi=W3U zKB4qz00}&mFu`YamDP_+&JHE3Ue|`{(nG2P>vLA%i}4M}XR&&7Jp=0FUuDHF)^4h2 zIF-uk^G_np$F^t#>e*OS==nmtk65c^*6aFdR-M;#MuV)ArP`6JNywJ^4`fS~^(6R} z=UKM2jCzLKtgJYXj{%{eo+&L+ma~sJc)X26T`xN?mj$0Bq5g_-vec@^u!_9nDn`fc zbjz1q*KSV)t3(Go2ibK1J>n3Kp9C9b{3W2XOR$zLkV>;Ld8@taeHHtKUU9>O zJ5b2RoPZq4|f9ZXSR2!Uu3)SL)^M^-NQt_TYIr z{(bsTCHH`!+y_SUHc#bP?O7|mP|3M_Ym?8TJ|~}7WoU}1-$ypp)mB7Sp#fUjXF80G z9uz**uF;#T7^qDTdTSL3vx8{21sI`q*iEu$%~r@E1Jz7~nTz*XFw6?$h+&jRet@jP1< zKm=HRL@gY}a{$a?80Pi^+&1C48iu(agkkPGU~Y6T$NM6f&L<1|AOtw>#4{fz2j&cF z_bkkLwr7XA3eyf_3@mFO5(#64iGk@3(*q_ECKaYXOeRb=%n%p_W)uwjNK%KHKPTBc z1ANgKym!`CD>w|NVD`Z5{QN@DJNJ+Ur@`zfc;C~6`1)4ub}O)A^ZM*dBY>O`Q}%_J0@dMs!^rmzjCwD{TDf8? zV+xq%aV?A~aQ}6t04Ss^t2`?x84a7}=f&*ZGUkQ^0$lL*FO=x>D8jQ@Ke#dyTi`jnR!(M zQvjwC;nu_%uO8tH-O@)=dSoihe0bgh}+W+<DUEr>>%+L}M`{>C4`yuwn)@Av~cRYUmHW*resoq0B- zY@-)YJ+)egzZpjy;#1h;Xm?-MPBi!%*!vUgedcBDc!U2OyO#MVYaGR9#a2s*2}njv z-x-Wn7@AzZPR4nWpmevIP8tpJT$ZJ7R?~6B3h^I$Pi!=(ccF^`ruq_(c0FP=Xmc-> z9WwIPtEL}~s4N2%3u04RF^^#}m9o@gtm?9c>TiwmG`*)pSQ)N}@hCVL*v1D6mZ&?S zm54ukL7voJX2doXyHq2i59%+-<2$mdzSvOxg;9j!Dx)&xvU0G&{~wkoaWr$7d|COv z!So3n*k;&O9&Org6rz0i3PVI!GL-qgn#xjMJLaT7QQb3j3ACoQHm#sk;hEg4fX9?}8c zCU*(s&PJ?Ne+M%L?fqa3PX5g5{xBDNn~y625L-sq`M1L-Mh$=STRDl9iZ@#QFBp}; zCl{-qGaC4RUo<^yL>H8Mv}4EV+s%2s!+gF-eD0`4eWbZMfQnw-q-;m~%T5G|LdE{q zVtO1^jtzbVN*NARTDAK{|3gOg#GmmJ6p8^$?TJ4M&8|e&JwLy&zacLj1G!!LE>Fp8 zmrd_m7%?nR@zPB;1^LQg`Wv+ZE<{UNWte#1L`t(vf&Bz;g7<;an zMj?%WA~$2-+y#P1%D2#V)eIJ>azk7#>#w+Kzh=hrY0`FI^XC}lBW#<`pR(vVjbC#I z+u6rUB&pn?thy-IVqe9dvzR>S3videWAA4zrhY8rT0*e8FSBF?%tDN0Ou!J3h9;Pj zjcP<|XI@2lH`|+?w)jOOcF=6l9Ah7oh;-B=f63DO-4YsqQdu{an*13HrTwaBiS=Wt z%wg1?yJ)iOzT5Q-AF(jRK4U~p72~)BBGgkC#6H4Wq*6UXa%zGs@2v|7DPvIA7E5zaYP%$3158 zHxh`hLk73l$ak=2cx~@xZBm1}<6?~`z=lM)&TqcE$`}E5rLO`^%W$Q+5k;-?MU>S6 zHx|jOhb`Lk&8A-%QxoYSRI$z%ZDc7(DtFnmfqh+RyX09P z9Jn0R6$`M(;(voVBW($BP5;!xTyy0kOqi@9BPwSoD+zYy9CwO1_uJBil+?P?H(vKf_kQ;R&ZswGacR2En2iy{%5P(iv`jk*Fv|Tvc%$d5~%YgWid?EoAzaklxIt~C||a?!lXPq z#&MoQFpd=YncW+fw#wD50cnf@37|@!vWU;MdWhlD9U?$(wXPQreAy~l4XAG+S}nck zGefr!`@}*^H8JqzE%IlrY?6D^A}?Ur=Ey?zWzLW{uN8!Ri1P>XVWMR4H*$Jr`ADlg zw==Vwkdpd{#a|!bSZ@8j4YifF;!4Nl#cgJkYg# zX-&yVEQ9a+=Ws(y7IHZ7b>vXbAXaZH zKdO5k)a+oJ)icyi!_ZD@OJhS^>wyWZsS2UkM;WfS)UC+9R%$64&)hw{0h(|-0`Q6+ zU@Qx8yQMln4C(_d@@UqU>Jp1gI@?m^@`5clHl?$8I@*zSs>zoz1AN`g<*DuXHwJ0GRqWw4<`}@71KNxUn78<$tRsW%*z2ctbM+TVDRLGkw1L)N-8Gf<`2<0{7+i#}*6G)n;<5LkSg9;*?tG{2=fnFFk{nXg-eG5JcMt!u_`(h{uI6uf( zz#nN8m$wv~4cI)(M_2~E7RemYL-I)%QC9f}mVv>R>ToXa*}uMG3gZqu-SHI@$G)N- zY;5?9edWR!H}+PFyW>0Y>^o|0qxfj&cdC%0nvL(Ups1b%{X3t-Rmrkcp97KQ!Oj0l zm-;-8B@6={5r9;c#BhLI=*VjGET&)C09VIds;*-eTmkk~xN|L73t{EokN$Xu0|=Zb z%&iuALa3GeYYp<-EzCRD=B(9k@APvX~{C@RkoxCjPjQ)gFFKV zL<53%_IV=pvK1+*F8$09$+@}dl|ZCb8x0%}g8%0O;n!r{eh0sq4xx@hki zy@s%V>vF+A4@=ZSy$G@ms9d0pXJ0bS#{P)8Y5hZP{M2UC-3EC9b5r|uxZT=pnt|<+ z{>k(Xw?WOOsRntro?cojZW?BgCow0jS4VpB&88s+dAy!pQb&4`&89&H zd90pZqRko5OPAebx(O!>dU{eQAm6jelwpwb^#t8E=T-wln8qQ^*G;BAP^_pY(9^a9 z82bFjXMB||p%+8{R6jo>ajwln>_C|ZcUa1EUAQO;y_i3I8}ky>O=oaFKpvpSkGBP! zRUk__e(M=%qTl7`4L}`bMd)sGO6cmGvYC0D#1^;b1wWH)Owqk#Lzz_Gyl4tH$Vtpi zb=sVSf#j*X8$sg8Jz1~p$GWNZxV3BmIxnxb)mDM++@v*~m%F!MW!;$;aPtusf4V_^ z8h%0e@fXj_(U=)9ZcG+aGAK-23wDwVE-8Or@FyY_(ahc-yri7F;P1)CgdEkvCU2Le z7_@YZ#6!Qed%)8k#Zoh$pK(DBYbhJonjWTU9JvTm`(er zS*MTtIWOu**!|=y*DypS3reT=)_!vHHGG5@E!y(StaOd=S6e}4^FP?R=(lzv8-Y)t zmcgPO7S7JkOW9N4V{=q=SOMcA+;~Ic3edjU(ZKVU*kKV}x6bHrW_&Gr#aSD!-;-dM zQ|{bAU#jBz6l(8|{zk@O#MQAv%sv8{@XBt!Ji~~^8crm+o}Q{ZJb68VDV#M=%Ildj zFWa6fYEkA~4yW4>n)4UCzkS*_rW?OjPeVON`CVLcH&+7mg;)*VcVL#U^+H-yD)ovt zZ=l1V4Y=#3H&L2%#C5TYl$?2H&1}GvzWpYBeizq+Ji45|yNl~h?q5z1?BcuwG{;z- znuT<$W*aMUH9l^7^2$3Ps$4mn`}azuGqIR2uAJ?w@Omn7+riB(ev2x*xlE7t;%HCB z;kZm}s(u)oi&eMUZAc^BJ3+*e1Vi~cq`==YmNDkptT$V|g}%3&OBt&DEJzh+1*f3+ zD&Fx_?1T*IF#(ukQpKr4K9`>(z~QJMiQeLhQ@)C`o{FZp%(w}*VT-gwxa#h~(L;cC z)qwd_@gb_;P@b4&%+^onBbHqWU5_#3?*(&`Y4-#a(CIU0DpR?0xInt_Vr0YQJf@u; zTm?mmVT4J9P{q%-Eet8VCO+;>47~b{=yL)un$bnpL%-%C3n3y?WyhUO*e*KGd3~1r^3D% zVw6CN1AN+?|%;vaTmLtrXCmDIEJvaLI z<-ZCp%tDZh7;S20mqr9@b+|#jdAQRT#6`Ze80Zp(Y&Q4yGDK^%8u-VDYuUr43O6To zHt-DaVcs9@=L{%{vS~DvID)r{dDr9!1wxs_pxke(@tr--^j&fX*25#UQW6DU#hth% zsFtz0m=7Q?wSH*Qd1`d>>nHq7y^H}jqtap|$$+a$jd=#HY#E*R73Y@J$4Bc|>v65O z9K#L8hbS@7pCC#JjgsSPR`9`T_u`jK{*%H|XX)oR284(WX6I z8t10sUM?LH^ZwzLknUY;Hhhe^#%slWq#LesIw7r~{Km%#TUM|6+ zwYa`X<9~Lf3oawyM8Da~4Gkzq^jGD)Yo7(88l6~K5W{7cnA0%aQQSzm+}GP@_JgJ6 z%H}7HF|mE95}zF*ib`AW5j#cfxfN{0%;E9 zxWL;DYHaqVTJUodtl67p0HjGx%wAK+_sCweyz*oayqyB5-BkwC_rB)hx*ptxPB~#6 z^1$S z^>o9g63n&ZU#Ev^xU}K<%yVXy9l!{XhinHccn(4@WoHQhyd9b;qHgA9BoHjPY&VYdauTZcW5q{UEnzdPHPd0=a)XAd_l(ZvK*_R#efbZ>VAJW# zEDM6BS%}yd-~s7EmDooY{2zwe^TLdP$%h#UlR+!LQxC)@}(=Wf{63F3N`tx_(fJCxZh@QMyc{He5$4pv0qY5f=3i;_nSClURe1kL5 zppY^2rv03oXkXD=_j5hEDA%mMieMS`jz7^w`?&>V(K32zKi7|2MSC6KdfM%s*>>kL zCM$;Z1UN@@`B)!62D}=eZ_6^4KbR_{7*kznVIY!WQ^LreY0=j^xA_8cl6A*kQ27`hLw=){ zgIqVFO`$0VxgNcg@=$R)9!o>TDNh23fRG!;zle8j8NKfyS4{ZD^vi=>A3$RyrI>RC zHT2LH>u(BsD-?iV`ZO&3XFc|j^5PWp!W{lt+WiMED}qn%A*BJDg--r~OX0dltz*EzgmA7kL>8&5t*8;Ll&=1f8{k-gmPzkup*vw8znA{} zBbS|}McA@SM$A64ko%EEOI;)MPbqOaB7hND6@Jbk-^!JAbPqpPOVq zDskVuNyi-Gh7dl1zI=#tj!;&)xox5NSqoEUC$Ct+ZDy~yIbV`GTM{yyjYbd^pj1aY zoDvSvq=FRCY6t-eqn8`A0`8dN0}JW-LtHw!@DuHEnCn9h{)dh{%w@!Dw39kGL>2zfZ}FtYu4OJK!r%rpFeaw z4|Y7i$5V(=#H1s$C3Bym{SaxC3j3s_6lD{Gjw#wVFmCvF9g7OJ6AQ_P#(OBmG@?U?C{2O=048Cb)d4skKFvQ8dN z>3_Li#>40&U;dXHM0hK0`7hT!ZtPDY5Dv@N)kJ&NrgcD-2oCdwl;gDDQEsr5e;kWZ z2YHodTvq!II@<>Hz?#+VLp;Sq?st_DL%9Y7Fw zCwg6C5*z4sr3UZu1$)IKb~eZ|_BW|5LFb>QT4-)e>;d>Hk4Ykt!cexqD~$BH$TvAS z&3ZPWTq*-62TjiCleIMG7!)EXt#sxwuJ^#O6UgLvFtIyU%nH1F9OU|nDR4R*=Mnoc zlH-e%_ljpg^{S`ou4CMQzUqZU3|~RJkSIHY7{PdU?Rds?JfrbM!!=OpXY3Dlo}eRt z=K6QjPTAA37tyxiPMI<3l2w@MkWQXoQ~p8GSQwl3IV^ z;vs60D@SPNFWfw$UZNX+!L?E)sSBplnAd%k5o&q+8c%3Gb>gy^M34W%jUdXO zwC{0F>cXFOt#JUAbGG^wophYLmE63PZaK~ZoS?18xrA8PQuLTf+-b{{8Blr;WsE7a z%N^=|nsI{b8m&~i&oOxSZ(S4bzsfxLZ|S5HoGYpvV|)$9`^vrasS{XTltc9O6I@nT zt;EV!!VeNbswkSvmxjHwf&SM^T+~#@%_6FU&aLBm5#B~=9arE`8ePu1w&WgNa!H{8 zbpda^K%470Ir`DMRDmrf_v$yRJ-Y@#yGZs)F0+evCQ7QwQO`sv+vy`Gx&B0XfxdH+ z8&9-nX!}Xd7pJXvr_4Sgl+V}Ra2>(KbEF*eBdAF2bvoq~*L%=`jU7|uVY@y_hA13R zb}2JJ7%oX6T6tp1Z2k&}NA%9wol~h{XC3|Q6eo?;9=7Zw%5TAxlD+rGOQ|KG8V*E3 zk4ZzYP~e|O|0pz%lKIJQX!#DCic^~Oun^MY*uu@Ie?@=UeTKgAE9dOfen#|OfVm74@yGu*QE-p?gZ}(0=XEI4&DdvHwA;;6njPeY zl0h?mbRsKR{vsDZI-ZAp^8CMD@M+c4(Cu z5JQW9=kk)YyX>>%Eb-oBlkA7yI9+=*4A|6s-5hh>96LYM3{-xr>Z70h&J~e6V`$WA zbbcj|-h7&yM3f+X`7|c%DXZw0r`eX_ZfZQkiDdIx+WQPwN%+b1%o(mC(*HdAFdE_} zy8I8+q7q9#`-AJ*Tj>gZGmkAv+))>rk;D@4!%~XX1l9SG|=M=4OFX*Ltpt^+K|&Hy=p_6ddT+m zJ~opcvNi6@sQYNZWmnW6HCUZK3nI$-^P>Nj>H z%{j{@ME-Y!UW?n$(-~*E;pD3g^!>BkdW(A5CZ$;biQ@S_S~*5b&T;X?`x<@h9G47& zZ0$L2LW0WMPv9PFO$<83DFN4d(M+Ldfp(Hc|H(~sk7lJsgY3YopwAt|XY!KTH zj8{zf&;QBwi&Rh9*33vF+F`o$Ph>$GLL<*}@q@Bg0IULL1WXakWSBc(9)np5vkvAz zFneM4!z4jW@PU=>Ltb1-r=8~#0_qny+EHJ(wE=%Hnc?bL)QRRcvV#c2(u{12^MDxx zhv6lFW%e}M$%e9MU*YPHO<4(jkW#^BP|35?{bf*>ma`tq^lbC0T6dw9+12|HxzNfY z56}YUkfU<1Io>B(x;#=BKB*tQcAm2a)F;8*1v0xb1t*}`UPLj?&>-Yf_;=0hjyOKO ziQ%5JWYUm3=CD*)^ASR*ADZQV14oC&o@HKD7t6AgSO(VWb{0>0wYMI~!-X79Oss?D=MwSNuR%aT$I?~{u5uE4s{Qb);m3aI< zj9P>IPyK`IIs;3cA6zUrZ|ACNfZ&;eeyD!Pc6=Mn;H@GKL$lQg1;;H*jXB=t(`cW5;o&f4%(LaJcPz}@ec_ppKp@b5Ju&1 z1oS1^1N&~h)|3YY=aT>)NC#mwJDoMfe8d@`&7;3GaNR|1Jw{KRkm&3YRwpDmzc8{c zw7`~2Fc>_gHe~_r-pF|*ejXUgMqEq77x)(heM4#EzXa4GpoQ62+v%J}EN}eX6uNUE z^{cYX!$YCMi4+zq%QC7>*&QmoOZ${{QvMDBeDGPeP4i_DL0n3epo8Y~D+MT|Wsxg8 z!~aVUKV4um(p@YC=(IwXe!lTVC_#zs;$(95n#bSkX0*t@E_BXi(KCx%2b<2w7F-vr&@d!Sk~c<@Y)0P23EdGN((r8Q=f{aBs0u9!{Tb;yi@kL_cZb21Vwc&?l*b$LX~u zuD2`eN+-tv>#0-=b&myL8LW{6qOGSn&73QKz}5dRM5MfCK4i`+=!4CiLil^=XU*7s z@|pB#GdIAf-eIOo^N5Q}rx};HY!bGb-ggPm2yK*>UE&gZHPM~e#Mx81jAJ_o{W+)x zodQy9OD)xZKv;!eYSEcH^t)rE>nA5KaTB>-d_#n%Vy@@=*yL@!r5X#D&FCL&oR{QU z3Wa*9xYWjtQt7lS+$gsEynlr|K?hQ&_cd-`kH#`YiP$2L!^=)DzA{fL zn7L=IjuW2FbMiL<*+7wj#g&SKf_LSN>5u!|q;31Ip#*5bu3;F7}fcXcZU!v`zr&n=ugRUv{7jUJ=+7Z~3PANw{#U9-HMI&;#KsKRxH)`uA&E8vEiP&iiWpw+3BNK zAvb!v{JC>bu>5|suw?Q70ucN1bwUhFkUJPe5G*&Eo6czi8Qf%)yscO13vJx3iu#*y z)v;Gf<-kRqR0PQLUxWF1sp1?EIhe}o85#YF)enue#)t+$;@+r2CaWFNsU*?6;VSLj z&izJ`o}rc?h=)g>r^P`KjA{*iItU^|T|++#a{mvY?9z9)cfrbF=lh28yV!Ye-$5GOxTi6ebo{88ZsCIPerE_?M& zjFL30f+_SKj)+A4j+S$zXZYd@xZCRJR*s|+Wgk7pk=x0Y1Ui_I9%QVEP9r3_fUh*? zJp#65c39q%!EC`Z?63X(LX+ebqC;Dkl`)B4@s?Ex=g9WStwA4fFr{q5*q(+E|FSX@ zO+-jG>9vXqMzVk`{*o>+l8MgM;gT0D#6iVAC886e-W^W=G!hSavW!Y$WQFg<}r8oLs~ehTJ9?X0?LX!+qP~l#_C_da!Bbb^ra}$jYO=b??jPXh&q`58b!9UIq%gjWHeFw(KB68`5@dA z1Tv7jiB3Qfh?Ybb2_z0;Msy7>g2X7@VqPaZA(?7+9tlg2e03gI_#$l-$W5_YG<;I> zpgHU7Dg-FQc(HQRm(amxGNn7OfH1^V{zDX|6EK`Go&16Eq;02L%p{f^w$iW7_=@rg z{mo2zle-pCiv{n~7STQylA5lDTZOQFKuT)zBsisn*bz^j3rk)RFC}!rImi3}svD=_ zxq>@wC+DDak%hcJ_!R3rDQn^-<*J44+S`j=*zcwDlR54r3@KL0eP1)l52 zj?4P|DY>F>ft%~IlHOw_$>eU8F1M05$ix8k*vL~*?k0J&mxua(Qw;sWMtVCUx=LOf zOgESwFiBnMB^!Z!SSu~DlbcBUQ*?!$c*%*A^anf1j2$21dhZp#sS?|Qk#cf$WV#U) zL{A6Gjq{HC9Hcv)?jVtbpTl0HfOapmdAfH!eZv5E8JFe%6XO_9KYKzi( zh58L0(T!jVub~fhBP08rt2;*~7PqHcRj;EBlA3FRX&2G0M>@)@>U>PKoLQ-_^W*9+ zhQWdWJ=cv)AWe02Sa+0f75ztd(w%tE()YR(ap0~{UIe4B;?Z<7H}A=vtQi+U(S(_= zs;hyNfu2)IIQ`c-mtl7T#Ry4H`26pYC*2tN16mMAQscUvJi0a4DwOF}0B%+6$u?56 z9EpEI{}D%CG%@v8wJWI3RA{JV}k=FWXb5 zKG!qfI!DNjm})^+Xsx5$H;ABs;cPj~?iZ{=nqGW4CjK&(n)8(w8W|PCTcmhcsG`FkH_kunbob_NVqzaNSp?p5;TuA!PlS~!ITI}^*YK0kaD^g8FXtUq^ zDt#}3^cWae9qPL7|B;TX9N3J?3T#QcDgV?t1-4M+ciy7G1d@<=Z%5?T&d4E#UpB$C z=W;;>nRc8G=|K|6b51&~2T2O3N2742<;YsbREOZ`Da)8De3O>C7}J^-IcaVFmJ~ie zY}8GuMGz7gu|*qi5kCrEu|juB&JpbXWB4B<5u|8DdFmQK;e&yp6OEXBs+94cjlrOX}e$KyiEAy%`LCV-VQzHEGHree>|VIb{d5bR7oF zL^tI*GXw#Y*J*N3HEJz0i(yJ;8Mo?K+{v>)u)g-!H9-E_A+vo1RwO>c3NxPbj+<9A$R zY5b2K4net9tly#P%&7^cXaoAM*sYMEqsE=oZH%wh{iLUI_KeE8#g)^2m9qdST2~sU z91XJAWh}NNIz3`+su=^bG*&8gW+wo6L%AP97kBdaqXX#YQc&O3r&dg@vxq5;VsZyG z)n+fPbCb+LYCp?!d8>;A$Mc(B-EpJ@eCz^O;C)y@8%nqmo3jhV!;q zrzb4k!oO_?AHk7!k+;Sc62Y|T&Xmd-!!QBND7E`aZQ74@NG9zfXsGxkRH!P%BE>@D zZ)WRb_>*+4M7l=Nx|(%ai&H9e z&%3bwx>~Au&H8aBNMWY?W;TfLBz}l_MftpLv?h_*`Ux({n*%c&W=D9Uw;QUa9K`C5 z1V%*dha5=cmc46_EIYIK>OB4#8kIywJ8B<#3Iif&pWY-ZQmF_B^O@5!=zYD>*e~~?U-u@jMQ_j7NyjQ( zXn~yzs0ZmI$z)#irz4pM4!qf6Qsg{vX=`XpGU+w=xnY0N$(v=^V{*ef3-HdW_8~)| z27u|991ODw?;pcd!t90lZWW!DLS6u)_Dl-tBed;LFZIbSx68($7`QHvSyE~{48b~$Rw^ZAK9@-C<6nMEtZGvr#U7= z#e^HYe%ddM_=(a+A5J4+*6pTWrh(?c!S|&!GK#1>=+Ja5o%|yDU^;0dyVL3XexNb8 z_oExxb9aCGQ$I3}kv;wU6Un9ZF{SyG?;?Ha3dUxsMJXq-wd8SoztJh+4%d= zlT$@(G_$$AcARn1{^V1eI_*YRWiY)xgPgJ{V{UZi`_pkU*-X?8(9}reG>i$KXwN!v zj!2@-=QE@X-BgD~Tkw_ImBF16J*9@dcD@Il;USZV+L!L|ka>hpqWv>TY`iL&XZozZ zwFIzwV0b78gTRQ<53@vCnn_|@YELr`Hf!eVz8?ocnWsn2l(HFCBsD?f%oCvoTTt7C@+D|pzEzo*RS&e**8}7IKkb<}&4wJ~pL7xZXlX?8+kQ%^?GsK)_=;WV}sXb)&EPFg=!o z;`8Mcw7K7|yd>m@TGv-XOdLXcweCgZ3CqMn>|V;XdUx z&bjoHd4ov{7quNnM9&SDyu*gjhrMJx1nDEyFA~_<(2q{q{vdJFOJ1^^v6Ef^kB2A^ z(|7VnMt|k&xX>AnqB%onI4Q33 zrV(Wl{l`$!xBF{s`;&7qIny3rg`ToBqEJX340VSu(eH<%fu9Y~F2hLoq(v;4fMBJE zdQ3~V91*!Em`lF>P|TQ1z5<4hwTR{qBg>5Z(5^IN6p5u5hmp4f5)0MW19iPUx};mO z?SQX%u zw2E9mbdw}V-Z^I&FzN!s2@c;1>AS{H%D>Z}$B@MM7ehh*zYe25977ikC&*PXiE&0VQhgs;Jv^lt(Ep`ZCDdyCqF zd2K=L6wxrAisMiZeTG^mGx}mG9Wt5p>Y`5RT3(k6xdZ-Y`oLsTL>gz)s>zJmHIxP? zVo$mpp5f zNib>eMtek_?mTOZp)XG(Jz`hw$`YZ_kJGk9rPwhHq_y4pq^a*vZ5la5PS5y%jJ*kb zj92?NKIh!`Jy}d5i6kO|%w(HHLNb(uL?&S>NDx)~7E;n$Dz-+c#4;$M_DcyuQCscY zs9nSK_g0wPEj?@-H9;)0`dTBTu)c-~0d8NQg-Wbsv8IYh1BhdQNo zADw(3P4Q|8g?@mY4>X2%Kj3q?vX8EQz+2T(cDwkNy}-NWLPSaV6?e%L0)un6?xdDO zft4y-Y3fkk2bz-f`%qpNIEY#~ln(%ElS2cB^I3x9e`h#{G)F77-Uz+`B@dw;AM&0} z6Thp*r!5Oze7(SQ^|00Fu~EhVocYtk2kD!C7t{D&xPG?Y_PL7*@4Pc5fLe{@9c$S@ zgo4ar$`ymbt6hxIE2-{xv}z>p&LQXbY$T6$yE6ty0Y!JDLlaQFDI)vc)r?5%5WCPJ+MWgB6(LADYuX3@fW7aBP_(S5vy+eXBx;6w> zswGYwM+1k%3C;$$ex|LXd9ykrFG4C`Kk}k!bwi>0)=H~<<}W0q*3;|J+{!JFXxbQH zmC6HB$M8gEp{HYbbnahIuq13T6iyS;AZ?uuC1Y%F<3H0X{<|vTKSgN;6f3}*fPW85 zg6tgAA+n0V<29{%zsI{4Wjsa?U;v z3god2>?QNBPeEK~T0a)28H*>~AIsmVt1OT~#;e|<9P%sJb1E_EwbXYU=$i_CI*#|u zwROiUHM7deRokQ`&)O1iFL4#?E7mbb1zN4HmaaZ#yHdF%Ftu-9VvhHP&2=Mcy{S=I(JzO8Gx;EZKi*YmQH0E7~_P&$TWmbIR2&6)$=e7U7M7TC&z6 zPVEI9;_>!F8@Lw4e}UPkjK$|XQ%L~s9B(Zr9jL{rV?2DZyoxB+Q8svd#1 z*(?~obKX>WK1bV`3U{OVqGLq9SY5x&;j#5>vdBd|J|I4J(6X`0)5B78hfC z;#Bo;S`~5;fGd+yJ~o&OT|pZfOWi)^hGxnGr*f0E6q-o(H1Xz%r4HDaAO$smq;1K- z)HMd&+&WBS+>$@gvK&L%Fw8Zz*cL!rKj!rUm5-R=RJ?T@vm}AmW$b%l3naSw>K7kK z4uHhIeiYsQSR5p3lXe0ROjd3<8FY=Ff@Y$tE12!6`n&@=Nv!|M9p|&(eFHwJdzZo- z3<~S^7abxke>lZL6tKh#_YOkd5Tme+vL@h^bN&;WJ^{$E<%N?`Z;EVS7}h}4*%XO_ z20Chek#0}Grfq#h(Gz*?7Rpa=TH!`gRXY^sfao&hU^NXx^Gw(W{bQdOXip4BTQw%@ zL>`v=$ewa1wp^#}vQ2P;ZPTT051kE>4e}T0YGFFFA(dFlAVmOW26xLf3BwW(n@)Tf zo}u?REZ(8Q7KavfyP0n7D;c-o*%)0{8!m5TVb8W)au;Jh8_j*p$st)*Q+d~(9MHhH z1yUQhj1fl}#h9zr%Z?UZt^fUJh))=K_zvS1+dwer!%L9mx6;v%!KOZCH$=MXf|YcU z06vj|&EiNQSZmO|V=74zBQw$qbGoTyh^!5@7c4+**taOXAu=ex3~N+MxlW3RWZ&4~ zh7nx+SjYk88m%cTIiNnWhTG}KcgpmazY#sWT7R&rJcf)K$k5gkC1@ZN3=6@y8^a8u zT|^l%s-XN}t#GPZ1$FL*43F3}W8W5r*x_NdAjEE+@;E>F;TJcK;+03Hq(AQF1%@p; z+$wcj;5@xYQw@G%{pj?#+Z4^iGxotXosPO|UVR3#A0~jWR{PAMuk+0}F`xe&zS<~> z!tHQ0fzjGo6bfC{L=*|vhE^3xbclr}PvUPu=jAbENp0@hm~8R7f~^~eAQLM3vv9V$ zX&p8Nfg+2Tl{mb-quIT+9>T7!)8i|FuX(V;Y<-t97 z?H7lU$3h$AUrZiv6SNt?6$c6_1Z^GIr`t_t8}I}ac?fP6DB&!=_(F+ds}o+Xe`Npt zvE9gP81^RDzthAR$;=xN0QM&LhDGV99ehEF)tyy zVC^gyc!|9O>L_g-dOq{t&!c8}JfeYZfm1BYFT<*iX5B9d@dWF0djYQQK~bzrDL0S% zbpPX;D1Ua9IA_&F)YMt-$PDUJ=5v8MS!e@*lWoCe18%n2&iMxDtQ`;nlCzzCcXDIN z9j}NV+{9z&9+!abJ8Vx8W zN}e+Yk0?&AvoC*LjYn4Rfq~N;hnkz!F&-74C%Pkoz-IgLaegi&kObfD$H&e)j;$7AGEr{l=R-X4iQsRo|AY__oY&xLcur)y7oP6e%5ltV_08t3qF~n@SS!By*bv zmSZSjl^hQSh7jYKzrj&JO+2W<&B->ECvYW~XDr@c}w!! zHL%6o;i8Nt+cZJPyF|~Xfj(rNLeW+nT&%mOua(biY>jjFE!G-Kd`D@MvMLjF=dn}Q zy>vltmu@@v*jQ3p8XW6cddc$_$az38=Ogl-&J8temma4i3F@hBB_&Pg&6`_yJ-*BF z&WfSqYPTQvQq{J;& zp>b0xxC_s-U3T1@e2J$?I$gkL`bK$ycecm6N6GE*EV7is@=dYzwOmtN!k!lVj?GwX zgTtut4DQo#Si4a3e0x=^n*a6fnE2L4NzrAFvFj28<<<{p;8Y#F?Vkwq8qks%{9_hR zo-=Xkt(Z*_Gx<24-+D$LYkn*hvR2n)glpg&5mBZEPd7^(rSLy8yL3qvr*X=Zt!R1BFBUP`1v+ zbB+Nxy~jK+Fq;`wnCJ=WMBX{l!f6KTyq}R=h{v=ZMkCXV_Bv^ z&S02Qs^G80DS_)B+XJJfu-Bu}fK}{=x(2bfoD@iYm4l=9-uDe=8&oMqN@kVC@$KjM{zuDkSZyks$0KSfb+xg5nlF$iKD5-* z8X~m{(^Ad(AeAU()CmYHUowG4&*uZ{T5_Cxi!0yOij_3AsO?S$Dq3Uh<%B%zBC43r z18OX4U{Bn>2uRfM2~>Ll*xAKO1XH3o!?i5K zdeeC`$g@^B<}J2aoJ4Ie?BKW!b}A|Rdm>crI{)nW$NnSyQxSfU z6D39RdNgX0I9pe!Uo7IDjAs( zoL0v|WN2VN>a>K<4_2l_ZKt3(c}+0LN6I&z#(-4I>{L+r-uE%MxkC!U4QvjXc;{f- zB+$C5L)vzE8tWls8l+qY`WSQ~qz;U*9O9XHnc-h)S~mZkrnP5vnzq49mV%a|_NU=X z`4kUpj34GrffD0)mm9ZOqshLMzf;T7&@a3ISZ{=1_!j6=M%A=L(0iZrAYYF!-fY~b zxDgL+LH8!zM|qc4e$J!3z9~fwnp$f57z1MN*wb`ir(HsvR!R#$W4(u`BCYLxbo|)C z@Ot447byun!J0P$EV7fh)vMKDp=FoAI^af2s9Une{n2WWx{T^it(NiRC|k#*Ck9B1 z39dDyvjVyq?6{r9cMXnBMlY+cD11G|*Y7nqM%jGmt7Uwamn@RVO7C_>Nzm%rfVZHb zcFTFNr{%sDt3CTo^b1@s^`lA4LFBQXrRB@{L|)R5>J)&?cBCJ*EZ_m&2Sm7>`7{DUJrt300G-h#q=$8VJ=9C|))(RfX^?fLA z1#j*x_b1ZTPyeyD6~&r$)`88 zElWPiFsz_a@96jbo z2_gx8eoHl2l(3`+$e`g$hTE~bY=JhH- z=&HsKj<^R2Vbs5mwoNH*El%K;iHZ#LNgtb;+j4PIRMaxc6`Zm_{_f4a08gKHZLVsA0=75 zl&G5Vl2U^{+rWeT-xFCwD<#@6CE^~7_#QU>ejJ7@HK=3*?;K;p;QAl56RVT*Z`z4t zbYKvj;;hF|O54cmYL%XxbskD1Hj3i*rX3r>$_yJyo}1ujOXaMA!!MA!Y~p3DXKn?x z^o_9b|FZqbmlSjxF8HWdC#q%~v;At1WlPF%@r&z;ez>i;Nff8*SRgM`$OaElX=t{p~#6Ct)lmg=53TU;(?(C7TV*q-ooEV3*WA z26Iknm^l;B84wRJ0{j3n;KrFSb2*>{up6)iuojR9$O1$Hbbx0-0&V~!m?I+i+I3 z{DN0t=q9@=1_JFo@F!3kaH@YL{$ zVfAnu=edZ;SVMkmR=J%X@8p3#t`pHF|3cD`(T%+nu?q=WrcvH5-qu+$zlMC7r3IbY z1sTWQ0EF);*Zh>3b=)i8?A$HaT-L9fQjgbcizV&ngpI%>MWV&~J zO-`7eja~z(oT8f=SCuP-l3vNooSJ=}+VMj!3rP2?#T z^;2o<9`5I3^L>qbD`nFUfyw7Q!kX~p)tZ<>y0{0px#cTpF&~L&Q!?nSYc4pd9!(e>VbXwd6#^s)9}hK#^lcXfaG8hEl^kD2SPw4(tkZ{ndWe09_x z?I6UYK&@OrU#L7N%(A%BpleuG5-2EJ`M@JUQ?V|s#IxNvHN!2|aVJe1x~uZujR({W zGV7mL{JmNY*bU6;@jv!4ddH0;n07(~)ssHjhfUtc8T*d@+DS+2CFodrSK6@;MDC&8 z>BT-C&4Q`n*W5okSiwONKeHM7@yV$*EJ2Dv2NgCYN;e(OLeVtAow0X|u<5$9)b2F) zYp!SYh`#16Yp!?s`8!=jT9HnA(TIKUF8%&BZ-9-D?dKgKmfd+jPh;-1azFQDOG(|2 znYi>@`gK1K1e?Q-FnD0MDlf=ayj`7_CD##@W`4t?`S$N<|2H7GKchdt!PZjo9l0LB zGBPrQ(hh*(bLc}_e1K;$GgTfysI?Sv5SVXE>LH9yH2omrEILG+4)Pdwfyxi^AfKP* zEYBV+L7P@HBE&Mt1;-e7>(5mB9d?n+hp5H3+*sqRtgGj{MvKFIDGmRY*Yi9rWBaNZ z(b(3@5nee%%fE%j#z|7YMPY0M=*71@-=i_O=7`7@)TW)M?I11rj)!`GBlln_P+Eux zQQ{CAJ#G6&WH*rQp(aHl6Z!Xmq5^IiwRO2w$>&`j{UI~Q!Xx&T7 zS&BW(`?ySkKWb+EgjO8pqn*cz;BL0Dik}nEtA4*AW7Y(E;io2*0icITqWml3Hyho4{ftSEujZpxAAoL4#gcs z=uFBy${YH0lqWt8I|wAY2Ik5!^x-d&$_ZKvFV>z)kMjEL5Zyn@Thwd=(a(vMxR+0` zf^4lR_Iuu^LF`FKDKTFh>}bf%iBekQ9pzHuaWN5u&YRQI?|D>oRu3VuTm)^Z3ulFD zmCJ)uIE7u3Eltpvz7GZC*d)*4zFh*N+&~{vmDvG{128s1O zbo&?{4-S=M^=Y_ITiGT2Lgfgdni?W!rAKs&()En71Z%eoLmHYkaaEImV$iQ%i}z} zmJhrf*(%Cv=U7iH{XW$E1Ru|IwBrQYwFZ@+z>r=<&ra}`ES;L3vN|hF$1RLiy?K_EPo=!iX1q5B+E}E))8{8`NKaPN| z5RWt9oTx7wF+Y7o6(VVDYEKLXfA!335R5 zB>jjdP>e%qt>4g|Q@l+??;qv>8R;Ri!bN^nW6PEw&t8g%AZkF96^C7XD1#~YH1~~Pa}XYH zj;-?#IOtZnNM~MElVD^XYFM55DUrq&&K8R(Mjb>+&YtESyiSgD?6!_`axiLoHHI3U z0Z(-pjX1+w>A%WA=ps|mT@XH>?uxMuex1e((h8EXJGr%E%%>BbIs?{g%0Wk;R5cN6 zQ&lQ~^%vb09&m@;#rq%y3%7BOa$ZKA&5MDlDUSM99nG=v9(rNNnt`_*Esb&Wzadql zd~?b6(yl-B7!A!HIa=bO9oIrzTwhh!Jl9y2zoxuxXjS8BKrr%Zr88LPG*iB8<{UHe zVPJ5Q$o#1za~=A%2n|0C^t@6xjk(8mM?AE+q9%ZTwBmNa5oYX!x|`PQ)p6^C7Pi|O z%Qnek;QCdMAFEy;3NI}s|8o#LDJr86VCKf60Xu6w%$;GT0=fdWm*I&Rn2TV}1eo!i1+xvz z9x%_H#rGT22s0k;!tDrPH((kd2QUnf0*D2811d0@>jv4s+itffULE3LjtthQ&3^>e z&5|hNCw{sX-g6LCL6#>5hY}gD*-%Q!KlA;eO_77kJ42lHZbxD&?G7v^+7KP{!X7RO z`k1B%{P&s2aGq~gat>xJ9Ytm5fibj7C;0;J&BM|u;{qB@pH34l;5glDlzRLEFJSzy zY#MTrALQrCDYTrI@wwUbqMYyG8QJvJC7kv9Tr!w3it;PpECyGdJBS{J!q<2O zI*jHqfzf01A5^}%n`Xf8H0f9F>tAr$VD3C%OkX)o68`-v=f89e*FXJsnfIl#mXz_2@b%N=_Z$Q#^&rl7Q`7c}<=hd z{Y4%B;A8xLQpK$NF9wmue4T#zgZHZGeZ#SIfn|pIU};RPuR`oa8AWHV@)kn1u*Nk| zv8~Oi`!yijS3A*+Yap2%0d`qwMQI>N?P@>(~k+>8tC!wvSJZ6cg^|0`8Hm<6c!_dS<$Coo9tyy{S{8 zo8>XeL?`D*hU?-2{-M`tH0N*QDC0qcZ}0@ylQ)euqf4f+PcrGN8xSR{GZL3@p!Oyj zeUlIO=(rat7}IPK{1n89QG$w_Jg#B9aK&!>m%U(tG1V5rOGW`zVSkA+6`N{o5?iZ< zp^S_B(y%|@;vuz-jtFk-4-vwccFgOB0iHoL?-npcUn;(ZYPr+3TRgfh6G5-X^P|B~ zdseR6eRn#iq=6sdY4N4#+x)%Ik5UjICGACt(K}X-Xxt70vkn)}aPR3C>>|?(d#cV5 z>Y3Yo3iBQXD>6OqRXh;t*MY@_jE$i8?(!vElS;4eqJws&QM-F6LPHvMk9SC>G?7D6 z0*6{k&A24?v>oiRNv|dC1SI6yu2#6zE(q>(M7Y?byF9!}xhYCwcSSgm%5Jx#=l5`W zIo?j4d>@;=XTffGun(T%KYt(!xRef5070>m{D9AMZ6l%?Q(1C5TKRxS@n-Gl)B|2y z*@p!O3JMSSd#odMddL$J2D{>xC~WtpLTB51uA)l?#;L;Ml206ABO=oQLxXsEa zl!Uwf>pPW>KjeuuW;pn$mvMM@r&@pEXyHe1{l$l9w?D(`{*>1I#ouLf)MtP39OkkC z(fa_RY5Zf}Seft{^KMUHJ?7!YC0<|z;&K{mxtHK8Sx}{#r;hzOgI?|x3hH}XzCMS#XfZC3HJ|i7w!@=XW_1!7UkAHhAB&)V&S>eRy94v$yJ^BoKIt}DIA1~6uD5=sFg4Ha5pwu z?c*#>l~@<`at+CY>|#@H*rS790SM!WW6?+&m&CXR|a#cu)}~A=jLRkLrZ;5h)r8 z=fQ0zV4g5hh)6)@^g#1c*l+w-!i8{O1ot*DHGqBAKyyCqi(po#TL60@V66xT*aFxM zIPfYL=n6hkP~yu-xB^gJVrRH{0|Ee%05f1a!g|20PWaA8cn%8?kfS%p!>o4ye^n$4 zVcP%-bN|&u|9@(dgGk2!Iy(vi@CNt+sxzKAUT@wFIA3WnKLeypzzuDHYX9>H8(oeE z!eE+lg<0-Md^rECH+Q|HH$TGnmJ53GWx&7t?lL0G(*Vx|ECQSpc7zpOm-nmQod2WV zoQK3b#GPsIm*FPkdpp8x!1Zuur0;QFZ_a{WIld>td{dxYjWY`}&qU=_769 zbv$=A3?GZ&SzUnL5A^07xNS!!onN3i@58J>tKbT%?SK;adBgm_g&%{kh5sMnD`Zp% zASyU97ayXAX2oER#di{$uw1Z&SItkh-(j+W{3w`w^hpJ@={} zgUA36f1Duz8ebFyrU&3z9jKK<1+N5VbX^n(W)IkPFpv2e%q7|&b5ocV(AL(x`AyRs z%te3$ffyeMn*&I}_p1h&%J?n>WFdSopcGHwn%~6J976`>fN4Gk^SSy4Gc@SU-Y|#N z!_-7Zc_GML6d(xha9bLHIgGFYNbnr|&jTi+Fy%0-({zT0%sx~|gRt9S>R_+-D?&Vv z+PPSn@DYI0$p7-Z1Gf@HsDN1n6K}};9kCp4mtnsQ^E^!Rzx>X@tpfJ*FmJ%j`j_7k zxXH-p7|dsI&li5VZ;B%{3oirSST&bXn2{a+vEO+I-2tff@0yM!6i{u?>xiiasJ2&h zMR-89ed4=len7ST22P{88bRjVuJ|heT!ljb%uImud^Fd-Ky%Y?0?p^)E>^@8xaGs| zzo*${_-}zS|J!=r2Gq$EKq{aQVCgobE9@d2!HQO-#mZ>JU_-aW=V2_M!~+QZw-&Y9jot15W=bgvUXD%a3c}pQ2J;-< zxF^so<09oeq#+}2Fd!B2FC*SG#A$;#DG0j{(o}xAE$xZAdYDEAj7B4xvOWgalgh;M z2n-;YR{;aMq80$#`Y^LUB4qheVAZjAw_6D@X_dr_bBQ?(5J_|DnkTM(F1Yq9p8guYmtjMNB&nLwFr@Va&tT_4v|8cKOKOl5nX~=@#5H$lL{x z5c{9-zq#c!4>C7;E6DsDP#vDXi6`9uc59~IYApFn{A#+YZ6f*e+(|8h%#&OG12m@%V}4f^tSKeH(tf?+VMocHNcLKFYmg*a>v_-nZadaD)5n{>+W;G|kE=WKIeTYdP%ybjz<7DYA zUecC!Buf$eP+Pi`EH&o4+md^0DV%R=OL48GA$(q2TGLue;CXH7_tqFlZAob(HR12K zr50^4in_H`XSI>8Nqp{j%1)62SQyPskxp>K+tjO_)PmP~o0hbb#=AeVAp2x}Xcv7L z3mQ-L+Dmmk_WvHX(Al8(L8*_nsZ82SDea{;Za;~Tx>|ujQ<*fLK5s7#cHdVO*{6%% zmtD^xw+>QUHkRJ)Ag$-)E$ZtI5@$T*V`6DisPg)9_Up?OnI^5`569CfILRk2XP=;_ zY0?BXPaWM+I<2sqYI0Y}s_^Dx>3B~ma8T(bHfX+`(Q_p#rG-j z)hd+E3Dv4`SYG$uGXZY;1W6v7-7>4c~2WF0tJxZ=llTKZ`qGp4gYlGM~* zl7+EvX+dvL;&PMd_uiOoKD+LDpRF2S>ILKo#tHy}GNnfYzR5UB4 z8-1n5&5wu>DU?oE(dSvRh{Oi$bUGEjQ>zWH??kQ^$T% z9saAC-tQ*`_-_!27&81=nF#$)K5PxG>L)egPe;?4ei&kN=&ycKm{V>!(!iA)`u%>Ows%0WTZKF`93-;sqV}! zZ8UeC+b$U)vSwe6rbqpy_gxz!n<*$%f3rGdfYjBA{h}TiB0b`~yd~}YKzf%SZK=8p zm7*E{xTV^17+R9eSNo5UW`YqRXeyAt!|C6RRqhs+hp%Hg+!SZ~7rRNxme#Yrv?W^# z0kg0y8~PLp^eP*J_Z@08O3DY<=wql7JqQ)f-UlFagH z)kLYOF8|4JUQ!mD3Zbmo^xH(~H(Y4+-6v8@_m7`sCC%X_#jzd1P|G3bNzxiNRNXvD z+ULp+tC^olfy}Vuu_@9G&*eZ3G_00_THy^H@Z-y&so=X1gelurb^RvJg$#I%ghr3TDElVP}SZ-!UO z0UMgBn?9Esv4~edSU~x4Fc6qi8TzF9MG%dqCbTR6_R|nwE-iC+2A+1LL9n^7MzDEe zA#GZYMXjQcUMxo`+t8i@sXYfPjjfRC@*~Zt{t9V?Thl_I^vLt-svvBhpRbUT*&r%k zAsO8kmqCZ`c+&Co;~C02@?0t9xY@eguP(rWX6llal7X>K>es8Vdn#Qam^h4{7fP*N z`k-j3um+N4wR8kGLb|SzHnCuJ&l+iv9B}nZ2i0A$XJ%Gj@I0?`i7Edi@`^HEj%iO# zzm%HQjGqJ56Eu}ZBj~_!H2zDeq4F*g4WNx*N;}yGwa*4=B0~>d*eE^L4$3d7|NB5X zw@GTs-X)jKQe9EB6bI9P-FVkwL@RofLye=+ww zgq;SM3CNG5_D8VM%!;GwM=*v*Qn*cOtBiqH4vn=*+v;TFb0T0A!2Z;3pC`;ByM36N za8&wU*2cqLagJP1O5q+qOpBF`U2RbcUMW7pGtQ{3Pf8b=OOI(eJmdIleK$4ilysZ1 zi)yVi(mGb(*pYIIw0_T)psFG;|2AnQt7l0-w;RZ|C9!5*CLl;!7z9o)+xq+21L#@0a=DaV3-;%nqkJP+d z(ss^|Emci-rK5~*k5gaVlV&k(5n6Cx9L=hbR{?uyW?od1F0FG`I1gQ!0Ph3 z`t*TxlWPwkzhiOgpO2*1jP;|dPoymExmQ7EeTmxTsnnjm{lROf!T&#?FZ`zhRslBr zSJ*wUAAU_&o?!;X(TeAoL3_KZH=j$}7>iLqe<@AlY#!CGM8l4v7nRZ%tev{jE~@h^ zP94nTtrBZTK8oCsKZ;Y66**sG!_+g*GLvfFXdy=2_JQ6UV*_YeZFv^+pb$TKmh-J$;d)Sg zUy$l2zt4vSkfDy;oqbIo*O9yNS1r`CI&zt-SBBUY5^&+j>_*|MOWSyY+r2kfPHaAH zDBPoJCg^n2*kti-{5^rCF>5L$UJ@7_CpZE?>~*KRlWyAfgV8%XIXZ$ za1X!j$ke2dPS(d54h4d#@$*~qAdi>Z{=>Dg+P;}wOJX0W{o>>y5)wHYFOPC{-Q79Z zeB4c=$?Bvgx0Rc@`rTTe=EJ;l)a6R{c{yGje*l^gMro>crUnzplg z^IchD%$e?XlLNv(3p0-dECobAtV}F~*&0K69?S~BF+eGx=rb~Pm)Ar1$ z=^?LT3D0ig7H(u*dJTtDn4Mup0$#7g_YKSl>;;?hYue?(?4_rs&-~osxYd`r2yHD-=%MHCwXCua_$R=q#r*=Y3<5S>UGy2OJ z;P2k-FCVSFayh(@d7jrhGw?3ZTKh7B&Aa>2(E;)p_X)x?3eV-DMcFt?$&f?X2z5jT zlz2IAC|)p7Zpztb>i3!QTflzl^|7Cw#s7qvQ+1-^I@my&JcMFKk%12FiZYgV*4pzn7oGJvc+NYY-HbI zxa`JT1)~`?l@Ai1!Sr5*!!*E}SDEMwGZ0_|1;UI*(YR{{m=PubZW<5lOmNE?tuFac zZo_IVBuD)YZL-J2y#m7Q1IeJfBjq5^>B2)l&koH1hx268XUpZRy;_-#x#x0jbg)?i z6flM6kCxXN_Af!`?1|5Hz60Ba8@`WZ`-Fr3aAkG$UDRWYJe1X;BV*(T>=NxAE1Otn zx;a+APm((^96grh z%8wZE!Otekv)*ah6~#0i@-R-;Wezp4=E4dk4&&qwF}h6FL|8Y+yzz_{wkVzR{5MxI z8z&*=7o)UcD?`cK$?hyU)q&Q>q1$^%!7&GDU90`ly~$<+fU;Q+s|Yn>iM%WwYg#eAzr|kuQG`w=^Az=r|r@<68ge z&;*oCNBwlcY=LmsK6lu?VV~=;w?>A=no2?eIn5jWlqcJkEdizx-#u@lS9^V5|CY zp8OGK*VPXeVqL7iv=br^jWK5HGB+F8B4JBl!e%J;!00YsBwy8c7p|t$P2L3RDy%mS zRYelPI??xw<+IpMK3{^W;PQzjvWdUyNZureL3TWz#lBEfn^0u$CE4NdMyHgH^yerjY3&v2DNat z>?O0V>aKN|gl>BlqC`;aldw7Lq=8?`193XDeJQ_04GwLPmjXTNwGl-_kFVY&@9^HU z0O56oE&<0p-}LjAtLos*GH#$a@RD9^kt6u4OBDK*91Koyhp*%m_xENxa)`Mi)|>&f z`YYMnvyX85dz@%W|DdB^VJWIfcSJ-jd2W?Qy6FY;R_Ar}v0amQRh_#P`>lHls^oDn z*gOE{s{=G@yBtw-^$dj5KeR(r6gjM*&D-T9cLM@ch~;8_7--Szi|ttA+%>ncX6yk< zeks`8=WB}CDc5fsD`H30jCmv?HxU+_+3&$*yYDE;*2?eB6+EEX(@%ff&Ke27;!cHE zJ`6AWFanyCx-Z01;+)Pu3}Yem*-p7}Eq_N*j^Bv+*=|hM$sG*Lo6hc(S81L11)IC> zqj9_Bl}aj#7C?1&%dr@eU3SZ%K3k?EX=^3Zzr>63^|23N;aX2~cFU=lE5GcP8~M)^ zA@qmrY`Xa1dQH{ZuEC8(hCOmWY^9U;$X={Ni11G7RI(e&tiM;HMh%36Z9`y!ujoU_5`;gcg@=+c1<}7rOQl!v_pls&Xh4%`gN~7p50b^sB!`G$+sfH zQCX9sP-czTJ&r_XkjvNTuKCpHYq`DeOpG`!cB_RjqtWV*VV2HQ=YB2MVT{p+{c;z^ z)tCD*b?WSP&|V6)COw`k>}p6gn-1ebAen7dJ06g6I-Rd>Jt(h{z(G$x1f(ODh98m( zbVzi7NEk(pB%fmWri<%TluGch$?32>=B?XPVC_(jbMsB{W&5SUV6UJZo3HI`c)5Ht zw!Jkk(IS_H7p{GOvlCpR?T6)9_wQT7HD=-C4pEUZJ3>zm%l%#Vh>*C06%(WX5!vFt z)Db50afe0-vzT@sk$bz&s17rYYTM*iE@K_3yR*^M&n72}O?8b;o+a^sU#Zb?xnaFA zlSMu;cmx(j86hm_ls82gM&pjl=FWW_LHw(NbpOvFU4`}Nb-SrhN-oq`rrL{3AP>qq zSA~i>BL;E%|BRAC+7ogP(^KvVd5&v2Fq!~N1Ha4Uds6P{elJfH!40p9Am&Z_G9bevn7Fej^<9v9Hn=`~4#kFRE3&5(mL#7*YsP9hU zp**rzFZjdmfGDtlM%<7C+N~3Q##9mC@rn2TQguE94Z#6_4D@w}^MEFY*a{KoXf4f? z&b5GHqHs%vgY~W*mqOr&nZOp(4>#n#+W23C&82@*vzv0akRc)v8hnq4F;G}KoWfkm zc;k#~Ib_y{cHG3y(3Q^Jlw+b&gx7RQL^=sytir8@%dzzH8E@(ZA6u1A0-0{fdCXhg zbxU?-0jO>f0CMjxNf$DXr(fcyB*PCtlq=Xdx^P<_!M0J#9eKP90%;aP#&)54;*Jcu zTp~H$!{H#1toP8qztg&V@;AKeYZ`c8UdDU8rpo*BV4#-oRmetf#G405#n>o-*eD2VC#jgOYsBW$B+VNUy$LIJb^8v zm9ONMDYHcacXb=wbS@`0EoiSfdc~fH+_8%tk8#1(+_-<7L$iPl6=}pgw@2>Ag*Bcm z>`PePAiJ5r2B&CGoXPaB<>kOm4!)Lyc;0=w@*0@c5^7&5k2QIUJPd~dV-M-3nGX9g zw<^1_%I?8jg#B#^K|Ep)CF^V9PNfHx@^a~z1gyX=k7G*~Yn6sRdzw0u@wM#01xfXB z$-<#AZ2RK3l}B!)gikE%5Se;};n85G%z{{A8B^Y7vRa2LLmBtesnaE8J!82Pr6|ET zns-r@tE>q%*DA3!%&h0TriE!x+s2N%-nK8Io_feSLLnPFcHdF zFB0mK!AhYNyE=*m$jl&IQTYJbbcvY`A7J%`Lqg4Dy^o<}Q1}io0av;zQ=*^8!1?@x zp^b1+wl33jxCwhCT+-YOdcT+$yQw4eXk(&by4^NF%jYh2uAyAzW)EtnQwr-Z8i}yU zkwdUo{b*;O3EMxLcs@PSDRDT_HgZ!!+=hu{1x|~?nP`BU5{WPLg`47!dA7+-dBm>J zDtF~~Ot;B370|cUjvh)N^L;NG5ffOdY$#{CdS$~r4aHk9D5iNT+02cecq-pvzVG!? zT7XFAr#`Hubi-rAYCB&gk72N!sIAmz-_y<7N`I`x?fjHMyf8rB>Zdf5*fF|R7yU-$ z8lZf_R?*A=rH{|dC}cNu?yQmp#uH-k0`*PrOFvaw@D`E{^mvW+6_P(2#@S9FS* zt)r2FXqy7zoaS~L7rkL#uL)EJu{_f1Q7F_?uaI{O5g@tH*`x;-P3hgFw*kH1*r3#{ z*+}@r&Nrq<$`^$|XHSDN5;ZzuP!rSgLA}%}M{`w>lqy?FRS*k33{jroJaRKsiQz9I)POK$H>)`(0;%?H zWlYyiL*YK9-;7Es-EPs1aX^BRPK?p;c6tc0*X=%dC; zcenS-yIpx@TphauJ$`~NHdew-MIx5zlz6%eDIO5EE+ze=SfrG^T9Y-IJ%0?BZe5;E zzh~DJVFTD+p*D+FrZYaTg1(JWy0~Z_0RIMfP#u%fggvD+lTyb$Oe7TRslRE*m%0PRx$mJ`tKfkEfF+r3-%%Mh%)M<7$_OA+~YH^AX|w45ve{ z;O=*!LiZCcepW8?@(P;URPkl2)pbpkv5ZM--DV0gwnE+2T-hmBn89(%@bJ`7qydT6 znkYa!@vYU0)^QLUEDk?B&;&nF7UPtl(6~2FZdj|DiSM@+2nxW`#Nh#^7`~&)(n5(< z2s)`CTDDNSvKs2oEkq$cqO^ErA0t(ppwwopg<8Lrl8D1=n0ZX=5OWk7t{(_V^I(q$ zX>dCfy%Uw>`sIU=5xP6(hCm8_5;kLcjNe`d4secsO2q1Ln4TsoZJ}eEXvV_0nR=L& z-Tu**5c8Jg5c2>eZcYj@=i&PpplK|HCMmN$-VH`lN4X{qtXt4+{OM4VG8!bJx002{ zeC=`?oUAke;bD5R(#7}OFoeA+Ue(n}Mz1uth{%%$c1FFItPEhF(RONsONzk>pVLk$ zLhp8LuXOZ12Z@!=Yk>)Xyg9QCR#%t<)~Y+(D__WNaPNE_b%Z%`Ee-6X6tG#Uy^~_) z{Kit6-bMMy1zwtUh`tsVu_|9#uj(9Ju-x><*g?j;$BKKZ3(7T;5w@8rKHt-(nlmw zb!n-_ypDSHRwf{kpL#2!v?DR_^43wuKFV>t0OQwJnZ{Dp6@8Ubj@^I60HqD*PT8bIGR~B$nh130ISSmgx?Q#?*Kn-24oCNoP9u_D^QIW4#;ATNK ziDFhMMm9$6wMzMk@#5uVT8&_XsdBZ_nDwGYYm}|7uaN3_2v=Pxpg-3ro8UYD3rx$d zbm0rEdTq&Vt#Sgp^!c^Q4315Ez?X_15A00&Qh5b@D0hQmVY^k^2Bj9`e-_X$84C?WjrfWQ@1ET@&+@jka~7Oe>3K|=kp|;?qT7eD}|Y7PrL|7 zW*@8OZRoH-^PUhh-y0(E{|hlUlUzKH>z}8e;;&_v{o<~4_5iKjj*8Awhwe~5XS`^+ zs@oF_%LU+YD*Zqpb=jkUeb9tF_bUCly?{pTMNhP%m3x&#Y?L}cRZP=Oe676Tzb;n??^m93Hx#rKPyx_0I``{NP6wDF7i^s|gpCPdG5SZ!Rg9_=g4RvR{?e92i>s z@8}dz_x4^v4IiB6#M)SYqvyFI}!4 z{Zm=WT)M?!QtG_W>O*b-6$)z!tCnkUryq94&u=J!egVR%C{U9Wd?nV?lxcMuZY=U10neFwvr~OTS0e~AF)hnN3fU%{PJyu$AKCOVfo+&4Nwzfjqx#2~$#zTAz ze4*7&gpJOEnrSZ>|?ks}NK38hY^aXAtZ;>PEBoB zhWti&Xz#PX)PA1YT&Bzh8*jFH#Y?L)Xm~I4)_x0dm7YG@92N+#0jD99SzPILsPOn| zXf>a8ng9OpT{3E2*zu|7*>LrNuXZwH$JEh&+CL=lS

    dd9Q9b|D|L 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 I>nObPAHlM*@&Et; delta 108106 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 NZV|A8jr5W~`8W9*gPQ;V diff --git a/configure.json b/configure.json index 6013a640..ebdd609e 100644 --- a/configure.json +++ b/configure.json @@ -1,5 +1,5 @@ { "ui-lang": "en-US", "ui-font": "Arial", - "version": "24.0524" + "version": "24.0528" } \ No newline at end of file diff --git a/data/index.html b/data/index.html index 497efd1ae310288065ce0b7a811d7209cb0886c2..59fbb46d8ebae30b2a76a1db528ea4d313c94662 100644 GIT binary patch delta 25667 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 delta 25169 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%0Di0%Wl=KL$C@G)+VNA7~J?}H7DPd5ku!4V;w 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

    Yo|gKC^2 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 diff --git a/doc/DEVELOPER_GUIDE.md b/doc/DEVELOPER_GUIDE.md new file mode 100644 index 00000000..4bcbb38a --- /dev/null +++ b/doc/DEVELOPER_GUIDE.md @@ -0,0 +1,44 @@ +## Datasheets + +[Google drive directory](https://drive.google.com/drive/folders/0B9y2RH4Lb3MZLUYtWGFOMUFVdlE?resourcekey=0-NRfMZNuFYhL2txb3TlAXrg) + +## Connections + +There are four things required for this to work: + +1. Composite video port connected to Green RCA Luma input of the GBS board +2. I2C SDA, SCL & GND connected between the Pi and Port 5 of the GBS board (Do not use port 6!!) +3. A usb keyboard, wireless is fine +4. P8 jumper shorted on GBS board + +Here is a pinout diagram for the rev2 and later boards: http://pi.gadgetoid.com/pinout/i2c + +## Component Video Sync Levels + +As you may know RGB signals are normally 0.7v pk-pk. A component luma signal (or SOG) have an added 0.3v sync level underneath, making the signal 1.0v pk-pk total. The GBS board has a resistor that sets the maximum output range of the video DAC. This is set to create 0.7v pk-pk signals only, which explains the issues with component thus far. Version 0.3 of gbs-control has a sync level setting to adjust this to attempt to get the best compromise between sync stablility and brightness levels for a standard GBS board set for a 0.7v signal. A value of 194 should achieve 0.3v sync levels, but with reduced video range. + +However, there is a hardware mod to get correct 1.0v pk-pk output. The formula in the programming guide is: + +`Vout = (1.25 * 2046 * Rout) / (846 * Riref)` + +Where Vout is the max voltage level before double termination, that is 0.7v * 2 to get 1.4v. Rout equals the output resistance, 75 ohms. And Riref is the setting resistor, normally 150 ohms on the PCB. This give a value 0f 1.48v pk-pk max for the normal GBS boards, which is slightly above the expected 1.4v pk-pk. If the total series value of the Riref resistance can be changed to around 111 ohms, then the output voltage would be 2.0v pk-pk, or 1.0v pk-pk when terminated. I have fitted a switch to one of my boards with a 430 ohm (100 + 330) resistance that can be switch in parallel with the PCB 150 ohm resistor. This gives the option of 150 ohm for 0.7v signals, or 111 ohm for 1.0v signals. So those that want better component output can try this. Use the default sync level of 146 in the menu for 0.3v sync with this mod. The Iref resistor is shown below, it is connected to the sixth pin along, and then to ground. + +## Original Firmware Problems +The original firmware had many issues for use with low res gamming content, particularly for us PAL 50Hz users. I have seen and read about lots of these issues before I started work on my custom settings. The most obvious is the deinterlacing applied to progressive 15Khz sources. I have been able to get around this issue with an odd glitch. I have not been able to get 240p input working without using the deinterlacer, but It can be tricked into doing an exact line doubling. And by disabling the vertical scaling engine and setting the output resolution to exactly double the input the results are very sharp. + +The most frustrating for myself, was the 50Hz performance. I knew this board was hit and miss with 50Hz, but fagins YouTube video review of the SLG-In-A-Box shows that the unit can work with a 50Hz Megadrive. But that's when my trouble started. I bought a GBS board locally from a PC & Arcade shop. The first board I bought worked with 50Hz input, but had insane amounts of noise in the image. Here are some images from that board with Sonic spinball on the Megadrive. + +50Hz Noise: +![image](/doc/img/669cd5363629833.jpg) + +50Hz Noise, with just sync signal: +![Image](/doc/img/4e6bb9363629898.jpg) + +And yet here it is in 60Hz: +![Image](/doc/img/e2dd64363629965.jpg) + + +------ +More to read: +- [The self introduction thread](https://shmups.system11.org/viewtopic.php?f=1&t=3568&start=1050). +- Original topic at [shmups.system11.org](https://shmups.system11.org/viewtopic.php?f=6&t=52172) diff --git a/doc/img/4e6bb9363629898.jpg b/doc/img/4e6bb9363629898.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00256d5a6b5d9468e07ac5fab4cdda6c4ddd6771 GIT binary patch literal 15518 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 CQpA-2 literal 0 HcmV?d00001 diff --git a/doc/img/669cd5363629833.jpg b/doc/img/669cd5363629833.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3ea20793a99660481c3c9dd895c9b3e943456ad GIT binary patch literal 34874 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 U{{V>oRFC(E(y42yl(s+r+1mmLt^fc4 literal 0 HcmV?d00001 diff --git a/doc/img/e2dd64363629965.jpg b/doc/img/e2dd64363629965.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a94370d6c1b63cac4dbce1c528fdf520c65d99f GIT binary patch literal 29936 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 Shvl*9MHSMvM=W%cKmXakAbZUK literal 0 HcmV?d00001 diff --git a/doc/img/slot-preset-prefs.png b/doc/img/slot-preset-prefs.png new file mode 100644 index 0000000000000000000000000000000000000000..487df21c960bc00820e6829bb9be1731f185ece8 GIT binary patch literal 80304 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

    Cipnn=OX`#x*%$dPl*p)&Jzz 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

    K%koaHd1iJT(I2Ah0S*mxD`Zh#gfO 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 T%$Cky@JB^a^GdFQS-}4SIn#Ix literal 0 HcmV?d00001 diff --git a/doc/slot-preset-prefs.png b/doc/slot-preset-prefs.png deleted file mode 100644 index 38b24ef0bd37d00603822f3971a12451c5622989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85577 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 E1^kYV5dZ)H diff --git a/gbs-control.ino b/gbs-control.ino index bb44e3ee..0400d926 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Friday, 24th May 2024 9:52:18 pm # +# Last Modified: Monday, 27th May 2024 12:29:27 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -148,7 +148,7 @@ void setup() rto->phaseSP = 16; rto->failRetryAttempts = 0; // rto->presetID = OutputBypass; - rto->resolutionID = OutputBypass; + rto->resolutionID = OutputNone; rto->isCustomPreset = false; rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; @@ -436,11 +436,6 @@ void setup() void loop() { - static uint8_t readout = 0; - static uint8_t segmentCurrent = 255; - static uint8_t registerCurrent = 255; - static uint8_t inputToogleBit = 0; - static uint8_t inputStage = 0; static unsigned long lastTimeSyncWatcher = millis(); static unsigned long lastTimeSourceCheck = 500; // 500 to start right away (after setup it will be 2790ms when we get here) static unsigned long lastTimeInterruptClear = millis(); @@ -448,871 +443,11 @@ void loop() menuLoop(); wifiLoop(0); // WiFi + OTA + WS + MDNS, checks for server enabled + started - // is there a command from Terminal or web ui? // Serial takes precedence - if (Serial.available()) { - serialCommand = Serial.read(); - } else if (inputStage > 0) { - // multistage with no more data - _WSN(F(" abort")); - discardSerialRxData(); - serialCommand = ' '; - } - if (serialCommand != '@') { - _WSF(commandDescr, - "serial", - serialCommand, - serialCommand, - // uopt->presetPreference, - uopt->presetSlot, - uopt->presetSlot, - // rto->presetID - rto->resolutionID, - rto->resolutionID - ); - // multistage with bad characters? - if (inputStage > 0) { - // need 's', 't' or 'g' - if (serialCommand != 's' && serialCommand != 't' && serialCommand != 'g') { - discardSerialRxData(); - _WSN(F(" abort")); - serialCommand = ' '; - } - } - - switch (serialCommand) { - case ' ': - // skip spaces - inputStage = segmentCurrent = registerCurrent = 0; // and reset these - break; - case 'd': { - // don't store scanlines - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { - disableScanlines(); - } - // pal forced 60hz: no need to revert here. let the voffset function handle it - - if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { - FrameSync::reset(uopt->frameTimeLockMethod); - } - // dump - for (int segment = 0; segment <= 5; segment++) { - dumpRegisters(segment); - } - _WSN(F("};")); - } break; - case '+': - _WSN(F("hor. +")); - shiftHorizontalRight(); - // shiftHorizontalRightIF(4); - break; - case '-': - _WSN(F("hor. -")); - shiftHorizontalLeft(); - // shiftHorizontalLeftIF(4); - break; - case '*': - shiftVerticalUpIF(); - break; - case '/': - shiftVerticalDownIF(); - break; - case 'z': - _WSN(F("scale+")); - scaleHorizontal(2, true); - break; - case 'h': - _WSN(F("scale-")); - scaleHorizontal(2, false); - break; - case 'q': - resetDigital(); - delay(2); - ResetSDRAM(); - delay(2); - togglePhaseAdjustUnits(); - // enableVDS(); - break; - case 'D': - _WS(F("debug view: ")); - if (GBS::ADC_UNUSED_62::read() == 0x00) { // "remembers" debug view - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store - GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 - GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup - GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); - GBS::ADC_UNUSED_62::write(1); // remember to remove on restore - GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); - GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); - if (!rto->inputIsYPbPr) { - // RGB input that has HD_DYN bypassed, use it now - GBS::HD_DYN_BYPS::write(0); - GBS::HD_U_OFFSET::write(GBS::HD_U_OFFSET::read() + 0x24); - GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); - } - // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly - _WSN(F("on")); - } else { - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 - // if (rto->presetID == 0x05) { - if (rto->resolutionID == Output1080p) { - GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 - } else { - GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 - } - GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore - GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); - if (!rto->inputIsYPbPr) { - // RGB input, HD_DYN_BYPS again - GBS::HD_DYN_BYPS::write(1); - GBS::HD_U_OFFSET::write(0); // probably just 0 by default - GBS::HD_V_OFFSET::write(0); // probably just 0 by default - } - // GBS::IF_IN_DREG_BYPS::write(0); - GBS::ADC_UNUSED_60::write(0); // .. and clear - GBS::ADC_UNUSED_61::write(0); - GBS::ADC_UNUSED_62::write(0); - _WSN(F("off")); - } - serialCommand = '@'; - break; - case 'C': - _WSN(F("PLL: ICLK")); - // display clock in last test best at 0x85 - GBS::PLL648_CONTROL_01::write(0x85); - GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) - latchPLLAD(); - // GBS::VDS_HSCALE::write(512); - rto->syncLockFailIgnore = 16; - FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock - rto->forceRetime = true; - // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock - // applyBestHTotal(FrameSync::init()); // twice - // GBS::VDS_FLOCK_EN::write(1); //risky - delay(200); - break; - case 'Y': - writeProgramArrayNew(ntsc_1280x720, false); - doPostPresetLoadSteps(); - break; - case 'y': - writeProgramArrayNew(pal_1280x720, false); - doPostPresetLoadSteps(); - break; - case 'P': - _WS(F("auto deinterlace: ")); - rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; - if (rto->deinterlaceAutoEnabled) { - _WSN(F("on")); - } else { - _WSN(F("off")); - } - break; - case 'p': - if (!rto->motionAdaptiveDeinterlaceActive) { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled - disableScanlines(); - } - enableMotionAdaptDeinterlace(); - } else { - disableMotionAdaptDeinterlace(); - } - break; - case 'k': - bypassModeSwitch_RGBHV(); - break; - case 'K': - setOutModeHdBypass(false); - // uopt->presetPreference = OutputBypass; - rto->resolutionID = OutputBypass; - _WSN(F("OutputBypass mode is now active")); - saveUserPrefs(); - break; - case 'T': - _WS(F("auto gain ")); - if (uopt->enableAutoGain == 0) { - uopt->enableAutoGain = 1; - setAdcGain(AUTO_GAIN_INIT); - GBS::DEC_TEST_ENABLE::write(1); - _WSN(F("on")); - } else { - uopt->enableAutoGain = 0; - GBS::DEC_TEST_ENABLE::write(0); - _WSN(F("off")); - } - saveUserPrefs(); - break; - case 'e': - writeProgramArrayNew(ntsc_240p, false); - doPostPresetLoadSteps(); - break; - case 'r': - writeProgramArrayNew(pal_240p, false); - doPostPresetLoadSteps(); - break; - case '.': { - if (!rto->outModeHdBypass) { - // bestHtotal recalc - rto->autoBestHtotalEnabled = true; - rto->syncLockFailIgnore = 16; - rto->forceRetime = true; - FrameSync::reset(uopt->frameTimeLockMethod); - - if (!rto->syncWatcherEnabled) { - bool autoBestHtotalSuccess = 0; - delay(30); - autoBestHtotalSuccess = runAutoBestHTotal(); - if (!autoBestHtotalSuccess) { - _WSN(F("(unchanged)")); - } - } - } - } break; - case '!': - // fastGetBestHtotal(); - // readEeprom(); - _WSF(PSTR("sfr: %.02f\n pll: %l\n"), getSourceFieldRate(1), getPllRate()); - break; - case '$': { - // EEPROM write protect pin (7, next to Vcc) is under original MCU control - // MCU drags to Vcc to write, EEPROM drags to Gnd normally - // This routine only works with that "WP" pin disconnected - // 0x17 = input selector? // 0x18 = input selector related? - // 0x54 = coast start 0x55 = coast end - uint16_t writeAddr = 0x54; - const uint8_t eepromAddr = 0x50; - for (; writeAddr < 0x56; writeAddr++) { - Wire.beginTransmission(eepromAddr); - Wire.write(writeAddr >> 8); // high addr byte, 4 bits + - Wire.write((uint8_t)writeAddr); // mlow addr byte, 8 bits = 12 bits (0xfff max) - Wire.write(0x10); // coast end value ? - Wire.endTransmission(); - delay(5); - } + handleSerialCommand(); - // Wire.beginTransmission(eepromAddr); - // Wire.write((uint8_t)0); Wire.write((uint8_t)0); - // Wire.write(0xff); // force eeprom clear probably - // Wire.endTransmission(); - // delay(5); - - _WSN(F("done")); - } break; - case 'j': - // resetPLL(); - latchPLLAD(); - break; - case 'J': - resetPLLAD(); - break; - case 'v': - rto->phaseSP += 1; - rto->phaseSP &= 0x1f; - _WSF(PSTR("SP: %d\n"), rto->phaseSP); - setAndLatchPhaseSP(); - // setAndLatchPhaseADC(); - break; - case 'b': - advancePhase(); - latchPLLAD(); - _WSF(PSTR("ADC: %d\n"), rto->phaseADC); - break; - case '#': - rto->videoStandardInput = 13; - applyPresets(13); - // _WSN(getStatus00IfHsVsStable()); - // globalDelay++; - // _WSN(globalDelay); - break; - case 'n': { - uint16_t pll_divider = GBS::PLLAD_MD::read(); - pll_divider += 1; - GBS::PLLAD_MD::write(pll_divider); - GBS::IF_HSYNC_RST::write((pll_divider / 2)); - GBS::IF_LINE_SP::write(((pll_divider / 2) + 1) + 0x40); - _WSF(PSTR("PLL div: 0x%04X %d\n"), pll_divider, pll_divider); - // set IF before latching - // setIfHblankParameters(); - latchPLLAD(); - delay(1); - // applyBestHTotal(GBS::VDS_HSYNC_RST::read()); - updateClampPosition(); - updateCoastPosition(0); - } break; - case 'N': { - // if (GBS::RFF_ENABLE::read()) { - // disableMotionAdaptDeinterlace(); - // } - // else { - // enableMotionAdaptDeinterlace(); - // } - - // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); - - if (rto->scanlinesEnabled) { - rto->scanlinesEnabled = false; - disableScanlines(); - } else { - rto->scanlinesEnabled = true; - enableScanlines(); - } - } break; - case 'a': - _WSF(PSTR("HTotal++: %d\n"), GBS::VDS_HSYNC_RST::read() + 1); - if (GBS::VDS_HSYNC_RST::read() < 4095) { - if (uopt->enableFrameTimeLock) { - // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); - } - rto->forceRetime = 1; - applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); - } - break; - case 'A': - _WSF(PSTR("HTotal--: %d\n"), GBS::VDS_HSYNC_RST::read() - 1); - if (GBS::VDS_HSYNC_RST::read() > 0) { - if (uopt->enableFrameTimeLock) { - // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); - } - rto->forceRetime = 1; - applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); - } - break; - case 'M': { - } break; - case 'm': - _WS(F("syncwatcher ")); - if (rto->syncWatcherEnabled == true) { - rto->syncWatcherEnabled = false; - if (rto->videoIsFrozen) { - unfreezeVideo(); - } - _WSN(F("off")); - } else { - rto->syncWatcherEnabled = true; - _WSN(F("on")); - } - break; - case ',': - printVideoTimings(); - break; - case 'i': - rto->printInfos = !rto->printInfos; - break; - case 'c': - initUpdateOTA(); - rto->allowUpdatesOTA = true; - _WSN(F("OTA Updates on")); - break; - case 'G': - _WS(F("Debug Pings ")); - if (!rto->enableDebugPings) { - _WSN(F("on")); - rto->enableDebugPings = 1; - } else { - _WSN(F("off")); - rto->enableDebugPings = 0; - } - break; - case 'u': - ResetSDRAM(); - break; - case 'f': - _WS(F("peaking ")); - if (uopt->wantPeaking == 0) { - uopt->wantPeaking = 1; - GBS::VDS_PK_Y_H_BYPS::write(0); - _WSN(F("on")); - } else { - uopt->wantPeaking = 0; - GBS::VDS_PK_Y_H_BYPS::write(1); - _WSN(F("off")); - } - saveUserPrefs(); - break; - case 'F': // switch ADC filter button (dev.mode) - _WS(F("ADC filter ")); - if (GBS::ADC_FLTR::read() > 0) { - GBS::ADC_FLTR::write(0); - _WSN(F("off")); - } else { - GBS::ADC_FLTR::write(3); - _WSN(F("on")); - } - break; - case 'L': { - // Component / VGA Output - uopt->wantOutputComponent = !uopt->wantOutputComponent; - OutputComponentOrVGA(); - saveUserPrefs(); - // apply 1280x720 preset now, otherwise a reboot would be required - uint8_t videoMode = getVideoMode(); - if (videoMode == 0) - videoMode = rto->videoStandardInput; - // OutputResolution backup = rto->presetID; - OutputResolution backup = rto->resolutionID; - // uopt->presetPreference = Output720P; - // rto->presetID = Output720p; - rto->resolutionID = Output720p; - rto->videoStandardInput = 0; // force hard reset - applyPresets(videoMode); - // rto->presetID = backup; - rto->resolutionID = backup; - // uopt->presetPreference = backup; - } break; - case 'l': - _WSN(F("resetSyncProcessor")); - // freezeVideo(); - resetSyncProcessor(); - // delay(10); - // unfreezeVideo(); - break; - case 'Z': { - uopt->matchPresetSource = !uopt->matchPresetSource; - saveUserPrefs(); - uint8_t vidMode = getVideoMode(); - // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { - if (rto->resolutionID == OutputNone && GBS::GBS_PRESET_ID::read() == Output960p50) { - applyPresets(vidMode); - // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { - } else if (rto->resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) { - applyPresets(vidMode); - } - } break; - case 'W': - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; - break; - case 'E': - writeProgramArrayNew(ntsc_1280x1024, false); - _WSN(F("ntsc_1280x1024 is now active")); - doPostPresetLoadSteps(); - break; - case 'R': - writeProgramArrayNew(pal_1280x1024, false); - _WSN(F("pal_1280x1024 is now active")); - doPostPresetLoadSteps(); - break; - case '0': - moveHS(4, true); - break; - case '1': - moveHS(4, false); - break; - case '2': - writeProgramArrayNew(pal_768x576, false); // ModeLine "720x576@50" 27 720 732 795 864 576 581 586 625 -hsync -vsync - _WSN(F("pal_768x576 is now active")); - doPostPresetLoadSteps(); - break; - case '3': - // - break; - case '4': { - // scale vertical + - if (GBS::VDS_VSCALE::read() <= 256) { - _WSN(F("limit")); - break; - } - scaleVertical(2, true); - // actually requires full vertical mask + position offset calculation - } break; - case '5': { - // scale vertical - - if (GBS::VDS_VSCALE::read() == 1023) { - _WSN(F("limit")); - break; - } - scaleVertical(2, false); - // actually requires full vertical mask + position offset calculation - } break; - case '6': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { - if (GBS::IF_HBIN_SP::read() >= 10) { // IF_HBIN_SP: min 2 - GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() - 8); // canvas move right - if ((GBS::IF_HSYNC_RST::read() - 4) > ((GBS::PLLAD_MD::read() >> 1) + 5)) { - GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() - 4); // shrink 1_0e - GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 4); // and 1_22 to go with it - } - } else { - _WSN(F("limit")); - } - } else if (!rto->outModeHdBypass) { - if (GBS::IF_HB_SP2::read() >= 4) - GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a - else - GBS::IF_HB_SP2::write(GBS::IF_HSYNC_RST::read() - 0x30); - if (GBS::IF_HB_ST2::read() >= 4) - GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() - 4); // 1_18 - else - GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); - _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); - } - break; - case '7': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { - if (GBS::IF_HBIN_SP::read() < 0x150) { // (arbitrary) max limit - GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() + 8); // canvas move left - } else { - _WSN(F("limit")); - } - } else if (!rto->outModeHdBypass) { - if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) - GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a - else - GBS::IF_HB_SP2::write(0); - if (GBS::IF_HB_ST2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) - GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() + 4); // 1_18 - else - GBS::IF_HB_ST2::write(0); - _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); - } - break; - case '8': // invert sync button (dev. mode) - // _WSN("invert sync"); - rto->invertSync = !rto->invertSync; - invertHS(); - invertVS(); - // optimizePhaseSP(); - break; - case '9': - writeProgramArrayNew(ntsc_720x480, false); - doPostPresetLoadSteps(); - break; - case 'o': { // oversampring button (dev.mode) - if (rto->osr == 1) { - setOverSampleRatio(2, false); - } else if (rto->osr == 2) { - setOverSampleRatio(4, false); - } else if (rto->osr == 4) { - setOverSampleRatio(1, false); - } - delay(4); - optimizePhaseSP(); - _WSF(PSTR("OSR 0x%02X\n"), rto->osr); - rto->phaseIsSet = 0; // do it again in modes applicable - } break; - case 'g': - inputStage++; - // we have a multibyte command - if (inputStage > 0) { - if (inputStage == 1) { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("G%d"), segmentCurrent); - } else if (inputStage == 2) { - char szNumbers[3]; - szNumbers[0] = Serial.read(); - szNumbers[1] = Serial.read(); - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - if (segmentCurrent <= 5) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" value: 0x%02X\n"), readout); - } else { - discardSerialRxData(); - _WSN(F("abort")); - } - inputStage = 0; - } - } - break; - case 's': - inputStage++; - // we have a multibyte command - if (inputStage > 0) { - if (inputStage == 1) { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("S%d"), segmentCurrent); - } else if (inputStage == 2) { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) { - // ascii 0x30 to 0x39 for '0' to '9' - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { - szNumbers[a] = Serial.read(); - } else { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - } else if (inputStage == 3) { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) { - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { - szNumbers[a] = Serial.read(); - } else { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - inputToogleBit = strtol(szNumbers, NULL, 16); - if (segmentCurrent <= 5) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" (was 0x%04X)"), readout); - writeOneByte(registerCurrent, inputToogleBit); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" is now: 0x%02X\n"), readout); - } else { - discardSerialRxData(); - _WSN(F("abort")); - } - inputStage = 0; - } - } - break; - case 't': - inputStage++; - // we have a multibyte command - if (inputStage > 0) { - if (inputStage == 1) { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("T%d"), segmentCurrent); - } else if (inputStage == 2) { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) { - // ascii 0x30 to 0x39 for '0' to '9' - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { - szNumbers[a] = Serial.read(); - } else { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - } else if (inputStage == 3) { - if (Serial.peek() >= '0' && Serial.peek() <= '7') { - inputToogleBit = Serial.parseInt(); - } else { - inputToogleBit = 255; // will get discarded next step - } - _WSF(PSTR(" Bit: %d"), inputToogleBit); - inputStage = 0; - if ((segmentCurrent <= 5) && (inputToogleBit <= 7)) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" (was 0x%04X)"), readout); - writeOneByte(registerCurrent, readout ^ (1 << inputToogleBit)); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" is now: 0x%02X\n"), readout); - } else { - discardSerialRxData(); - inputToogleBit = registerCurrent = 0; - _WSN(F("abort")); - } - } - } - break; - case '<': { - if (segmentCurrent != 255 && registerCurrent != 255) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - writeOneByte(registerCurrent, readout - 1); // also allow wrapping - _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" : 0x%04X\n"), readout); - } - } break; - case '>': { - if (segmentCurrent != 255 && registerCurrent != 255) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - writeOneByte(registerCurrent, readout + 1); - _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" : 0x%04X\n"), readout); - } - } break; - case '_': { - uint32_t ticks = FrameSync::getPulseTicks(); - _WSN(ticks); - } break; - case '~': - goLowPowerWithInputDetection(); // test reset + input detect - break; - case 'w': { - // Serial.flush(); - uint16_t value = 0; - String what = Serial.readStringUntil(' '); - - if (what.length() > 5) { - _WSN(F("abort")); - inputStage = 0; - break; - } - if (what.equals("f")) { - if (rto->extClockGenDetected) { - _WSF(PSTR("old freqExtClockGen: %l\n"), rto->freqExtClockGen); - rto->freqExtClockGen = Serial.parseInt(); - // safety range: 1 - 250 MHz - if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) { - Si.setFreq(0, rto->freqExtClockGen); - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - } - _WSF(PSTR("set freqExtClockGen: %l\n"), rto->freqExtClockGen); - } - break; - } - - value = Serial.parseInt(); - if (value < 4096) { - _WSF(PSTR("set %s %d\n"), what.c_str(), value); - if (what.equals("ht")) { - // set_htotal(value); - if (!rto->outModeHdBypass) { - rto->forceRetime = 1; - applyBestHTotal(value); - } else { - GBS::VDS_HSYNC_RST::write(value); - } - } else if (what.equals("vt")) { - set_vtotal(value); - } else if (what.equals("hsst")) { - setHSyncStartPosition(value); - } else if (what.equals("hssp")) { - setHSyncStopPosition(value); - } else if (what.equals("hbst")) { - setMemoryHblankStartPosition(value); - } else if (what.equals("hbsp")) { - setMemoryHblankStopPosition(value); - } else if (what.equals("hbstd")) { - setDisplayHblankStartPosition(value); - } else if (what.equals("hbspd")) { - setDisplayHblankStopPosition(value); - } else if (what.equals("vsst")) { - setVSyncStartPosition(value); - } else if (what.equals("vssp")) { - setVSyncStopPosition(value); - } else if (what.equals("vbst")) { - setMemoryVblankStartPosition(value); - } else if (what.equals("vbsp")) { - setMemoryVblankStopPosition(value); - } else if (what.equals("vbstd")) { - setDisplayVblankStartPosition(value); - } else if (what.equals("vbspd")) { - setDisplayVblankStopPosition(value); - } else if (what.equals("sog")) { - setAndUpdateSogLevel(value); - } else if (what.equals("ifini")) { - GBS::IF_INI_ST::write(value); - // _WSN(GBS::IF_INI_ST::read()); - } else if (what.equals("ifvst")) { - GBS::IF_VB_ST::write(value); - // _WSN(GBS::IF_VB_ST::read()); - } else if (what.equals("ifvsp")) { - GBS::IF_VB_SP::write(value); - // _WSN(GBS::IF_VB_ST::read()); - } else if (what.equals("vsstc")) { - setCsVsStart(value); - } else if (what.equals("vsspc")) { - setCsVsStop(value); - } - } else { - _WSN(F("abort")); - } - } break; - case 'x': { - uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); - GBS::IF_HBIN_SP::write(if_hblank_scale_stop + 1); - _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop + 1)); - } break; - case 'X': { - uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); - GBS::IF_HBIN_SP::write(if_hblank_scale_stop - 1); - _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop - 1)); - } break; - case '(': { - writeProgramArrayNew(ntsc_1920x1080, false); - doPostPresetLoadSteps(); - } break; - case ')': { - writeProgramArrayNew(pal_1920x1080, false); - doPostPresetLoadSteps(); - } break; - case 'V': { - _WS(F("step response ")); - uopt->wantStepResponse = !uopt->wantStepResponse; - if (uopt->wantStepResponse) { - GBS::VDS_UV_STEP_BYPS::write(0); - _WSN(F("on")); - } else { - GBS::VDS_UV_STEP_BYPS::write(1); - _WSN(F("off")); - } - saveUserPrefs(); - } break; - case 'S': { - snapToIntegralFrameRate(); - break; - } - case ':': - externalClockGenSyncInOutRate(); - break; - case ';': - externalClockGenResetClock(); - if (rto->extClockGenDetected) { - rto->extClockGenDetected = 0; - _WSN(F("ext clock gen bypass")); - } else { - rto->extClockGenDetected = 1; - _WSN(F("ext clock gen active")); - externalClockGenSyncInOutRate(); - } - //{ - // float bla = 0; - // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; - // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); - // _WSN(bla, 5); - //} - break; - default: - _WSF(PSTR("unknown command: 0x%04X\n"), serialCommand); - break; - } - - delay(1); // give some time to read in eventual next chars - - // a web ui or terminal command has finished. good idea to reset sync lock timer - // important if the command was to change presets, possibly others - lastVsyncLock = millis(); - - if (!Serial.available()) { - // in case we handled a Serial or web server command and there's no more extra commands - // but keep debug view command (resets once called) - if (serialCommand != 'D') { - serialCommand = '@'; - } - wifiLoop(1); - } - } - - if (userCommand != '@') { - handleType2Command(userCommand); - userCommand = '@'; // in case we handled web server command - lastVsyncLock = millis(); - wifiLoop(1); - } + // handle user commands + handleUserCommand(); // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 66e41d2f..5a89bf72 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -75,11 +75,11 @@

    remove preset
    - + --> - + + diff --git a/public/src/index.js b/public/src/index.js index e31a685c..a1a1d06b 100644 --- a/public/src/index.js +++ b/public/src/index.js @@ -3,15 +3,6 @@ * 1. WebUI icons: https://fonts.google.com/icons * */ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; /** * Must be aligned with slots.h -> SlotMeta structure * @@ -98,8 +89,8 @@ const GBSControl = { 'p': "button768×576", 'q': "buttonSourcePassThrough", 's': "buttonSourcePassThrough", - 'u': "buttonSourcePassThrough", - 'w': "buttonLoadCustomPreset", + 'u': "buttonSourcePassThrough", // PresetBypassRGBHV + // 'w': "buttonLoadCustomPreset", }, controlKeysMobileMode: "move", controlKeysMobile: { @@ -161,7 +152,8 @@ const GBSControl = { wifiStaButton: null, wifiStaSSID: null, alert: null, - alertOk: null, + alertAck: null, + alertAct: null, alertContent: null, prompt: null, promptOk: null, @@ -231,7 +223,7 @@ const createWebSocket = () => { displayWifiWarning(false); GBSControl.wsConnectCounter++; clearTimeout(GBSControl.wsTimeout); - GBSControl.wsTimeout = setTimeout(timeOutWs, 6000); + GBSControl.wsTimeout = window.setTimeout(timeOutWs, 6000); GBSControl.isWsActive = true; GBSControl.wsNoSuccessConnectingCounter = 0; }; @@ -242,7 +234,7 @@ const createWebSocket = () => { }; GBSControl.ws.onmessage = (message) => { clearTimeout(GBSControl.wsTimeout); - GBSControl.wsTimeout = setTimeout(timeOutWs, 2700); + GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700); GBSControl.isWsActive = true; const [messageDataAt0, // always # messageDataAt1, // selected resolution ! (hex) @@ -421,8 +413,8 @@ const checkReadyState = () => { * Description placeholder */ const createIntervalChecks = () => { - GBSControl.wsCheckTimer = setInterval(checkWebSocketServer, 500); - GBSControl.updateTerminalTimer = setInterval(updateTerminal, 50); + GBSControl.wsCheckTimer = window.setInterval(checkWebSocketServer, 500); + GBSControl.updateTerminalTimer = window.setInterval(updateTerminal, 50); }; /* API services */ /** @@ -457,7 +449,9 @@ const removePreset = () => { const currentIndex = currentSlot.getAttribute("gbs-slot-id"); const currentName = currentSlot.getAttribute("gbs-name"); if (currentName && currentName.trim() !== "Empty") { - fetch(`http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}`).then(() => { + return fetch(`http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}`).then(() => { + console.log("slot removed, reloadng slots..."); + fetchSlotNames(); }); } ; @@ -479,7 +473,7 @@ const savePreset = () => { currentSlot.setAttribute("gbs-name", currentName); fetch(`http://${GBSControl.serverIP}/slot/save?index=${currentIndex}&name=${currentName.substring(0, 24)}&${+new Date()}`).then(() => { loadUser("4").then(() => { - setTimeout(() => { + window.setTimeout(() => { fetchSlotNames().then((success) => { if (success) { updateSlotNames(); @@ -495,15 +489,15 @@ const savePreset = () => { /** * Description placeholder */ -const loadPreset = () => { - loadUser("3").then(() => { - if (GBSStorage.read("customSlotFilters") === true) { - setTimeout(() => { - fetch(`http://${GBSControl.serverIP}/gbs/restore-filters?${+new Date()}`); - }, 250); - } - }); -}; +// const loadPreset = () => { +// loadUser("3").then(() => { +// if (GBSStorage.read("customSlotFilters") === true) { +// window.setTimeout(() => { +// fetch(`http://${GBSControl.serverIP}/gbs/restore-filters?${+new Date()}`); +// }, 250); +// } +// }); +// }; /** * Description placeholder * @@ -616,7 +610,7 @@ const getSlotPresetName = (resolutionID) => { * Description placeholder */ const fetchSlotNamesErrorRetry = () => { - setTimeout(fetchSlotNamesAndInit, 1000); + window.setTimeout(fetchSlotNamesAndInit, 1000); }; /** * Description placeholder @@ -634,7 +628,7 @@ const fetchSlotNamesAndInit = () => { updateSlotNames(); createWebSocket(); createIntervalChecks(); - setTimeout(hideLoading, 1000); + window.setTimeout(hideLoading, 1000); }); }, fetchSlotNamesErrorRetry) .catch(fetchSlotNamesErrorRetry); @@ -822,114 +816,158 @@ const checkFetchResponseStatus = (response) => { * * @param {File} file */ -const readLocalFile = (file) => { - const reader = new FileReader(); - reader.addEventListener("load", (event) => { - doRestore(reader.result); - }); - reader.readAsArrayBuffer(file); -}; +// const readLocalFile = (file: File) => { +// const reader = new FileReader(); +// reader.addEventListener("load", (event) => { +// doRestore(reader.result as ArrayBuffer); +// }); +// reader.readAsArrayBuffer(file); +// }; /** backup / restore */ const doBackup = () => { - let backupFiles; - let done = 0; - let total = 0; - fetch(`http://${GBSControl.serverIP}/data/dir`) - .then((r) => r.json()) - .then((files) => { - backupFiles = files; - total = files.length; - const funcs = files.map((path) => () => { - return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then((response) => { - GBSControl.ui.progressBackup.setAttribute("gbs-progress", `${done}/${total}`); - done++; - return checkFetchResponseStatus(response) && response.arrayBuffer(); - }); - }); - return serial(funcs); - }) - .then((files) => { - const headerDescriptor = files.reduce((acc, f, index) => { - acc[backupFiles[index]] = f.byteLength; - return acc; - }, {}); - const backupFilesJSON = JSON.stringify(headerDescriptor); - const backupFilesJSONSize = backupFilesJSON.length; - const mainHeader = [ - (backupFilesJSONSize >> 24) & 255, - (backupFilesJSONSize >> 16) & 255, - (backupFilesJSONSize >> 8) & 255, - (backupFilesJSONSize >> 0) & 255, - ]; - const outputArray = [ - ...mainHeader, - ...backupFilesJSON.split("").map((c) => c.charCodeAt(0)), - ...files.reduce((acc, f, index) => { - acc = acc.concat(Array.from(new Uint8Array(f))); - return acc; - }, []), - ]; - downloadBlob(new Blob([new Uint8Array(outputArray)]), `gbs-control.backup-${+new Date()}.bin`); - GBSControl.ui.progressBackup.setAttribute("gbs-progress", ``); - }); + window.location.href = `http://${GBSControl.serverIP}/data/backup?ts=${new Date().getTime()}`; + // let backupFiles: string[]; + // let done = 0; + // let total = 0; + // fetch(`http://${GBSControl.serverIP}/data/dir`) + // .then((r) => r.json()) + // .then((files: string[]) => { + // backupFiles = files; + // total = files.length; + // const funcs = files.map((path: string) => () => { + // return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then( + // (response) => { + // GBSControl.ui.progressBackup.setAttribute( + // "gbs-progress", + // `${done}/${total}` + // ); + // done++; + // return checkFetchResponseStatus(response) && response.arrayBuffer(); + // } + // ); + // }); + // return serial(funcs); + // }) + // .then((files: ArrayBuffer[]) => { + // console.log("after download backup complete"); + // const headerDescriptor = files.reduce((acc, f, index) => { + // acc[backupFiles[index]] = f.byteLength; + // return acc; + // }, {}); + // const backupFilesJSON = JSON.stringify(headerDescriptor); + // const backupFilesJSONSize = backupFilesJSON.length; + // const mainHeader = [ + // (backupFilesJSONSize >> 24) & 255, // size + // (backupFilesJSONSize >> 16) & 255, // size + // (backupFilesJSONSize >> 8) & 255, // size + // (backupFilesJSONSize >> 0) & 255, + // ]; + // const outputArray: number[] = [ + // ...mainHeader, + // ...backupFilesJSON.split("").map((c) => c.charCodeAt(0)), + // ...files.reduce((acc, f, index) => { + // acc = acc.concat(Array.from(new Uint8Array(f))); + // return acc; + // }, []), + // ]; + // downloadBlob( + // new Blob([new Uint8Array(outputArray)]), + // `gbs-control.backup-${+new Date()}.bin` + // ); + // GBSControl.ui.progressBackup.setAttribute("gbs-progress", ``); + // }); }; /** * Restore SLOTS from backup * * @param {ArrayBuffer} file */ -const doRestore = (file) => { +// const doRestore = (file: ArrayBuffer, f: File) => { +const doRestore = (f) => { const { backupInput } = GBSControl.ui; - const fileBuffer = new Uint8Array(file); - const headerCheck = fileBuffer.slice(4, 6); - if (headerCheck[0] !== 0x7b || headerCheck[1] !== 0x22) { - backupInput.setAttribute("disabled", ""); - gbsAlert("Invalid Backup File") - .then(() => { - backupInput.removeAttribute("disabled"); - }, () => { - backupInput.removeAttribute("disabled"); - }) - .catch(() => { - backupInput.removeAttribute("disabled"); - }); - return; - } - const b0 = fileBuffer[0], b1 = fileBuffer[1], b2 = fileBuffer[2], b3 = fileBuffer[3]; - const headerSize = (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - const headerString = Array.from(fileBuffer.slice(4, headerSize + 4)) - .map((c) => String.fromCharCode(c)) - .join(""); - const headerObject = JSON.parse(headerString); - const files = Object.keys(headerObject); - let pos = headerSize + 4; - let total = files.length; - let done = 0; - const funcs = files.map((fileName) => () => __awaiter(this, void 0, void 0, function* () { - const fileContents = fileBuffer.slice(pos, pos + headerObject[fileName]); - const formData = new FormData(); - formData.append("file", new Blob([fileContents], { type: "application/octet-stream" }), fileName.substr(1)); - return yield fetch(`http://${GBSControl.serverIP}/data/upload`, { + // const fileBuffer = new Uint8Array(file); + // const headerCheck = fileBuffer.slice(4, 6); + const bkpTs = f.name.substring(f.name.lastIndexOf('-') + 1, f.name.lastIndexOf('.')); + const backupDate = new Date(parseInt(bkpTs)); + // if (headerCheck[0] !== 0x7b || headerCheck[1] !== 0x22) { + backupInput.setAttribute("disabled", ""); + const formData = new FormData(); + formData.append("gbs-backup.bin", f, f.name); + const setAlertBody = () => { + const fsize = f.size / 1024; + return '

    Backup File:

    Backup date: ' + + backupDate.toLocaleString() + + '

    Size: ' + fsize.toFixed(2) + ' kB

    '; + }; + gbsAlert(setAlertBody(), '
    close
    Reject
    ', '
    done
    Restore
    ').then(() => { + backupInput.removeAttribute("disabled"); + }, () => { + return fetch(`http://${GBSControl.serverIP}/data/restore`, { method: "POST", body: formData, + headers: { + "Content-Type": "application/octet-stream", + } }).then((response) => { - GBSControl.ui.progressRestore.setAttribute("gbs-progress", `${done}/${total}`); - done++; - pos += headerObject[fileName]; - return response; - }); - })); - serial(funcs).then(() => { - // serial(funcs).then(() => { - GBSControl.ui.progressRestore.setAttribute("gbs-progress", ``); - loadUser("a").then(() => { - gbsAlert("Restarting GBSControl.\nPlease wait until wifi reconnects then click OK") - .then(() => { + // backupInput.removeAttribute("disabled"); + window.setTimeout(() => { window.location.reload(); - }) - .catch(() => { }); + }, 2000); + return response; }); + }) + .catch(() => { + backupInput.removeAttribute("disabled"); }); + // return; + // } + // const b0 = fileBuffer[0], + // b1 = fileBuffer[1], + // b2 = fileBuffer[2], + // b3 = fileBuffer[3]; + // const headerSize = (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + // const headerString = Array.from(fileBuffer.slice(4, headerSize + 4)) + // .map((c) => String.fromCharCode(c)) + // .join(""); + // const headerObject = JSON.parse(headerString); + // const files = Object.keys(headerObject); + // let pos = headerSize + 4; + // let total = files.length; + // let done = 0; + // const funcs = files.map((fileName) => async () => { + // const fileContents = fileBuffer.slice(pos, pos + headerObject[fileName]); + // const formData = new FormData(); + // formData.append( + // "file", + // new Blob([fileContents], { type: "application/octet-stream" }), + // fileName.substr(1) + // ); + // return await fetch(`http://${GBSControl.serverIP}/data/restore`, { + // method: "POST", + // body: formData, + // }).then((response) => { + // GBSControl.ui.progressRestore.setAttribute( + // "gbs-progress", + // `${done}/${total}` + // ); + // done++; + // pos += headerObject[fileName]; + // return response; + // }); + // }); + // serial(funcs).then(() => { + // // serial(funcs).then(() => { + // GBSControl.ui.progressRestore.setAttribute("gbs-progress", ``); + // loadUser("a").then(() => { + // gbsAlert( + // "Restarting GBSControl.\nPlease wait until wifi reconnects then click OK" + // ) + // .then(() => { + // window.location.reload(); + // }) + // .catch(() => { }); + // }); + // }); }; /** * Description placeholder @@ -938,6 +976,13 @@ const doRestore = (file) => { * @param {string} [name="file.txt"] */ const downloadBlob = (blob, name = "file.txt") => { + let wnav = window.navigator; + // IE10+ + if (wnav && wnav.msSaveOrOpenBlob) { + wnav.msSaveOrOpenBlob(blob, name); + return; + } + /// normal browsers: // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) const blobUrl = URL.createObjectURL(blob); // Create a link element @@ -954,6 +999,7 @@ const downloadBlob = (blob, name = "file.txt") => { cancelable: true, view: window, })); + window.URL.revokeObjectURL(blobUrl); // Remove link from body document.body.removeChild(link); }; @@ -1014,7 +1060,7 @@ const wifiScanSSID = () => { method: 'POST' }).then(() => { GBSControl.scanSSIDDone = true; - setTimeout(wifiScanSSID, 3000); + window.setTimeout(wifiScanSSID, 3000); }); return; } @@ -1109,7 +1155,7 @@ const controlMouseDown = (control) => () => { clearInterval(control["__interval"]); const click = controlClick(control); click(); - control["__interval"] = setInterval(click, 300); + control["__interval"] = window.setInterval(click, 300); }; /** * Description placeholder @@ -1163,7 +1209,7 @@ const initGBSButtons = () => { button.addEventListener(!("ontouchstart" in window) ? "mousedown" : "touchstart", () => { callback(); clearInterval(button["__interval"]); - button["__interval"] = setInterval(callback, 300); + button["__interval"] = window.setInterval(callback, 300); }); button.addEventListener(!("ontouchstart" in window) ? "mouseup" : "touchend", () => { clearInterval(button["__interval"]); @@ -1258,7 +1304,8 @@ const initUIElements = () => { developerSwitch: document.querySelector("[gbs-dev-switch]"), customSlotFilters: document.querySelector("[gbs-slot-custom-filters]"), alert: document.querySelector('section[name="alert"]'), - alertOk: document.querySelector("[gbs-alert-ok]"), + alertAck: document.querySelector("[gbs-alert-ack]"), + alertAct: document.querySelector("[gbs-alert-act]"), alertContent: document.querySelector("[gbs-alert-content]"), prompt: document.querySelector('section[name="prompt"]'), promptOk: document.querySelector("[gbs-prompt-ok]"), @@ -1276,7 +1323,8 @@ const initGeneralListeners = () => { }); GBSControl.ui.backupInput.addEventListener("change", (event) => { const fileList = event.target["files"]; - readLocalFile(fileList[0]); + doRestore(fileList[0]); + // readLocalFile(fileList[0]); GBSControl.ui.backupInput.value = ""; }); GBSControl.ui.backupButton.addEventListener("click", doBackup); @@ -1286,7 +1334,7 @@ const initGeneralListeners = () => { GBSControl.ui.wifiStaButton.addEventListener("click", wifiScanSSID); GBSControl.ui.developerSwitch.addEventListener("click", toggleDeveloperMode); GBSControl.ui.customSlotFilters.addEventListener("click", toggleCustomSlotFilters); - GBSControl.ui.alertOk.addEventListener("click", () => { + GBSControl.ui.alertAck.addEventListener("click", () => { GBSControl.ui.alert.setAttribute("hidden", ""); gbsAlertPromise.resolve(); }); @@ -1370,25 +1418,45 @@ const alertKeyListener = (event) => { gbsAlertPromise.reject(); } }; +const alertActEventListener = (e) => { + gbsAlertPromise.reject(); +}; /** * Description placeholder * * @param {string} text * @returns {*} */ -const gbsAlert = (text) => { - GBSControl.ui.alertContent.textContent = text; +const gbsAlert = (text, ackText = "", actText = "") => { + GBSControl.ui.alertContent.insertAdjacentHTML('afterbegin', text); GBSControl.ui.alert.removeAttribute("hidden"); document.addEventListener("keyup", alertKeyListener); + if (ackText !== "") { + GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', ackText); + } + else + GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', '
    done
    Ok
    '); + if (actText !== "") { + GBSControl.ui.alertAct.insertAdjacentHTML('afterbegin', actText); + GBSControl.ui.alertAct.removeAttribute("disabled"); + GBSControl.ui.alertAct.addEventListener("click", alertActEventListener); + } return new Promise((resolve, reject) => { - gbsAlertPromise.resolve = (e) => { + const gbsAlertClean = () => { document.removeEventListener("keyup", alertKeyListener); + GBSControl.ui.alertAct.removeEventListener("click", alertActEventListener); + GBSControl.ui.alertAct.setAttribute("disabled", ""); + GBSControl.ui.alertAck.textContent = ""; + GBSControl.ui.alertAct.textContent = ""; + GBSControl.ui.alertContent.textContent = ""; GBSControl.ui.alert.setAttribute("hidden", ""); + }; + gbsAlertPromise.resolve = (e) => { + gbsAlertClean(); return resolve(e); }; gbsAlertPromise.reject = () => { - document.removeEventListener("keyup", alertKeyListener); - GBSControl.ui.alert.setAttribute("hidden", ""); + gbsAlertClean(); return reject(); }; }); diff --git a/public/src/index.ts b/public/src/index.ts index 453e5753..7b254b7f 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -143,7 +143,7 @@ const GBSControl = { 'q': "buttonSourcePassThrough", 's': "buttonSourcePassThrough", // PresetHdBypass 'u': "buttonSourcePassThrough", // PresetBypassRGBHV - 'w': "buttonLoadCustomPreset", + // 'w': "buttonLoadCustomPreset", }, controlKeysMobileMode: "move", controlKeysMobile: { @@ -205,7 +205,8 @@ const GBSControl = { wifiStaButton: null, wifiStaSSID: null, alert: null, - alertOk: null, + alertAck: null, + alertAct: null, alertContent: null, prompt: null, promptOk: null, @@ -284,7 +285,7 @@ const createWebSocket = () => { GBSControl.wsConnectCounter++; clearTimeout(GBSControl.wsTimeout); - GBSControl.wsTimeout = setTimeout(timeOutWs, 6000); + GBSControl.wsTimeout = window.setTimeout(timeOutWs, 6000); GBSControl.isWsActive = true; GBSControl.wsNoSuccessConnectingCounter = 0; }; @@ -299,7 +300,7 @@ const createWebSocket = () => { GBSControl.ws.onmessage = (message: any) => { clearTimeout(GBSControl.wsTimeout); - GBSControl.wsTimeout = setTimeout(timeOutWs, 2700); + GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700); GBSControl.isWsActive = true; const [ @@ -498,8 +499,8 @@ const checkReadyState = () => { * Description placeholder */ const createIntervalChecks = () => { - GBSControl.wsCheckTimer = setInterval(checkWebSocketServer, 500); - GBSControl.updateTerminalTimer = setInterval(updateTerminal, 50); + GBSControl.wsCheckTimer = window.setInterval(checkWebSocketServer, 500); + GBSControl.updateTerminalTimer = window.setInterval(updateTerminal, 50); }; /* API services */ @@ -546,10 +547,11 @@ const removePreset = () => { const currentIndex = currentSlot.getAttribute("gbs-slot-id"); const currentName = currentSlot.getAttribute("gbs-name"); if (currentName && currentName.trim() !== "Empty") { - fetch( + return fetch( `http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}` ).then(() => { - + console.log("slot removed, reloadng slots..."); + fetchSlotNames(); }); }; }; @@ -581,7 +583,7 @@ const savePreset = () => { )}&${+new Date()}` ).then(() => { loadUser("4").then(() => { - setTimeout(() => { + window.setTimeout(() => { fetchSlotNames().then((success: boolean) => { if (success) { updateSlotNames(); @@ -598,15 +600,15 @@ const savePreset = () => { /** * Description placeholder */ -const loadPreset = () => { - loadUser("3").then(() => { - if (GBSStorage.read("customSlotFilters") === true) { - setTimeout(() => { - fetch(`http://${GBSControl.serverIP}/gbs/restore-filters?${+new Date()}`); - }, 250); - } - }); -}; +// const loadPreset = () => { +// loadUser("3").then(() => { +// if (GBSStorage.read("customSlotFilters") === true) { +// window.setTimeout(() => { +// fetch(`http://${GBSControl.serverIP}/gbs/restore-filters?${+new Date()}`); +// }, 250); +// } +// }); +// }; /** * Description placeholder @@ -733,7 +735,7 @@ const getSlotPresetName = (resolutionID: string) => { * Description placeholder */ const fetchSlotNamesErrorRetry = () => { - setTimeout(fetchSlotNamesAndInit, 1000); + window.setTimeout(fetchSlotNamesAndInit, 1000); }; /** @@ -752,7 +754,7 @@ const fetchSlotNamesAndInit = () => { updateSlotNames(); createWebSocket(); createIntervalChecks(); - setTimeout(hideLoading, 1000); + window.setTimeout(hideLoading, 1000); }); }, fetchSlotNamesErrorRetry) .catch(fetchSlotNamesErrorRetry); @@ -988,72 +990,73 @@ const checkFetchResponseStatus = (response: Response) => { * * @param {File} file */ -const readLocalFile = (file: File) => { - const reader = new FileReader(); - reader.addEventListener("load", (event) => { - doRestore(reader.result as ArrayBuffer); - }); - reader.readAsArrayBuffer(file); -}; +// const readLocalFile = (file: File) => { +// const reader = new FileReader(); +// reader.addEventListener("load", (event) => { +// doRestore(reader.result as ArrayBuffer); +// }); +// reader.readAsArrayBuffer(file); +// }; /** backup / restore */ const doBackup = () => { - let backupFiles: string[]; - let done = 0; - let total = 0; - fetch(`http://${GBSControl.serverIP}/data/dir`) - .then((r) => r.json()) - .then((files: string[]) => { - backupFiles = files; - total = files.length; - const funcs = files.map((path: string) => () => { - return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then( - (response) => { - GBSControl.ui.progressBackup.setAttribute( - "gbs-progress", - `${done}/${total}` - ); - done++; - return checkFetchResponseStatus(response) && response.arrayBuffer(); - } - ); - }); - - return serial(funcs); - }) - .then((files: ArrayBuffer[]) => { - console.log("after download backup complete"); - const headerDescriptor = files.reduce((acc, f, index) => { - acc[backupFiles[index]] = f.byteLength; - return acc; - }, {}); - - const backupFilesJSON = JSON.stringify(headerDescriptor); - const backupFilesJSONSize = backupFilesJSON.length; - - const mainHeader = [ - (backupFilesJSONSize >> 24) & 255, // size - (backupFilesJSONSize >> 16) & 255, // size - (backupFilesJSONSize >> 8) & 255, // size - (backupFilesJSONSize >> 0) & 255, - ]; - - const outputArray: number[] = [ - ...mainHeader, - ...backupFilesJSON.split("").map((c) => c.charCodeAt(0)), - ...files.reduce((acc, f, index) => { - acc = acc.concat(Array.from(new Uint8Array(f))); - return acc; - }, []), - ]; - - downloadBlob( - new Blob([new Uint8Array(outputArray)]), - `gbs-control.backup-${+new Date()}.bin` - ); - GBSControl.ui.progressBackup.setAttribute("gbs-progress", ``); - }); + window.location.href = `http://${GBSControl.serverIP}/data/backup?ts=${new Date().getTime()}`; + // let backupFiles: string[]; + // let done = 0; + // let total = 0; + // fetch(`http://${GBSControl.serverIP}/data/dir`) + // .then((r) => r.json()) + // .then((files: string[]) => { + // backupFiles = files; + // total = files.length; + // const funcs = files.map((path: string) => () => { + // return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then( + // (response) => { + // GBSControl.ui.progressBackup.setAttribute( + // "gbs-progress", + // `${done}/${total}` + // ); + // done++; + // return checkFetchResponseStatus(response) && response.arrayBuffer(); + // } + // ); + // }); + + // return serial(funcs); + // }) + // .then((files: ArrayBuffer[]) => { + // console.log("after download backup complete"); + // const headerDescriptor = files.reduce((acc, f, index) => { + // acc[backupFiles[index]] = f.byteLength; + // return acc; + // }, {}); + + // const backupFilesJSON = JSON.stringify(headerDescriptor); + // const backupFilesJSONSize = backupFilesJSON.length; + + // const mainHeader = [ + // (backupFilesJSONSize >> 24) & 255, // size + // (backupFilesJSONSize >> 16) & 255, // size + // (backupFilesJSONSize >> 8) & 255, // size + // (backupFilesJSONSize >> 0) & 255, + // ]; + + // const outputArray: number[] = [ + // ...mainHeader, + // ...backupFilesJSON.split("").map((c) => c.charCodeAt(0)), + // ...files.reduce((acc, f, index) => { + // acc = acc.concat(Array.from(new Uint8Array(f))); + // return acc; + // }, []), + // ]; + + // downloadBlob( + // new Blob([new Uint8Array(outputArray)]), + // `gbs-control.backup-${+new Date()}.bin` + // ); + // GBSControl.ui.progressBackup.setAttribute("gbs-progress", ``); + // }); }; /** @@ -1061,77 +1064,104 @@ const doBackup = () => { * * @param {ArrayBuffer} file */ -const doRestore = (file: ArrayBuffer) => { +// const doRestore = (file: ArrayBuffer, f: File) => { +const doRestore = (f: File) => { const { backupInput } = GBSControl.ui; - const fileBuffer = new Uint8Array(file); - const headerCheck = fileBuffer.slice(4, 6); - - if (headerCheck[0] !== 0x7b || headerCheck[1] !== 0x22) { - backupInput.setAttribute("disabled", ""); - gbsAlert("Invalid Backup File") - .then( - () => { - backupInput.removeAttribute("disabled"); - }, - () => { - backupInput.removeAttribute("disabled"); - } - ) - .catch(() => { - backupInput.removeAttribute("disabled"); - }); - return; - } - const b0 = fileBuffer[0], - b1 = fileBuffer[1], - b2 = fileBuffer[2], - b3 = fileBuffer[3]; - const headerSize = (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - const headerString = Array.from(fileBuffer.slice(4, headerSize + 4)) - .map((c) => String.fromCharCode(c)) - .join(""); - - const headerObject = JSON.parse(headerString); - const files = Object.keys(headerObject); - let pos = headerSize + 4; - let total = files.length; - let done = 0; - const funcs = files.map((fileName) => async () => { - const fileContents = fileBuffer.slice(pos, pos + headerObject[fileName]); - const formData = new FormData(); - formData.append( - "file", - new Blob([fileContents], { type: "application/octet-stream" }), - fileName.substr(1) - ); + // const fileBuffer = new Uint8Array(file); + // const headerCheck = fileBuffer.slice(4, 6); - return await fetch(`http://${GBSControl.serverIP}/data/upload`, { - method: "POST", - body: formData, - }).then((response) => { - GBSControl.ui.progressRestore.setAttribute( - "gbs-progress", - `${done}/${total}` - ); - done++; - pos += headerObject[fileName]; - return response; - }); - }); + const bkpTs = f.name.substring(f.name.lastIndexOf('-') + 1, f.name.lastIndexOf('.')); + const backupDate = new Date(parseInt(bkpTs)); - serial(funcs).then(() => { - // serial(funcs).then(() => { - GBSControl.ui.progressRestore.setAttribute("gbs-progress", ``); - loadUser("a").then(() => { - gbsAlert( - "Restarting GBSControl.\nPlease wait until wifi reconnects then click OK" - ) - .then(() => { - window.location.reload(); - }) - .catch(() => { }); + // if (headerCheck[0] !== 0x7b || headerCheck[1] !== 0x22) { + backupInput.setAttribute("disabled", ""); + const formData = new FormData(); + formData.append("gbs-backup.bin", f, f.name); + const setAlertBody = () => { + const fsize = f.size / 1024; + return '

    Backup File:

    Backup date: ' + + backupDate.toLocaleString() + + '

    Size: ' + fsize.toFixed(2)+' kB

    '; + }; + gbsAlert( + setAlertBody() as string, + '
    close
    Reject
    ', + '
    done
    Restore
    ' + ).then( + () => { + backupInput.removeAttribute("disabled"); + }, + () => { + return fetch(`http://${GBSControl.serverIP}/data/restore`, { + method: "POST", + body: formData, + headers: { + "Content-Type": "application/octet-stream", + } + }).then((response) => { + // backupInput.removeAttribute("disabled"); + window.setTimeout(() => { + window.location.reload(); + }, 2000) + return response; + }); + } + ) + .catch(() => { + backupInput.removeAttribute("disabled"); }); - }); + // return; + // } + // const b0 = fileBuffer[0], + // b1 = fileBuffer[1], + // b2 = fileBuffer[2], + // b3 = fileBuffer[3]; + // const headerSize = (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + // const headerString = Array.from(fileBuffer.slice(4, headerSize + 4)) + // .map((c) => String.fromCharCode(c)) + // .join(""); + + // const headerObject = JSON.parse(headerString); + // const files = Object.keys(headerObject); + // let pos = headerSize + 4; + // let total = files.length; + // let done = 0; + // const funcs = files.map((fileName) => async () => { + // const fileContents = fileBuffer.slice(pos, pos + headerObject[fileName]); + // const formData = new FormData(); + // formData.append( + // "file", + // new Blob([fileContents], { type: "application/octet-stream" }), + // fileName.substr(1) + // ); + + // return await fetch(`http://${GBSControl.serverIP}/data/restore`, { + // method: "POST", + // body: formData, + // }).then((response) => { + // GBSControl.ui.progressRestore.setAttribute( + // "gbs-progress", + // `${done}/${total}` + // ); + // done++; + // pos += headerObject[fileName]; + // return response; + // }); + // }); + + // serial(funcs).then(() => { + // // serial(funcs).then(() => { + // GBSControl.ui.progressRestore.setAttribute("gbs-progress", ``); + // loadUser("a").then(() => { + // gbsAlert( + // "Restarting GBSControl.\nPlease wait until wifi reconnects then click OK" + // ) + // .then(() => { + // window.location.reload(); + // }) + // .catch(() => { }); + // }); + // }); }; /** @@ -1141,6 +1171,13 @@ const doRestore = (file: ArrayBuffer) => { * @param {string} [name="file.txt"] */ const downloadBlob = (blob: Blob, name = "file.txt") => { + let wnav: any = window.navigator; + // IE10+ + if (wnav && wnav.msSaveOrOpenBlob) { + wnav.msSaveOrOpenBlob(blob, name); + return; + } + /// normal browsers: // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) const blobUrl = URL.createObjectURL(blob); @@ -1163,7 +1200,7 @@ const downloadBlob = (blob: Blob, name = "file.txt") => { view: window, }) ); - + window.URL.revokeObjectURL(blobUrl); // Remove link from body document.body.removeChild(link); }; @@ -1232,7 +1269,7 @@ const wifiScanSSID = () => { method: 'POST' }).then(() => { GBSControl.scanSSIDDone = true; - setTimeout(wifiScanSSID, 3000); + window.setTimeout(wifiScanSSID, 3000); }); return; } @@ -1342,7 +1379,7 @@ const controlMouseDown = (control: HTMLButtonElement) => () => { const click = controlClick(control); click(); - control["__interval"] = setInterval(click, 300); + control["__interval"] = window.setInterval(click, 300); }; /** @@ -1417,7 +1454,7 @@ const initGBSButtons = () => { () => { callback(); clearInterval(button["__interval"]); - button["__interval"] = setInterval(callback, 300); + button["__interval"] = window.setInterval(callback, 300); } ); button.addEventListener( @@ -1540,7 +1577,8 @@ const initUIElements = () => { developerSwitch: document.querySelector("[gbs-dev-switch]"), customSlotFilters: document.querySelector("[gbs-slot-custom-filters]"), alert: document.querySelector('section[name="alert"]'), - alertOk: document.querySelector("[gbs-alert-ok]"), + alertAck: document.querySelector("[gbs-alert-ack]"), + alertAct: document.querySelector("[gbs-alert-act]"), alertContent: document.querySelector("[gbs-alert-content]"), prompt: document.querySelector('section[name="prompt"]'), promptOk: document.querySelector("[gbs-prompt-ok]"), @@ -1560,7 +1598,8 @@ const initGeneralListeners = () => { GBSControl.ui.backupInput.addEventListener("change", (event) => { const fileList: FileList = event.target["files"]; - readLocalFile(fileList[0]); + doRestore(fileList[0]); + // readLocalFile(fileList[0]); GBSControl.ui.backupInput.value = ""; }); @@ -1575,7 +1614,7 @@ const initGeneralListeners = () => { toggleCustomSlotFilters ); - GBSControl.ui.alertOk.addEventListener("click", () => { + GBSControl.ui.alertAck.addEventListener("click", () => { GBSControl.ui.alert.setAttribute("hidden", ""); gbsAlertPromise.resolve(); }); @@ -1664,25 +1703,46 @@ const alertKeyListener = (event: any) => { } }; +const alertActEventListener = (e: any) => { + gbsAlertPromise.reject(); +}; + /** * Description placeholder * * @param {string} text * @returns {*} */ -const gbsAlert = (text: string) => { - GBSControl.ui.alertContent.textContent = text; +const gbsAlert = (text: string, ackText: string = "", actText :string = "") => { + GBSControl.ui.alertContent.insertAdjacentHTML('afterbegin', text); GBSControl.ui.alert.removeAttribute("hidden"); document.addEventListener("keyup", alertKeyListener); + if(ackText !== "") { + GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', ackText); + } else + GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', '
    done
    Ok
    '); + + if(actText !== "") { + GBSControl.ui.alertAct.insertAdjacentHTML('afterbegin', actText); + GBSControl.ui.alertAct.removeAttribute("disabled"); + GBSControl.ui.alertAct.addEventListener("click", alertActEventListener); + } return new Promise((resolve, reject) => { - gbsAlertPromise.resolve = (e) => { + const gbsAlertClean = () => { document.removeEventListener("keyup", alertKeyListener); + GBSControl.ui.alertAct.removeEventListener("click", alertActEventListener); + GBSControl.ui.alertAct.setAttribute("disabled", ""); + GBSControl.ui.alertAck.textContent = ""; + GBSControl.ui.alertAct.textContent = ""; + GBSControl.ui.alertContent.textContent = ""; GBSControl.ui.alert.setAttribute("hidden", ""); + }; + gbsAlertPromise.resolve = (e) => { + gbsAlertClean(); return resolve(e); }; gbsAlertPromise.reject = () => { - document.removeEventListener("keyup", alertKeyListener); - GBSControl.ui.alert.setAttribute("hidden", ""); + gbsAlertClean(); return reject(); }; }); diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index 951aa4d2..6d2fa79d 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -31,7 +31,8 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen display->drawXbm((OLED_MENU_WIDTH - TEXT_LOADED_WIDTH) / 2, OLED_MENU_HEIGHT / 2, IMAGE_ITEM(TEXT_LOADED)); display->display(); uint8_t videoMode = getVideoMode(); - OutputResolution preset = OutputBypass; + // OutputResolution preset = OutputBypass; + OutputResolution preset = OutputNone; switch (item->tag) { case MT_1280x960: preset = Output960p; @@ -51,9 +52,9 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen case MT_DOWNSCALE: preset = Output15kHz; break; - // case MT_BYPASS: - // preset = OutputCustom; - // break; + case MT_BYPASS: + preset = OutputBypass; + break; default: break; } @@ -118,7 +119,6 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL display->display(); uopt->presetSlot = 'A' + item->tag; // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:, // uopt->presetPreference = OutputResolution::OutputCustomized; - // rto->presetID = OutputCustom; // @sk: rely on chance that it's already set before manually // rto->resolutionID = OutputCustom; @@ -345,14 +345,14 @@ bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, WiFiMode_t wifiMode = WiFi.getMode(); manager->clearSubItems(item); if (wifiMode == WIFI_STA) { - sprintf(ssid, "SSID: %s", WiFi.SSID().c_str()); + sprintf(ssid, PSTR("SSID: %s"), WiFi.SSID().c_str()); manager->registerItem(item, 0, ssid); if (WiFi.isConnected()) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_WIFI_CONNECTED)); manager->registerItem(item, 0, IMAGE_ITEM(TEXT_WIFI_URL)); - sprintf(ip, "http://%s", WiFi.localIP().toString().c_str()); + sprintf(ip, PSTR("http://%s"), WiFi.localIP().toString().c_str()); manager->registerItem(item, 0, ip); - sprintf(domain, "http://%s", String(gbsc_device_hostname).c_str()); + sprintf(domain, PSTR("http://%s"), FPSTR(gbsc_device_hostname)); manager->registerItem(item, 0, domain); } else { // shouldn't happen? @@ -360,11 +360,11 @@ bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, } } else if (wifiMode == WIFI_AP) { manager->registerItem(item, 0, IMAGE_ITEM(TEXT_WIFI_CONNECT_TO)); - sprintf(ssid, "SSID: %s (%s)", wifiGetApSSID().c_str(), wifiGetApPASS().c_str()); + sprintf(ssid, PSTR("SSID: %s (%s)"), wifiGetApSSID().c_str(), wifiGetApPASS().c_str()); manager->registerItem(item, 0, ssid); manager->registerItem(item, 0, IMAGE_ITEM(TEXT_WIFI_URL)); manager->registerItem(item, 0, "http://192.168.4.1"); - sprintf(domain, "http://%s.local", String(gbsc_device_hostname).c_str()); + sprintf(domain, PSTR("http://%s.local"), FPSTR(gbsc_device_hostname)); manager->registerItem(item, 0, domain); } else { // shouldn't happen? diff --git a/src/OLEDMenuManager.cpp b/src/OLEDMenuManager.cpp index f12d4c52..a7d07cab 100644 --- a/src/OLEDMenuManager.cpp +++ b/src/OLEDMenuManager.cpp @@ -27,7 +27,7 @@ OLEDMenuItem *OLEDMenuManager::allocItem() } if (!newItem) { char msg[40]; - sprintf(msg, "Maximum number of items reached: %d", OLED_MENU_MAX_ITEMS_NUM); + sprintf(msg, PSTR("Maximum number of items reached: %d"), OLED_MENU_MAX_ITEMS_NUM); panicAndDisable(msg); } return newItem; @@ -84,7 +84,7 @@ OLEDMenuItem *OLEDMenuManager::registerItem( if (parent) { if (parent->numSubItem == OLED_MENU_MAX_SUBITEMS_NUM) { char msg[50]; - sprintf(msg, "Maximum number of sub items reached: %d", OLED_MENU_MAX_SUBITEMS_NUM); + sprintf(msg, PSTR("Maximum number of sub items reached: %d"), OLED_MENU_MAX_SUBITEMS_NUM); panicAndDisable(msg); } parent->addSubItem(newItem); diff --git a/src/OLEDMenuManager.h b/src/OLEDMenuManager.h index 1ef21908..fde10e69 100644 --- a/src/OLEDMenuManager.h +++ b/src/OLEDMenuManager.h @@ -61,7 +61,7 @@ class OLEDMenuManager if (itemSP == OLED_MENU_MAX_DEPTH - 1) { char msg[30]; - sprintf(msg, "Maximum depth reached: %d", OLED_MENU_MAX_DEPTH); + sprintf(msg, PSTR("Maximum depth reached: %d"), OLED_MENU_MAX_DEPTH); panicAndDisable(msg); } itemStack[itemSP++] = item; diff --git a/src/main.cpp b/src/main.cpp index ab9f384c..cd72ca75 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Friday, 24th May 2024 9:52:18 pm # +# Last Modified: Monday, 27th May 2024 12:29:27 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -148,7 +148,7 @@ void setup() rto->phaseSP = 16; rto->failRetryAttempts = 0; // rto->presetID = OutputBypass; - rto->resolutionID = OutputBypass; + rto->resolutionID = OutputNone; rto->isCustomPreset = false; rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; @@ -436,11 +436,6 @@ void setup() void loop() { - static uint8_t readout = 0; - static uint8_t segmentCurrent = 255; - static uint8_t registerCurrent = 255; - static uint8_t inputToogleBit = 0; - static uint8_t inputStage = 0; static unsigned long lastTimeSyncWatcher = millis(); static unsigned long lastTimeSourceCheck = 500; // 500 to start right away (after setup it will be 2790ms when we get here) static unsigned long lastTimeInterruptClear = millis(); @@ -448,871 +443,11 @@ void loop() menuLoop(); wifiLoop(0); // WiFi + OTA + WS + MDNS, checks for server enabled + started - // is there a command from Terminal or web ui? // Serial takes precedence - if (Serial.available()) { - serialCommand = Serial.read(); - } else if (inputStage > 0) { - // multistage with no more data - _WSN(F(" abort")); - discardSerialRxData(); - serialCommand = ' '; - } - if (serialCommand != '@') { - _WSF(commandDescr, - "serial", - serialCommand, - serialCommand, - // uopt->presetPreference, - uopt->presetSlot, - uopt->presetSlot, - // rto->presetID - rto->resolutionID, - rto->resolutionID - ); - // multistage with bad characters? - if (inputStage > 0) { - // need 's', 't' or 'g' - if (serialCommand != 's' && serialCommand != 't' && serialCommand != 'g') { - discardSerialRxData(); - _WSN(F(" abort")); - serialCommand = ' '; - } - } - - switch (serialCommand) { - case ' ': - // skip spaces - inputStage = segmentCurrent = registerCurrent = 0; // and reset these - break; - case 'd': { - // don't store scanlines - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { - disableScanlines(); - } - // pal forced 60hz: no need to revert here. let the voffset function handle it - - if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { - FrameSync::reset(uopt->frameTimeLockMethod); - } - // dump - for (int segment = 0; segment <= 5; segment++) { - dumpRegisters(segment); - } - _WSN(F("};")); - } break; - case '+': - _WSN(F("hor. +")); - shiftHorizontalRight(); - // shiftHorizontalRightIF(4); - break; - case '-': - _WSN(F("hor. -")); - shiftHorizontalLeft(); - // shiftHorizontalLeftIF(4); - break; - case '*': - shiftVerticalUpIF(); - break; - case '/': - shiftVerticalDownIF(); - break; - case 'z': - _WSN(F("scale+")); - scaleHorizontal(2, true); - break; - case 'h': - _WSN(F("scale-")); - scaleHorizontal(2, false); - break; - case 'q': - resetDigital(); - delay(2); - ResetSDRAM(); - delay(2); - togglePhaseAdjustUnits(); - // enableVDS(); - break; - case 'D': - _WS(F("debug view: ")); - if (GBS::ADC_UNUSED_62::read() == 0x00) { // "remembers" debug view - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store - GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 - GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup - GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); - GBS::ADC_UNUSED_62::write(1); // remember to remove on restore - GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); - GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); - if (!rto->inputIsYPbPr) { - // RGB input that has HD_DYN bypassed, use it now - GBS::HD_DYN_BYPS::write(0); - GBS::HD_U_OFFSET::write(GBS::HD_U_OFFSET::read() + 0x24); - GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); - } - // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly - _WSN(F("on")); - } else { - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 - // if (rto->presetID == 0x05) { - if (rto->resolutionID == Output1080p) { - GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 - } else { - GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 - } - GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore - GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); - if (!rto->inputIsYPbPr) { - // RGB input, HD_DYN_BYPS again - GBS::HD_DYN_BYPS::write(1); - GBS::HD_U_OFFSET::write(0); // probably just 0 by default - GBS::HD_V_OFFSET::write(0); // probably just 0 by default - } - // GBS::IF_IN_DREG_BYPS::write(0); - GBS::ADC_UNUSED_60::write(0); // .. and clear - GBS::ADC_UNUSED_61::write(0); - GBS::ADC_UNUSED_62::write(0); - _WSN(F("off")); - } - serialCommand = '@'; - break; - case 'C': - _WSN(F("PLL: ICLK")); - // display clock in last test best at 0x85 - GBS::PLL648_CONTROL_01::write(0x85); - GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) - latchPLLAD(); - // GBS::VDS_HSCALE::write(512); - rto->syncLockFailIgnore = 16; - FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock - rto->forceRetime = true; - // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock - // applyBestHTotal(FrameSync::init()); // twice - // GBS::VDS_FLOCK_EN::write(1); //risky - delay(200); - break; - case 'Y': - writeProgramArrayNew(ntsc_1280x720, false); - doPostPresetLoadSteps(); - break; - case 'y': - writeProgramArrayNew(pal_1280x720, false); - doPostPresetLoadSteps(); - break; - case 'P': - _WS(F("auto deinterlace: ")); - rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; - if (rto->deinterlaceAutoEnabled) { - _WSN(F("on")); - } else { - _WSN(F("off")); - } - break; - case 'p': - if (!rto->motionAdaptiveDeinterlaceActive) { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled - disableScanlines(); - } - enableMotionAdaptDeinterlace(); - } else { - disableMotionAdaptDeinterlace(); - } - break; - case 'k': - bypassModeSwitch_RGBHV(); - break; - case 'K': - setOutModeHdBypass(false); - // uopt->presetPreference = OutputBypass; - rto->resolutionID = OutputBypass; - _WSN(F("OutputBypass mode is now active")); - saveUserPrefs(); - break; - case 'T': - _WS(F("auto gain ")); - if (uopt->enableAutoGain == 0) { - uopt->enableAutoGain = 1; - setAdcGain(AUTO_GAIN_INIT); - GBS::DEC_TEST_ENABLE::write(1); - _WSN(F("on")); - } else { - uopt->enableAutoGain = 0; - GBS::DEC_TEST_ENABLE::write(0); - _WSN(F("off")); - } - saveUserPrefs(); - break; - case 'e': - writeProgramArrayNew(ntsc_240p, false); - doPostPresetLoadSteps(); - break; - case 'r': - writeProgramArrayNew(pal_240p, false); - doPostPresetLoadSteps(); - break; - case '.': { - if (!rto->outModeHdBypass) { - // bestHtotal recalc - rto->autoBestHtotalEnabled = true; - rto->syncLockFailIgnore = 16; - rto->forceRetime = true; - FrameSync::reset(uopt->frameTimeLockMethod); - - if (!rto->syncWatcherEnabled) { - bool autoBestHtotalSuccess = 0; - delay(30); - autoBestHtotalSuccess = runAutoBestHTotal(); - if (!autoBestHtotalSuccess) { - _WSN(F("(unchanged)")); - } - } - } - } break; - case '!': - // fastGetBestHtotal(); - // readEeprom(); - _WSF(PSTR("sfr: %.02f\n pll: %l\n"), getSourceFieldRate(1), getPllRate()); - break; - case '$': { - // EEPROM write protect pin (7, next to Vcc) is under original MCU control - // MCU drags to Vcc to write, EEPROM drags to Gnd normally - // This routine only works with that "WP" pin disconnected - // 0x17 = input selector? // 0x18 = input selector related? - // 0x54 = coast start 0x55 = coast end - uint16_t writeAddr = 0x54; - const uint8_t eepromAddr = 0x50; - for (; writeAddr < 0x56; writeAddr++) { - Wire.beginTransmission(eepromAddr); - Wire.write(writeAddr >> 8); // high addr byte, 4 bits + - Wire.write((uint8_t)writeAddr); // mlow addr byte, 8 bits = 12 bits (0xfff max) - Wire.write(0x10); // coast end value ? - Wire.endTransmission(); - delay(5); - } + handleSerialCommand(); - // Wire.beginTransmission(eepromAddr); - // Wire.write((uint8_t)0); Wire.write((uint8_t)0); - // Wire.write(0xff); // force eeprom clear probably - // Wire.endTransmission(); - // delay(5); - - _WSN(F("done")); - } break; - case 'j': - // resetPLL(); - latchPLLAD(); - break; - case 'J': - resetPLLAD(); - break; - case 'v': - rto->phaseSP += 1; - rto->phaseSP &= 0x1f; - _WSF(PSTR("SP: %d\n"), rto->phaseSP); - setAndLatchPhaseSP(); - // setAndLatchPhaseADC(); - break; - case 'b': - advancePhase(); - latchPLLAD(); - _WSF(PSTR("ADC: %d\n"), rto->phaseADC); - break; - case '#': - rto->videoStandardInput = 13; - applyPresets(13); - // _WSN(getStatus00IfHsVsStable()); - // globalDelay++; - // _WSN(globalDelay); - break; - case 'n': { - uint16_t pll_divider = GBS::PLLAD_MD::read(); - pll_divider += 1; - GBS::PLLAD_MD::write(pll_divider); - GBS::IF_HSYNC_RST::write((pll_divider / 2)); - GBS::IF_LINE_SP::write(((pll_divider / 2) + 1) + 0x40); - _WSF(PSTR("PLL div: 0x%04X %d\n"), pll_divider, pll_divider); - // set IF before latching - // setIfHblankParameters(); - latchPLLAD(); - delay(1); - // applyBestHTotal(GBS::VDS_HSYNC_RST::read()); - updateClampPosition(); - updateCoastPosition(0); - } break; - case 'N': { - // if (GBS::RFF_ENABLE::read()) { - // disableMotionAdaptDeinterlace(); - // } - // else { - // enableMotionAdaptDeinterlace(); - // } - - // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); - - if (rto->scanlinesEnabled) { - rto->scanlinesEnabled = false; - disableScanlines(); - } else { - rto->scanlinesEnabled = true; - enableScanlines(); - } - } break; - case 'a': - _WSF(PSTR("HTotal++: %d\n"), GBS::VDS_HSYNC_RST::read() + 1); - if (GBS::VDS_HSYNC_RST::read() < 4095) { - if (uopt->enableFrameTimeLock) { - // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); - } - rto->forceRetime = 1; - applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); - } - break; - case 'A': - _WSF(PSTR("HTotal--: %d\n"), GBS::VDS_HSYNC_RST::read() - 1); - if (GBS::VDS_HSYNC_RST::read() > 0) { - if (uopt->enableFrameTimeLock) { - // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); - } - rto->forceRetime = 1; - applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); - } - break; - case 'M': { - } break; - case 'm': - _WS(F("syncwatcher ")); - if (rto->syncWatcherEnabled == true) { - rto->syncWatcherEnabled = false; - if (rto->videoIsFrozen) { - unfreezeVideo(); - } - _WSN(F("off")); - } else { - rto->syncWatcherEnabled = true; - _WSN(F("on")); - } - break; - case ',': - printVideoTimings(); - break; - case 'i': - rto->printInfos = !rto->printInfos; - break; - case 'c': - initUpdateOTA(); - rto->allowUpdatesOTA = true; - _WSN(F("OTA Updates on")); - break; - case 'G': - _WS(F("Debug Pings ")); - if (!rto->enableDebugPings) { - _WSN(F("on")); - rto->enableDebugPings = 1; - } else { - _WSN(F("off")); - rto->enableDebugPings = 0; - } - break; - case 'u': - ResetSDRAM(); - break; - case 'f': - _WS(F("peaking ")); - if (uopt->wantPeaking == 0) { - uopt->wantPeaking = 1; - GBS::VDS_PK_Y_H_BYPS::write(0); - _WSN(F("on")); - } else { - uopt->wantPeaking = 0; - GBS::VDS_PK_Y_H_BYPS::write(1); - _WSN(F("off")); - } - saveUserPrefs(); - break; - case 'F': // switch ADC filter button (dev.mode) - _WS(F("ADC filter ")); - if (GBS::ADC_FLTR::read() > 0) { - GBS::ADC_FLTR::write(0); - _WSN(F("off")); - } else { - GBS::ADC_FLTR::write(3); - _WSN(F("on")); - } - break; - case 'L': { - // Component / VGA Output - uopt->wantOutputComponent = !uopt->wantOutputComponent; - OutputComponentOrVGA(); - saveUserPrefs(); - // apply 1280x720 preset now, otherwise a reboot would be required - uint8_t videoMode = getVideoMode(); - if (videoMode == 0) - videoMode = rto->videoStandardInput; - // OutputResolution backup = rto->presetID; - OutputResolution backup = rto->resolutionID; - // uopt->presetPreference = Output720P; - // rto->presetID = Output720p; - rto->resolutionID = Output720p; - rto->videoStandardInput = 0; // force hard reset - applyPresets(videoMode); - // rto->presetID = backup; - rto->resolutionID = backup; - // uopt->presetPreference = backup; - } break; - case 'l': - _WSN(F("resetSyncProcessor")); - // freezeVideo(); - resetSyncProcessor(); - // delay(10); - // unfreezeVideo(); - break; - case 'Z': { - uopt->matchPresetSource = !uopt->matchPresetSource; - saveUserPrefs(); - uint8_t vidMode = getVideoMode(); - // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { - if (rto->resolutionID == OutputNone && GBS::GBS_PRESET_ID::read() == Output960p50) { - applyPresets(vidMode); - // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { - } else if (rto->resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) { - applyPresets(vidMode); - } - } break; - case 'W': - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; - break; - case 'E': - writeProgramArrayNew(ntsc_1280x1024, false); - _WSN(F("ntsc_1280x1024 is now active")); - doPostPresetLoadSteps(); - break; - case 'R': - writeProgramArrayNew(pal_1280x1024, false); - _WSN(F("pal_1280x1024 is now active")); - doPostPresetLoadSteps(); - break; - case '0': - moveHS(4, true); - break; - case '1': - moveHS(4, false); - break; - case '2': - writeProgramArrayNew(pal_768x576, false); // ModeLine "720x576@50" 27 720 732 795 864 576 581 586 625 -hsync -vsync - _WSN(F("pal_768x576 is now active")); - doPostPresetLoadSteps(); - break; - case '3': - // - break; - case '4': { - // scale vertical + - if (GBS::VDS_VSCALE::read() <= 256) { - _WSN(F("limit")); - break; - } - scaleVertical(2, true); - // actually requires full vertical mask + position offset calculation - } break; - case '5': { - // scale vertical - - if (GBS::VDS_VSCALE::read() == 1023) { - _WSN(F("limit")); - break; - } - scaleVertical(2, false); - // actually requires full vertical mask + position offset calculation - } break; - case '6': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { - if (GBS::IF_HBIN_SP::read() >= 10) { // IF_HBIN_SP: min 2 - GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() - 8); // canvas move right - if ((GBS::IF_HSYNC_RST::read() - 4) > ((GBS::PLLAD_MD::read() >> 1) + 5)) { - GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() - 4); // shrink 1_0e - GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 4); // and 1_22 to go with it - } - } else { - _WSN(F("limit")); - } - } else if (!rto->outModeHdBypass) { - if (GBS::IF_HB_SP2::read() >= 4) - GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a - else - GBS::IF_HB_SP2::write(GBS::IF_HSYNC_RST::read() - 0x30); - if (GBS::IF_HB_ST2::read() >= 4) - GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() - 4); // 1_18 - else - GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); - _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); - } - break; - case '7': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { - if (GBS::IF_HBIN_SP::read() < 0x150) { // (arbitrary) max limit - GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() + 8); // canvas move left - } else { - _WSN(F("limit")); - } - } else if (!rto->outModeHdBypass) { - if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) - GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a - else - GBS::IF_HB_SP2::write(0); - if (GBS::IF_HB_ST2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) - GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() + 4); // 1_18 - else - GBS::IF_HB_ST2::write(0); - _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); - } - break; - case '8': // invert sync button (dev. mode) - // _WSN("invert sync"); - rto->invertSync = !rto->invertSync; - invertHS(); - invertVS(); - // optimizePhaseSP(); - break; - case '9': - writeProgramArrayNew(ntsc_720x480, false); - doPostPresetLoadSteps(); - break; - case 'o': { // oversampring button (dev.mode) - if (rto->osr == 1) { - setOverSampleRatio(2, false); - } else if (rto->osr == 2) { - setOverSampleRatio(4, false); - } else if (rto->osr == 4) { - setOverSampleRatio(1, false); - } - delay(4); - optimizePhaseSP(); - _WSF(PSTR("OSR 0x%02X\n"), rto->osr); - rto->phaseIsSet = 0; // do it again in modes applicable - } break; - case 'g': - inputStage++; - // we have a multibyte command - if (inputStage > 0) { - if (inputStage == 1) { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("G%d"), segmentCurrent); - } else if (inputStage == 2) { - char szNumbers[3]; - szNumbers[0] = Serial.read(); - szNumbers[1] = Serial.read(); - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - if (segmentCurrent <= 5) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" value: 0x%02X\n"), readout); - } else { - discardSerialRxData(); - _WSN(F("abort")); - } - inputStage = 0; - } - } - break; - case 's': - inputStage++; - // we have a multibyte command - if (inputStage > 0) { - if (inputStage == 1) { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("S%d"), segmentCurrent); - } else if (inputStage == 2) { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) { - // ascii 0x30 to 0x39 for '0' to '9' - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { - szNumbers[a] = Serial.read(); - } else { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - } else if (inputStage == 3) { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) { - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { - szNumbers[a] = Serial.read(); - } else { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - inputToogleBit = strtol(szNumbers, NULL, 16); - if (segmentCurrent <= 5) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" (was 0x%04X)"), readout); - writeOneByte(registerCurrent, inputToogleBit); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" is now: 0x%02X\n"), readout); - } else { - discardSerialRxData(); - _WSN(F("abort")); - } - inputStage = 0; - } - } - break; - case 't': - inputStage++; - // we have a multibyte command - if (inputStage > 0) { - if (inputStage == 1) { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("T%d"), segmentCurrent); - } else if (inputStage == 2) { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) { - // ascii 0x30 to 0x39 for '0' to '9' - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) { - szNumbers[a] = Serial.read(); - } else { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - } else if (inputStage == 3) { - if (Serial.peek() >= '0' && Serial.peek() <= '7') { - inputToogleBit = Serial.parseInt(); - } else { - inputToogleBit = 255; // will get discarded next step - } - _WSF(PSTR(" Bit: %d"), inputToogleBit); - inputStage = 0; - if ((segmentCurrent <= 5) && (inputToogleBit <= 7)) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" (was 0x%04X)"), readout); - writeOneByte(registerCurrent, readout ^ (1 << inputToogleBit)); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" is now: 0x%02X\n"), readout); - } else { - discardSerialRxData(); - inputToogleBit = registerCurrent = 0; - _WSN(F("abort")); - } - } - } - break; - case '<': { - if (segmentCurrent != 255 && registerCurrent != 255) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - writeOneByte(registerCurrent, readout - 1); // also allow wrapping - _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" : 0x%04X\n"), readout); - } - } break; - case '>': { - if (segmentCurrent != 255 && registerCurrent != 255) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - writeOneByte(registerCurrent, readout + 1); - _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" : 0x%04X\n"), readout); - } - } break; - case '_': { - uint32_t ticks = FrameSync::getPulseTicks(); - _WSN(ticks); - } break; - case '~': - goLowPowerWithInputDetection(); // test reset + input detect - break; - case 'w': { - // Serial.flush(); - uint16_t value = 0; - String what = Serial.readStringUntil(' '); - - if (what.length() > 5) { - _WSN(F("abort")); - inputStage = 0; - break; - } - if (what.equals("f")) { - if (rto->extClockGenDetected) { - _WSF(PSTR("old freqExtClockGen: %l\n"), rto->freqExtClockGen); - rto->freqExtClockGen = Serial.parseInt(); - // safety range: 1 - 250 MHz - if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) { - Si.setFreq(0, rto->freqExtClockGen); - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - } - _WSF(PSTR("set freqExtClockGen: %l\n"), rto->freqExtClockGen); - } - break; - } - - value = Serial.parseInt(); - if (value < 4096) { - _WSF(PSTR("set %s %d\n"), what.c_str(), value); - if (what.equals("ht")) { - // set_htotal(value); - if (!rto->outModeHdBypass) { - rto->forceRetime = 1; - applyBestHTotal(value); - } else { - GBS::VDS_HSYNC_RST::write(value); - } - } else if (what.equals("vt")) { - set_vtotal(value); - } else if (what.equals("hsst")) { - setHSyncStartPosition(value); - } else if (what.equals("hssp")) { - setHSyncStopPosition(value); - } else if (what.equals("hbst")) { - setMemoryHblankStartPosition(value); - } else if (what.equals("hbsp")) { - setMemoryHblankStopPosition(value); - } else if (what.equals("hbstd")) { - setDisplayHblankStartPosition(value); - } else if (what.equals("hbspd")) { - setDisplayHblankStopPosition(value); - } else if (what.equals("vsst")) { - setVSyncStartPosition(value); - } else if (what.equals("vssp")) { - setVSyncStopPosition(value); - } else if (what.equals("vbst")) { - setMemoryVblankStartPosition(value); - } else if (what.equals("vbsp")) { - setMemoryVblankStopPosition(value); - } else if (what.equals("vbstd")) { - setDisplayVblankStartPosition(value); - } else if (what.equals("vbspd")) { - setDisplayVblankStopPosition(value); - } else if (what.equals("sog")) { - setAndUpdateSogLevel(value); - } else if (what.equals("ifini")) { - GBS::IF_INI_ST::write(value); - // _WSN(GBS::IF_INI_ST::read()); - } else if (what.equals("ifvst")) { - GBS::IF_VB_ST::write(value); - // _WSN(GBS::IF_VB_ST::read()); - } else if (what.equals("ifvsp")) { - GBS::IF_VB_SP::write(value); - // _WSN(GBS::IF_VB_ST::read()); - } else if (what.equals("vsstc")) { - setCsVsStart(value); - } else if (what.equals("vsspc")) { - setCsVsStop(value); - } - } else { - _WSN(F("abort")); - } - } break; - case 'x': { - uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); - GBS::IF_HBIN_SP::write(if_hblank_scale_stop + 1); - _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop + 1)); - } break; - case 'X': { - uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); - GBS::IF_HBIN_SP::write(if_hblank_scale_stop - 1); - _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop - 1)); - } break; - case '(': { - writeProgramArrayNew(ntsc_1920x1080, false); - doPostPresetLoadSteps(); - } break; - case ')': { - writeProgramArrayNew(pal_1920x1080, false); - doPostPresetLoadSteps(); - } break; - case 'V': { - _WS(F("step response ")); - uopt->wantStepResponse = !uopt->wantStepResponse; - if (uopt->wantStepResponse) { - GBS::VDS_UV_STEP_BYPS::write(0); - _WSN(F("on")); - } else { - GBS::VDS_UV_STEP_BYPS::write(1); - _WSN(F("off")); - } - saveUserPrefs(); - } break; - case 'S': { - snapToIntegralFrameRate(); - break; - } - case ':': - externalClockGenSyncInOutRate(); - break; - case ';': - externalClockGenResetClock(); - if (rto->extClockGenDetected) { - rto->extClockGenDetected = 0; - _WSN(F("ext clock gen bypass")); - } else { - rto->extClockGenDetected = 1; - _WSN(F("ext clock gen active")); - externalClockGenSyncInOutRate(); - } - //{ - // float bla = 0; - // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; - // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); - // _WSN(bla, 5); - //} - break; - default: - _WSF(PSTR("unknown command: 0x%04X\n"), serialCommand); - break; - } - - delay(1); // give some time to read in eventual next chars - - // a web ui or terminal command has finished. good idea to reset sync lock timer - // important if the command was to change presets, possibly others - lastVsyncLock = millis(); - - if (!Serial.available()) { - // in case we handled a Serial or web server command and there's no more extra commands - // but keep debug view command (resets once called) - if (serialCommand != 'D') { - serialCommand = '@'; - } - wifiLoop(1); - } - } - - if (userCommand != '@') { - handleType2Command(userCommand); - userCommand = '@'; // in case we handled web server command - lastVsyncLock = millis(); - wifiLoop(1); - } + // handle user commands + handleUserCommand(); // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && diff --git a/src/menu.cpp b/src/menu.cpp index 93a7a782..1318a91a 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Saturday, 18th May 2024 10:00:27 pm # +# Last Modified: Monday, 27th May 2024 11:00:08 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -670,8 +670,10 @@ void settingsMenuOLED() // } else if (rto->presetID == 0x14) { } else if (rto->resolutionID == Output576p) { display.drawString(0, 0, "768x576"); - } else { // OutputBypass + } else if (rto->resolutionID == OutputBypass) { // OutputBypass display.drawString(0, 0, "bypass"); + } else { + display.drawString(0, 0, "none/240p"); } display.drawString(0, 20, String(ofr, 5) + "Hz"); diff --git a/src/options.h b/src/options.h index 977d8986..ba67e5a5 100644 --- a/src/options.h +++ b/src/options.h @@ -98,6 +98,12 @@ enum OutputResolution : char { OutputBypass = 'q', // passthrough 0 / bypass 0 | 'K' | | PresetHdBypass = 's', // passthrough 1 / bypass 1 PresetBypassRGBHV = 'u', // passthrough 2 / bypass 2 + // It suppose to be that the output custom sets automatically in case + // if user does scale the output video signal. However we operate with + // registers directly (ex: video->scaleHorizontal()) and there is no connection + // between output image scale (ex. GBS::VDS_HSCALE) and resolution + // (however it must be logically, so the custom scale changes output image size) + // hence the following is disabled // OutputCustom = 'w', // ? }; @@ -250,7 +256,7 @@ const char * const preset_names[] PROGMEM = { const char preferencesFile[] PROGMEM = "/preferencesv2.txt"; const char systemInfo[] PROGMEM = "h:%4u v:%4u PLL:%01u A:%02x%02x%02x S:%02x.%02x.%02x %c%c%c%c I:%02x D:%04x m:%hu ht:%4d vt:%4d hpw:%4d u:%3x s:%2x S:%2d W:%2d\n"; -const char commandDescr[] PROGMEM = "> %s command: %c (0x%02X) slotID: %c (0x%02X), resolutionID: %c (0x%02X)\n\n"; +const char commandDescr[] PROGMEM = "\n> %s command: %c (0x%02X) slotID: %c (0x%02X), resolutionID: %c (0x%02X)\n\n"; #ifdef THIS_DEVICE_MASTER const char ap_ssid[] PROGMEM = "gbscontrol"; diff --git a/src/presets.cpp b/src/presets.cpp index 0300b474..ca4b6122 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Friday, 24th May 2024 11:59:56 pm # +# Last Modified: Tuesday, 28th May 2024 12:34:22 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -19,11 +19,10 @@ void loadDefaultUserOptions() { // uopt->presetPreference = Output960P; // #1 - // rto->presetID = Output960p; - rto->resolutionID = Output960p; - uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! - uopt->presetSlot = 'A'; // - uopt->frameTimeLockMethod = 0; // compatibility with more displays + rto->resolutionID = OutputNone; + uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! + uopt->presetSlot = 'A'; // + uopt->frameTimeLockMethod = 0; // compatibility with more displays uopt->enableAutoGain = 0; uopt->wantScanlines = 0; uopt->wantOutputComponent = 0; @@ -50,7 +49,8 @@ void loadPresetMdSection() uint16_t index = 0; uint8_t bank[16]; writeOneByte(0xF0, 1); - for (int j = 6; j <= 7; j++) { // start at 0x60 + for (int j = 6; j <= 7; j++) + { // start at 0x60 copyBank(bank, presetMdSection, &index); writeBytes(j * 16, bank, 16); } @@ -68,6 +68,7 @@ void loadPresetMdSection() void setResetParameters() { _WSN(F("")); + // TODO: do we reset resolution here? rto->videoStandardInput = 0; rto->videoIsFrozen = false; rto->applyPresetDoneStage = 0; @@ -192,17 +193,18 @@ void doPostPresetLoadSteps() // unsigned long postLoadTimer = millis(); // adco->r_gain gets applied if uopt->enableAutoGain is set. - if (uopt->enableAutoGain) { + if (uopt->enableAutoGain) + { // if (uopt->presetPreference == OutputCustomized) { // if (rto->resolutionID == OutputCustom) { - // Loaded custom preset, we want to keep newly loaded gain. Save - // gain written by loadPresetFromLFS -> writeProgramArrayNew. - adco->r_gain = GBS::ADC_RGCTRL::read(); - adco->g_gain = GBS::ADC_GGCTRL::read(); - adco->b_gain = GBS::ADC_BGCTRL::read(); + // Loaded custom preset, we want to keep newly loaded gain. Save + // gain written by loadPresetFromLFS -> writeProgramArrayNew. + adco->r_gain = GBS::ADC_RGCTRL::read(); + adco->g_gain = GBS::ADC_GGCTRL::read(); + adco->b_gain = GBS::ADC_BGCTRL::read(); // } else { - // Loaded fixed preset. Keep adco->r_gain from before overwriting - // registers. + // Loaded fixed preset. Keep adco->r_gain from before overwriting + // registers. // } } @@ -210,20 +212,19 @@ void doPostPresetLoadSteps() // GBS::DAC_RGBS_PWDNZ::write(0); // no DAC // GBS::SFTRST_MEM_FF_RSTZ::write(0); // mem fifos keep in reset - if (rto->videoStandardInput == 0) { + if (rto->videoStandardInput == 0) + { uint8_t videoMode = getVideoMode(); _WSF(PSTR("post preset: rto->videoStandardInput 0 > %d\n"), videoMode); - if (videoMode > 0) { + if (videoMode > 0) + { rto->videoStandardInput = videoMode; } } // set output resolution - // rto->presetID = static_cast(GBS::GBS_PRESET_ID::read()); - // @sk: override resolution via user preset - if (rto->resolutionID == OutputBypass - || rto->resolutionID == PresetHdBypass - || rto->resolutionID == PresetBypassRGBHV) { + if (rto->resolutionID == OutputNone || rto->resolutionID == OutputBypass || rto->resolutionID == PresetHdBypass || rto->resolutionID == PresetBypassRGBHV) + { rto->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); } rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); @@ -234,12 +235,15 @@ void doPostPresetLoadSteps() GBS::ADC_UNUSED_67::write(0); // clear temp storage GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) - if (!rto->isCustomPreset) { + if (!rto->isCustomPreset) + { prepareSyncProcessor(); // todo: handle modes 14 and 15 better, now that they support scaling } - if (rto->videoStandardInput == 14) { + if (rto->videoStandardInput == 14) + { // copy of code in bypassModeSwitch_RGBHV - if (rto->syncTypeCsync == false) { + if (rto->syncTypeCsync == false) + { GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: from hs // use ADC and turn it off = no SOG GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG // having it 0 drags down the SOG (hsync) input; = 1: need to supress SOG decoding GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) @@ -255,7 +259,9 @@ void doPostPresetLoadSteps() GBS::SP_H_PROTECT::write(0); // 5_3e 4 disable for H/V rto->phaseADC = 16; rto->phaseSP = 8; - } else { + } + else + { // todo: SOG SRC can be ADC or HS input pin. HS requires TTL level, ADC can use lower levels // HS seems to have issues at low PLL speeds // maybe add detection whether ADC Sync is needed @@ -277,7 +283,8 @@ void doPostPresetLoadSteps() GBS::SP_H_PROTECT::write(0); GBS::SP_COAST_INV_REG::write(0); // just in case - if (!rto->outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) { + if (!rto->outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) + { // setOutModeHdBypass has it's own and needs to update later updateSpDynamic(0); // remember: rto->videoStandardInput for RGB(C/HV) in scaling is 1, 2 or 3 here } @@ -292,31 +299,41 @@ void doPostPresetLoadSteps() GBS::ADC_AUTO_OFST_TEST::write(1); GBS::ADC_AUTO_OFST_RANGE_REG::write(0x00); // 5_0f U/V ranges = 0 (full range, 1 to 15) - if (rto->inputIsYPbPr == true) { + if (rto->inputIsYPbPr == true) + { applyYuvPatches(); - } else { + } + else + { applyRGBPatches(); } - if (rto->outModeHdBypass) { + if (rto->outModeHdBypass) + { GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP rto->autoBestHtotalEnabled = false; - } else { + } + else + { rto->autoBestHtotalEnabled = true; } rto->phaseADC = GBS::PA_ADC_S::read(); // we can't know which is right, get from preset rto->phaseSP = 8; // get phase into global variables early: before latching - if (rto->inputIsYPbPr) { + if (rto->inputIsYPbPr) + { rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 14; - } else { + } + else + { rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; // similar to yuv, allow variations } setAndUpdateSogLevel(rto->currentLevelSOG); - if (!rto->isCustomPreset) { + if (!rto->isCustomPreset) + { // Writes ADC_RGCTRL. If auto gain is enabled, ADC_RGCTRL will be // overwritten further down at `uopt->enableAutoGain == 1`. setAdcParametersGainAndOffset(); @@ -337,13 +354,16 @@ void doPostPresetLoadSteps() rto->boardHasPower = true; // same // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) { + if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) + { rto->isCustomPreset = 0; // override so it applies section 2 deinterlacer settings } - if (!rto->isCustomPreset) { + if (!rto->isCustomPreset) + { if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || - rto->videoStandardInput == 8 || rto->videoStandardInput == 9) { + rto->videoStandardInput == 8 || rto->videoStandardInput == 9) + { GBS::IF_LD_RAM_BYPS::write(1); // 1_0c 0 no LD, do this before setIfHblankParameters } @@ -367,10 +387,13 @@ void doPostPresetLoadSteps() GBS::VDS_PK_LB_CORE::write(0); // 3_44 0-3 // 1 for anti source jailbars GBS::VDS_PK_LH_CORE::write(0); // 3_46 0-3 // 1 for anti source jailbars // if (rto->presetID == 0x05 || rto->presetID == 0x15) { - if (rto->resolutionID == Output1080p || rto->resolutionID == Output1080p50) { + if (rto->resolutionID == Output1080p || rto->resolutionID == Output1080p50) + { GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 // peaking HF GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 - } else { + } + else + { GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 } @@ -387,8 +410,10 @@ void doPostPresetLoadSteps() setOverSampleRatio(2, true); // prepare only = true // full height option - if (uopt->wantFullHeight) { - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) { + if (uopt->wantFullHeight) + { + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) + { // if (rto->presetID == 0x5) //{ // out 1080p 60 // GBS::VDS_DIS_VB_ST::write(GBS::VDS_VSYNC_RST::read() - 1); @@ -399,9 +424,12 @@ void doPostPresetLoadSteps() // GBS::IF_VB_ST::write(GBS::IF_VB_ST::read() + 4); // _WSN(F("full height")); // } - } else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) { + } + else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) + { // if (rto->presetID == 0x15) { // out 1080p 50 - if (rto->resolutionID == Output1080p50) { // out 1080p 50 + if (rto->resolutionID == Output1080p50) + { // out 1080p 50 GBS::VDS_VSCALE::write(455); GBS::VDS_DIS_VB_ST::write(GBS::VDS_VSYNC_RST::read()); // full = 1125 of 1125 GBS::VDS_DIS_VB_SP::write(42); @@ -412,14 +440,16 @@ void doPostPresetLoadSteps() } } - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) { + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) + { // GBS::PLLAD_ICP::write(5); // 5 rather than 6 to work well with CVBS sync as well as CSync - GBS::ADC_FLTR::write(3); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz - GBS::PLLAD_KS::write(2); // 5_16 - setOverSampleRatio(4, true); // prepare only = true - GBS::IF_SEL_WEN::write(0); // 1_02 0; 0 for SD, 1 for EDTV - if (rto->inputIsYPbPr) { // todo: check other videoStandardInput in component vs rgb + GBS::ADC_FLTR::write(3); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz + GBS::PLLAD_KS::write(2); // 5_16 + setOverSampleRatio(4, true); // prepare only = true + GBS::IF_SEL_WEN::write(0); // 1_02 0; 0 for SD, 1 for EDTV + if (rto->inputIsYPbPr) + { // todo: check other videoStandardInput in component vs rgb GBS::IF_HS_TAP11_BYPS::write(0); // 1_02 4 Tap11 LPF bypass in YUV444to422 GBS::IF_HS_Y_PDELAY::write(2); // 1_02 5+6 delays GBS::VDS_V_DELAY::write(0); // 3_24 2 @@ -428,7 +458,8 @@ void doPostPresetLoadSteps() // downscale preset: source is SD // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) { + if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) + { setCsVsStart(2); // or 3, 0 setCsVsStop(0); // fixes field position GBS::IF_VS_SEL::write(1); // 1_00 5 // turn off VHS sync feature @@ -442,12 +473,15 @@ void doPostPresetLoadSteps() GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 one line fifo for line phase adjust GBS::MADPT_VSCALE_DEC_FACTOR::write(1); // 2_31 0..1 GBS::MADPT_SEL_PHASE_INI::write(0); // 2_31 2 disable for SD (check 240p content) - if (rto->videoStandardInput == 1) { + if (rto->videoStandardInput == 1) + { GBS::IF_HB_ST2::write(0x490); // 1_18 GBS::IF_HB_SP2::write(0x80); // 1_1a GBS::IF_HB_SP::write(0x4A); // 1_12 deinterlace offset, green bar GBS::IF_HBIN_SP::write(0xD0); // 1_26 - } else if (rto->videoStandardInput == 2) { + } + else if (rto->videoStandardInput == 2) + { GBS::IF_HB_SP2::write(0x74); // 1_1a GBS::IF_HB_SP::write(0x50); // 1_12 deinterlace offset, green bar GBS::IF_HBIN_SP::write(0xD0); // 1_26 @@ -455,7 +489,8 @@ void doPostPresetLoadSteps() } } if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || - rto->videoStandardInput == 8 || rto->videoStandardInput == 9) { + rto->videoStandardInput == 8 || rto->videoStandardInput == 9) + { // EDTV p-scan, need to either double adc data rate and halve vds scaling // or disable line doubler (better) (50 / 60Hz shared) @@ -463,7 +498,8 @@ void doPostPresetLoadSteps() GBS::PLLAD_KS::write(1); // 5_16 // if (rto->presetID != 0x06 && rto->presetID != 0x16) { - if (rto->resolutionID != Output15kHz && rto->resolutionID != Output15kHz50) { + if (rto->resolutionID != Output15kHz && rto->resolutionID != Output15kHz50) + { setCsVsStart(14); // pal // hm setCsVsStop(11); // probably setting these for modes 8,9 GBS::IF_HB_SP::write(0); // 1_12 deinterlace offset, fixes colors (downscale needs diff) @@ -479,10 +515,13 @@ void doPostPresetLoadSteps() GBS::VDS_V_DELAY::write(1); // 3_24 2 // new 24.07.2019 : 1, also set 2_17 to 1 GBS::MADPT_Y_DELAY_UV_DELAY::write(1); // 2_17 : 1 GBS::VDS_Y_DELAY::write(3); // 3_24 4/5 delays (ps2 test saying 3 for 1_02 goes with 3 here) - if (rto->videoStandardInput == 9) { - if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) { + if (rto->videoStandardInput == 9) + { + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) + { delay(20); - if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) { + if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) + { GBS::PLLAD_KS::write(0); // 5_16 GBS::VDS_VSCALE_BYPS::write(1); // 3_00 5 no vscale } @@ -491,7 +530,8 @@ void doPostPresetLoadSteps() // downscale preset: source is EDTV // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) { + if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) + { GBS::MADPT_Y_VSCALE_BYPS::write(0); // 2_02 6 GBS::MADPT_UV_VSCALE_BYPS::write(0); // 2_02 7 GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 one line fifo for line phase adjust @@ -501,85 +541,115 @@ void doPostPresetLoadSteps() } } // if (rto->videoStandardInput == 3 && rto->presetID != 0x06) { // ED YUV 60 - if (rto->videoStandardInput == 3 && rto->resolutionID != Output15kHz50) { // ED YUV 60 - setCsVsStart(16); // ntsc - setCsVsStop(13); // - GBS::IF_HB_ST::write(30); // 1_10; magic number - GBS::IF_HBIN_ST::write(0x20); // 1_24 - GBS::IF_HBIN_SP::write(0x60); // 1_26 + if (rto->videoStandardInput == 3 && rto->resolutionID != Output15kHz50) + { // ED YUV 60 + setCsVsStart(16); // ntsc + setCsVsStop(13); // + GBS::IF_HB_ST::write(30); // 1_10; magic number + GBS::IF_HBIN_ST::write(0x20); // 1_24 + GBS::IF_HBIN_SP::write(0x60); // 1_26 // if (rto->presetID == 0x5) { // out 1080p - if (rto->resolutionID == Output1080p) { // out 1080p - GBS::IF_HB_SP2::write(0xB0); // 1_1a - GBS::IF_HB_ST2::write(0x4BC); // 1_18 - // } else if (rto->presetID == 0x3) { // out 720p - } else if (rto->resolutionID == Output720p) { // out 720p - GBS::VDS_VSCALE::write(683); // same as base preset - GBS::IF_HB_ST2::write(0x478); // 1_18 - GBS::IF_HB_SP2::write(0x84); // 1_1a - // } else if (rto->presetID == 0x2) { // out x1024 - } else if (rto->resolutionID == Output1024p) { // out x1024 - GBS::IF_HB_SP2::write(0x84); // 1_1a - GBS::IF_HB_ST2::write(0x478); // 1_18 - // } else if (rto->presetID == 0x1) { // out x960 - } else if (rto->resolutionID == Output960p) { // out x960 - GBS::IF_HB_SP2::write(0x84); // 1_1a - GBS::IF_HB_ST2::write(0x478); // 1_18 - // } else if (rto->presetID == 0x3) { // out x480 - } else if (rto->resolutionID == Output720p) { // out x480 - GBS::IF_HB_ST2::write(0x478); // 1_18 - GBS::IF_HB_SP2::write(0x90); // 1_1a + if (rto->resolutionID == Output1080p) + { // out 1080p + GBS::IF_HB_SP2::write(0xB0); // 1_1a + GBS::IF_HB_ST2::write(0x4BC); // 1_18 + // } else if (rto->presetID == 0x3) { // out 720p + } + else if (rto->resolutionID == Output720p) + { // out 720p + GBS::VDS_VSCALE::write(683); // same as base preset + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x84); // 1_1a + // } else if (rto->presetID == 0x2) { // out x1024 + } + else if (rto->resolutionID == Output1024p) + { // out x1024 + GBS::IF_HB_SP2::write(0x84); // 1_1a + GBS::IF_HB_ST2::write(0x478); // 1_18 + // } else if (rto->presetID == 0x1) { // out x960 + } + else if (rto->resolutionID == Output960p) + { // out x960 + GBS::IF_HB_SP2::write(0x84); // 1_1a + GBS::IF_HB_ST2::write(0x478); // 1_18 + // } else if (rto->presetID == 0x3) { // out x480 + } + else if (rto->resolutionID == Output720p) + { // out x480 + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x90); // 1_1a } - // } else if (rto->videoStandardInput == 4 && rto->presetID != 0x16) { // ED YUV 50 - } else if (rto->videoStandardInput == 4 && rto->resolutionID != Output15kHz50) { // ED YUV 50 - GBS::IF_HBIN_SP::write(0x40); // 1_26 was 0x80 test: ps2 videomodetester 576p mode - GBS::IF_HBIN_ST::write(0x20); // 1_24, odd but need to set this here (blue bar) - GBS::IF_HB_ST::write(0x30); // 1_10 + // } else if (rto->videoStandardInput == 4 && rto->presetID != 0x16) { // ED YUV 50 + } + else if (rto->videoStandardInput == 4 && rto->resolutionID != Output15kHz50) + { // ED YUV 50 + GBS::IF_HBIN_SP::write(0x40); // 1_26 was 0x80 test: ps2 videomodetester 576p mode + GBS::IF_HBIN_ST::write(0x20); // 1_24, odd but need to set this here (blue bar) + GBS::IF_HB_ST::write(0x30); // 1_10 // if (rto->presetID == 0x15) { // out 1080p - if (rto->resolutionID == Output1080p50) { // out 1080p - GBS::IF_HB_ST2::write(0x4C0); // 1_18 - GBS::IF_HB_SP2::write(0xC8); // 1_1a - // } else if (rto->presetID == 0x13) { // out 720p - } else if (rto->resolutionID == Output720p50) { // out 720p - GBS::IF_HB_ST2::write(0x478); // 1_18 - GBS::IF_HB_SP2::write(0x88); // 1_1a - // } else if (rto->presetID == 0x12) { // out x1024 - } else if (rto->resolutionID == Output1024p50) { // out x1024 + if (rto->resolutionID == Output1080p50) + { // out 1080p + GBS::IF_HB_ST2::write(0x4C0); // 1_18 + GBS::IF_HB_SP2::write(0xC8); // 1_1a + // } else if (rto->presetID == 0x13) { // out 720p + } + else if (rto->resolutionID == Output720p50) + { // out 720p + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x88); // 1_1a + // } else if (rto->presetID == 0x12) { // out x1024 + } + else if (rto->resolutionID == Output1024p50) + { // out x1024 // VDS_VB_SP -= 12 used to shift pic up, but seems not necessary anymore // GBS::VDS_VB_SP::write(GBS::VDS_VB_SP::read() - 12); - GBS::IF_HB_ST2::write(0x454); // 1_18 - GBS::IF_HB_SP2::write(0x88); // 1_1a - // } else if (rto->presetID == 0x11) { // out x960 - } else if (rto->resolutionID == Output960p50) { // out x960 - GBS::IF_HB_ST2::write(0x454); // 1_18 - GBS::IF_HB_SP2::write(0x88); // 1_1a - // } else if (rto->presetID == 0x14) { // out x576 - } else if (rto->resolutionID == Output576p50) { // out x576 - GBS::IF_HB_ST2::write(0x478); // 1_18 - GBS::IF_HB_SP2::write(0x90); // 1_1a + GBS::IF_HB_ST2::write(0x454); // 1_18 + GBS::IF_HB_SP2::write(0x88); // 1_1a + // } else if (rto->presetID == 0x11) { // out x960 + } + else if (rto->resolutionID == Output960p50) + { // out x960 + GBS::IF_HB_ST2::write(0x454); // 1_18 + GBS::IF_HB_SP2::write(0x88); // 1_1a + // } else if (rto->presetID == 0x14) { // out x576 + } + else if (rto->resolutionID == Output576p50) + { // out x576 + GBS::IF_HB_ST2::write(0x478); // 1_18 + GBS::IF_HB_SP2::write(0x90); // 1_1a } - } else if (rto->videoStandardInput == 5) { // 720p - GBS::ADC_FLTR::write(1); // 5_03 - GBS::IF_PRGRSV_CNTRL::write(1); // progressive + } + else if (rto->videoStandardInput == 5) + { // 720p + GBS::ADC_FLTR::write(1); // 5_03 + GBS::IF_PRGRSV_CNTRL::write(1); // progressive GBS::IF_HS_DEC_FACTOR::write(0); GBS::INPUT_FORMATTER_02::write(0x74); GBS::VDS_Y_DELAY::write(3); - } else if (rto->videoStandardInput == 6 || rto->videoStandardInput == 7) { // 1080i/p - GBS::ADC_FLTR::write(1); // 5_03 - GBS::PLLAD_KS::write(0); // 5_16 + } + else if (rto->videoStandardInput == 6 || rto->videoStandardInput == 7) + { // 1080i/p + GBS::ADC_FLTR::write(1); // 5_03 + GBS::PLLAD_KS::write(0); // 5_16 GBS::IF_PRGRSV_CNTRL::write(1); GBS::IF_HS_DEC_FACTOR::write(0); GBS::INPUT_FORMATTER_02::write(0x74); GBS::VDS_Y_DELAY::write(3); - } else if (rto->videoStandardInput == 8) { // 25khz + } + else if (rto->videoStandardInput == 8) + { // 25khz // todo: this mode for HV sync uint32_t pllRate = 0; - for (int i = 0; i < 8; i++) { + for (int i = 0; i < 8; i++) + { pllRate += getPllRate(); } pllRate /= 8; _WSF(PSTR("(H-PLL) rate: %l\n"), pllRate); - if (pllRate > 200) { // is PLL even working? - if (pllRate < 1800) { // rate very low? + if (pllRate > 200) + { // is PLL even working? + if (pllRate < 1800) + { // rate very low? GBS::PLLAD_FS::write(0); // then low gain } } @@ -590,33 +660,44 @@ void doPostPresetLoadSteps() // GBS::IF_HB_SP2::write(0x88); // 1_1a GBS::IF_HBIN_SP::write(0x60); // 1_26 works for all output presets // if (rto->presetID == 0x1) { // out x960 - if (rto->resolutionID == Output960p) { // out x960 + if (rto->resolutionID == Output960p) + { // out x960 GBS::VDS_VSCALE::write(410); - // } else if (rto->presetID == 0x2) { // out x1024 - } else if (rto->resolutionID == Output1024p) { // out x1024 + // } else if (rto->presetID == 0x2) { // out x1024 + } + else if (rto->resolutionID == Output1024p) + { // out x1024 GBS::VDS_VSCALE::write(402); - // } else if (rto->presetID == 0x3) { // out 720p - } else if (rto->resolutionID == Output720p) { // out 720p + // } else if (rto->presetID == 0x3) { // out 720p + } + else if (rto->resolutionID == Output720p) + { // out 720p GBS::VDS_VSCALE::write(546); - // } else if (rto->presetID == 0x5) { // out 1080p - } else if (rto->resolutionID == Output1080p) { // out 1080p + // } else if (rto->presetID == 0x5) { // out 1080p + } + else if (rto->resolutionID == Output1080p) + { // out 1080p GBS::VDS_VSCALE::write(400); } } } // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) { + if (rto->resolutionID == Output15kHz || rto->resolutionID == Output15kHz50) + { rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); // override back } resetDebugPort(); bool avoidAutoBest = 0; - if (rto->syncTypeCsync) { - if (GBS::TEST_BUS_2F::read() == 0) { + if (rto->syncTypeCsync) + { + if (GBS::TEST_BUS_2F::read() == 0) + { delay(4); - if (GBS::TEST_BUS_2F::read() == 0) { + if (GBS::TEST_BUS_2F::read() == 0) + { optimizeSogLevel(); avoidAutoBest = 1; delay(4); @@ -626,38 +707,52 @@ void doPostPresetLoadSteps() latchPLLAD(); // besthtotal reliable with this (EDTV modes, possibly others) - if (rto->isCustomPreset) { + if (rto->isCustomPreset) + { // patch in segments not covered in custom preset files (currently seg 2) - if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || rto->videoStandardInput == 8) { + if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || rto->videoStandardInput == 8) + { GBS::MADPT_Y_DELAY_UV_DELAY::write(1); // 2_17 : 1 } // get OSR - if (GBS::DEC1_BYPS::read() && GBS::DEC2_BYPS::read()) { + if (GBS::DEC1_BYPS::read() && GBS::DEC2_BYPS::read()) + { rto->osr = 1; - } else if (GBS::DEC1_BYPS::read() && !GBS::DEC2_BYPS::read()) { + } + else if (GBS::DEC1_BYPS::read() && !GBS::DEC2_BYPS::read()) + { rto->osr = 2; - } else { + } + else + { rto->osr = 4; } // always start with internal clock active first - if (GBS::PLL648_CONTROL_01::read() == 0x75 && GBS::GBS_PRESET_DISPLAY_CLOCK::read() != 0) { + if (GBS::PLL648_CONTROL_01::read() == 0x75 && GBS::GBS_PRESET_DISPLAY_CLOCK::read() != 0) + { GBS::PLL648_CONTROL_01::write(GBS::GBS_PRESET_DISPLAY_CLOCK::read()); - } else if (GBS::GBS_PRESET_DISPLAY_CLOCK::read() == 0) { + } + else if (GBS::GBS_PRESET_DISPLAY_CLOCK::read() == 0) + { _WSN(F("no stored display clock to use!")); } } - if (rto->presetIsPalForce60) { - if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() != 1) { + if (rto->presetIsPalForce60) + { + if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() != 1) + { _WSN(F("pal forced 60hz: apply vshift")); uint16_t vshift = 56; // default shift // if (rto->presetID == 0x5) { - if (rto->resolutionID == Output1080p) { + if (rto->resolutionID == Output1080p) + { GBS::IF_VB_SP::write(4); } // out 1080p - else { + else + { GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + vshift); } GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); @@ -672,33 +767,40 @@ void doPostPresetLoadSteps() GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 // auto ADC gain - if (uopt->enableAutoGain == 1) { - if (adco->r_gain == 0) { + if (uopt->enableAutoGain == 1) + { + if (adco->r_gain == 0) + { // SerialM.printf("ADC gain: reset %x := %x\n", GBS::ADC_RGCTRL::read(), AUTO_GAIN_INIT); setAdcGain(AUTO_GAIN_INIT); GBS::DEC_TEST_ENABLE::write(1); - } else { + } + else + { // SerialM.printf("ADC gain: transferred %x := %x\n", GBS::ADC_RGCTRL::read(), adco->r_gain); GBS::ADC_RGCTRL::write(adco->r_gain); GBS::ADC_GGCTRL::write(adco->g_gain); GBS::ADC_BGCTRL::write(adco->b_gain); GBS::DEC_TEST_ENABLE::write(1); } - } else { + } + else + { GBS::DEC_TEST_ENABLE::write(0); // no need for decimation test to be enabled } // ADC offset if measured - if (adco->r_off != 0 && adco->g_off != 0 && adco->b_off != 0) { + if (adco->r_off != 0 && adco->g_off != 0 && adco->b_off != 0) + { GBS::ADC_ROFCTRL::write(adco->r_off); GBS::ADC_GOFCTRL::write(adco->g_off); GBS::ADC_BOFCTRL::write(adco->b_off); } _WSF(PSTR("ADC offset: R: 0x%04X G: 0x%04X B: 0x%04X\n"), - GBS::ADC_ROFCTRL::read(), - GBS::ADC_GOFCTRL::read(), - GBS::ADC_BOFCTRL::read()); + GBS::ADC_ROFCTRL::read(), + GBS::ADC_GOFCTRL::read(), + GBS::ADC_BOFCTRL::read()); GBS::IF_AUTO_OFST_U_RANGE::write(0); // 0 seems to be full range, else 1 to 15 GBS::IF_AUTO_OFST_V_RANGE::write(0); // 0 seems to be full range, else 1 to 15 @@ -710,15 +812,21 @@ void doPostPresetLoadSteps() // 5_06 + 5_08 will be the target center value, 5_07 sets general offset // s3s3as00 s3s3bs00 s3s3cs00 - if (uopt->wantVdsLineFilter) { + if (uopt->wantVdsLineFilter) + { GBS::VDS_D_RAM_BYPS::write(0); - } else { + } + else + { GBS::VDS_D_RAM_BYPS::write(1); } - if (uopt->wantPeaking) { + if (uopt->wantPeaking) + { GBS::VDS_PK_Y_H_BYPS::write(0); - } else { + } + else + { GBS::VDS_PK_Y_H_BYPS::write(1); } @@ -732,15 +840,21 @@ void doPostPresetLoadSteps() } }*/ - if (uopt->wantStepResponse) { + if (uopt->wantStepResponse) + { // step response requested, but exclude 1080p presets // if (rto->presetID != 0x05 && rto->presetID != 0x15) { - if (rto->resolutionID != Output1080p && rto->resolutionID != Output1080p50) { + if (rto->resolutionID != Output1080p && rto->resolutionID != Output1080p50) + { GBS::VDS_UV_STEP_BYPS::write(0); - } else { + } + else + { GBS::VDS_UV_STEP_BYPS::write(1); } - } else { + } + else + { GBS::VDS_UV_STEP_BYPS::write(1); } @@ -758,7 +872,8 @@ void doPostPresetLoadSteps() if (!rto->outModeHdBypass && rto->autoBestHtotalEnabled && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0 && !avoidAutoBest && - (rto->videoStandardInput >= 1 && rto->videoStandardInput <= 4)) { + (rto->videoStandardInput >= 1 && rto->videoStandardInput <= 4)) + { // autobesthtotal updateCoastPosition(0); delay(1); @@ -766,30 +881,40 @@ void doPostPresetLoadSteps() resetInterruptSogBadBit(); delay(10); // works reliably now on my test HDMI dongle - if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) { + if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) + { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } delay(70); // minimum delay without random failures: TBD - for (uint8_t i = 0; i < 4; i++) { - if (GBS::STATUS_INT_SOG_BAD::read() == 1) { + for (uint8_t i = 0; i < 4; i++) + { + if (GBS::STATUS_INT_SOG_BAD::read() == 1) + { optimizeSogLevel(); resetInterruptSogBadBit(); delay(40); - } else if (getStatus16SpHsStable() && getStatus16SpHsStable()) { + } + else if (getStatus16SpHsStable() && getStatus16SpHsStable()) + { delay(1); // wifi - if (getVideoMode() == rto->videoStandardInput) { + if (getVideoMode() == rto->videoStandardInput) + { bool ok = 0; float sfr = getSourceFieldRate(0); // _WSN(sfr, 3); - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) { + if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) + { if (sfr > 58.6f && sfr < 61.4f) ok = 1; - } else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) { + } + else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) + { if (sfr > 49.1f && sfr < 51.1f) ok = 1; } - if (ok) { // else leave it for later + if (ok) + { // else leave it for later runAutoBestHTotal(); delay(1); // wifi break; @@ -798,11 +923,14 @@ void doPostPresetLoadSteps() } delay(10); } - } else { + } + else + { // scaling rgbhv, HD modes, no autobesthtotal delay(10); // works reliably now on my test HDMI dongle - if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) { + if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) + { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } delay(20); @@ -813,15 +941,19 @@ void doPostPresetLoadSteps() // _WS(F("pp time: ")); _WSN(millis() - postLoadTimer); // make sure - if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) { + if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) + { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } // late adjustments that require some delay time first - if (!rto->isCustomPreset) { - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { + if (!rto->isCustomPreset) + { + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + { // SNES has less total lines and a slight offset (only relevant in 60Hz) - if (GBS::VPERIOD_IF::read() == 523) { + if (GBS::VPERIOD_IF::read() == 523) + { GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + 4); GBS::IF_VB_ST::write(GBS::IF_VB_ST::read() + 4); } @@ -847,7 +979,8 @@ void doPostPresetLoadSteps() resetPLLAD(); // also turns on pllad GBS::PLLAD_LEN::write(1); // 5_11 1 - if (!rto->isCustomPreset) { + if (!rto->isCustomPreset) + { GBS::VDS_IN_DREG_BYPS::write(0); // 3_40 2 // 0 = input data triggered on falling clock edge, 1 = bypass GBS::PLLAD_R::write(3); GBS::PLLAD_S::write(3); @@ -866,21 +999,24 @@ void doPostPresetLoadSteps() GBS::PB_REQ_SEL::write(3); // PlayBack 11 High request Low request // 4_2C, 4_2D should be set by preset GBS::RFF_WFF_OFFSET::write(0x0); // scanline fix - if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4) { + if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4) + { // this also handles mode 14 csync rgbhv GBS::PB_CAP_OFFSET::write(GBS::PB_FETCH_NUM::read() + 4); // 4_37 to 4_39 (green bar) } // 4_12 should be set by preset } - if (!rto->outModeHdBypass) { + if (!rto->outModeHdBypass) + { ResetSDRAM(); } setAndUpdateSogLevel(rto->currentLevelSOG); // use this to cycle SP / ADPLL latches // if (rto->presetID != 0x06 && rto->presetID != 0x16) { - if (rto->resolutionID != Output15kHz && rto->resolutionID != Output15kHz50) { + if (rto->resolutionID != Output15kHz && rto->resolutionID != Output15kHz50) + { // IF_VS_SEL = 1 for SD/HD SP mode in HD mode (5_3e 1) GBS::IF_VS_SEL::write(0); // 0 = "VCR" IF sync, requires VS_FLIP to be on, more stable? GBS::IF_VS_FLIP::write(1); @@ -890,7 +1026,8 @@ void doPostPresetLoadSteps() GBS::SP_CS_CLP_ST::write(32); GBS::SP_CS_CLP_SP::write(48); // same as reset parameters - if (!uopt->wantOutputComponent) { + if (!uopt->wantOutputComponent) + { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out if needed } GBS::DAC_RGBS_PWDNZ::write(1); // DAC on if needed @@ -901,11 +1038,13 @@ void doPostPresetLoadSteps() rto->useHdmiSyncFix = 0; // reset flag GBS::SP_H_PROTECT::write(0); - if (rto->videoStandardInput >= 5) { + if (rto->videoStandardInput >= 5) + { GBS::SP_DIS_SUB_COAST::write(1); // might not disable it at all soon } - if (rto->syncTypeCsync) { + if (rto->syncTypeCsync) + { GBS::SP_EXT_SYNC_SEL::write(1); // 5_20 3 disconnect HV input // stays disconnected until reset condition } @@ -913,7 +1052,8 @@ void doPostPresetLoadSteps() rto->coastPositionIsSet = false; // re-arm these rto->clampPositionIsSet = false; - if (rto->outModeHdBypass) { + if (rto->outModeHdBypass) + { GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status GBS::INTERRUPT_CONTROL_00::write(0x00); @@ -922,29 +1062,36 @@ void doPostPresetLoadSteps() return; // to setOutModeHdBypass(); } - if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) { + if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) + { rto->videoStandardInput = 14; } - if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) { + if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) + { unsigned long timeout = millis(); - while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { + while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) + { delay(4); wifiLoop(0); updateSpDynamic(0); } - while ((getVideoMode() == 0) && (millis() - timeout < 1505)) { + while ((getVideoMode() == 0) && (millis() - timeout < 1505)) + { delay(4); wifiLoop(0); updateSpDynamic(0); } timeout = millis() - timeout; - if (timeout > 1000) { + if (timeout > 1000) + { _WSF(PSTR("to1 is: %l\n"), timeout); } - if (timeout >= 1500) { - if (rto->currentLevelSOG >= 7) { + if (timeout >= 1500) + { + if (rto->currentLevelSOG >= 7) + { optimizeSogLevel(); delay(300); } @@ -953,15 +1100,18 @@ void doPostPresetLoadSteps() // early attempt updateClampPosition(); - if (rto->clampPositionIsSet) { - if (GBS::SP_NO_CLAMP_REG::read() == 1) { + if (rto->clampPositionIsSet) + { + if (GBS::SP_NO_CLAMP_REG::read() == 1) + { GBS::SP_NO_CLAMP_REG::write(0); } } updateSpDynamic(0); - if (!rto->syncWatcherEnabled) { + if (!rto->syncWatcherEnabled) + { GBS::SP_NO_CLAMP_REG::write(0); } @@ -987,22 +1137,29 @@ void doPostPresetLoadSteps() // also need to check for mode 15 // also make sure to turn off autoBestHtotal // if (uopt->presetPreference == 10 && rto->videoStandardInput != 15) { - if (rto->resolutionID == OutputBypass && rto->videoStandardInput != 15) { + if (rto->resolutionID == OutputBypass && rto->videoStandardInput != 15) + { rto->autoBestHtotalEnabled = 0; - if (rto->applyPresetDoneStage == 11) { + if (rto->applyPresetDoneStage == 11) + { // we were here before, stop the loop rto->applyPresetDoneStage = 1; - } else { + } + else + { rto->applyPresetDoneStage = 10; } - } else { + } + else + { // normal modes rto->applyPresetDoneStage = 1; } unfreezeVideo(); - if (uopt->enableFrameTimeLock) { + if (uopt->enableFrameTimeLock) + { activeFrameTimeLockInitialSteps(); } @@ -1030,13 +1187,16 @@ void doPostPresetLoadSteps() _WS(F("720x576")); // else else if (rto->resolutionID == OutputBypass) - _WS(F("passthrough")); + _WS(F("bypass")); else - _WS(F("n/a")); + _WS(F("none/240p")); - if (rto->outModeHdBypass) { + if (rto->outModeHdBypass) + { _WS(F(" (bypass)")); - } else if (rto->isCustomPreset) { + } + else if (rto->isCustomPreset) + { _WS(F(" (custom)")); } @@ -1059,24 +1219,30 @@ void doPostPresetLoadSteps() _WS(F("Medium Res ")); else if (rto->videoStandardInput == 13) _WS(F("VGA/SVGA/XGA/SXGA")); - else if (rto->videoStandardInput == 14) { + else if (rto->videoStandardInput == 14) + { if (rto->syncTypeCsync) _WS(F("scaling RGB (CSync)")); else _WS(F("scaling RGB (HV Sync)")); - } else if (rto->videoStandardInput == 15) { + } + else if (rto->videoStandardInput == 15) + { if (rto->syncTypeCsync) _WS(F("RGB Bypass (CSync)")); else _WS(F("RGB Bypass (HV Sync)")); - } else if (rto->videoStandardInput == 0) - _WS(F("!should not go here!")); // TODO ??? + } + else if (rto->videoStandardInput == 0) + _WS(F("!should not go here!")); // TODO ??? // if (rto->presetID == 0x05 || rto->presetID == 0x15) { - if (rto->resolutionID == Output1080p || rto->resolutionID == Output1080p50) { + if (rto->resolutionID == Output1080p || rto->resolutionID == Output1080p50) + { _WS(F("(set your TV aspect ratio to 16:9!)")); } - if (rto->videoStandardInput == 14) { + if (rto->videoStandardInput == 14) + { _WS(F("\nNote: scaling RGB is still in development")); } // presetPreference = OutputCustomized may fail to load (missing) preset file and arrive here with defaults @@ -1090,29 +1256,37 @@ void doPostPresetLoadSteps() */ void applyPresets(uint8_t videoMode) { -// TODO replace videoMode with VideoStandardInput enum - if (!rto->boardHasPower) { + // TODO replace videoMode with VideoStandardInput enum + if (!rto->boardHasPower) + { _WSN(F("GBS board not responding!")); return; } // if RGBHV scaling and invoked through web ui or custom preset // need to know syncTypeCsync - if (videoMode == 14) { - if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + if (videoMode == 14) + { + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) + { rto->inputIsYPbPr = 0; - if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) { + if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) + { rto->syncTypeCsync = 1; - } else { + } + else + { rto->syncTypeCsync = 0; } } } bool waitExtra = 0; - if (rto->outModeHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) { + if (rto->outModeHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) + { waitExtra = 1; - if (videoMode <= 4 || videoMode == 14 || videoMode == 8 || videoMode == 9) { + if (videoMode <= 4 || videoMode == 14 || videoMode == 8 || videoMode == 9) + { GBS::SFTRST_IF_RSTZ::write(1); // early init GBS::SFTRST_VDS_RSTZ::write(1); GBS::SFTRST_DEC_RSTZ::write(1); @@ -1126,37 +1300,48 @@ void applyPresets(uint8_t videoMode) rto->isCustomPreset = false; // carry over debug view if possible - if (GBS::ADC_UNUSED_62::read() != 0x00) { + if (GBS::ADC_UNUSED_62::read() != 0x00) + { // only if the preset to load isn't custom // (else the command will instantly disable debug view) // if (rto->presetID != OutputCustom) { // if (rto->resolutionID != OutputCustom) { - serialCommand = 'D'; // debug view + serialCommand = 'D'; // debug view // } } - if (videoMode == 0) { + if (videoMode == 0) + { // Unknown _WSN(F("Source format not properly recognized, using active resolution")); - videoMode = 3; // in case of success: override to 480p60 + videoMode = 3; // in case of success: override to 480p60 GBS::ADC_INPUT_SEL::write(1); // RGB delay(100); - if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) + { rto->inputIsYPbPr = 0; rto->syncWatcherEnabled = 1; - if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) { + if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) + { rto->syncTypeCsync = 1; - } else { + } + else + { rto->syncTypeCsync = 0; } - } else { + } + else + { GBS::ADC_INPUT_SEL::write(0); // YPbPr delay(100); - if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { + if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) + { rto->inputIsYPbPr = 1; rto->syncTypeCsync = 1; rto->syncWatcherEnabled = 1; - } else { + } + else + { // found nothing at all, turn off output // If we call setResetParameters(), soon afterwards loop() -> @@ -1170,33 +1355,40 @@ void applyPresets(uint8_t videoMode) // it *enables* the output (showing a green screen) even if // previously disabled, and we want to *disable* it. // rto->presetID = OutputNone; - /// @sk: leaving Bypass - // rto->resolutionID = OutputBypass; + // + // @sk: supressed for now + // + // rto->resolutionID = OutputNone; return; } } } - if (uopt->PalForce60 == 1) { + if (uopt->PalForce60 == 1) + { // if (uopt->presetPreference != 2) { // != custom. custom saved as pal preset has ntsc customization // if (rto->resolutionID != OutputCustom) { // != custom. custom saved as pal preset has ntsc customization - if (videoMode == 2 || videoMode == 4) { - _WSN(F("PAL@50 to 60Hz")); - rto->presetIsPalForce60 = 1; - } - if (videoMode == 2) { - videoMode = 1; - } - if (videoMode == 4) { - videoMode = 3; - } + if (videoMode == 2 || videoMode == 4) + { + _WSN(F("PAL@50 to 60Hz")); + rto->presetIsPalForce60 = 1; + } + if (videoMode == 2) + { + videoMode = 1; + } + if (videoMode == 4) + { + videoMode = 3; + } // } } /// If uopt->presetPreference == OutputCustomized and we load a custom /// preset, check if it's intended to bypass scaling at the current input /// resolution. If so, setup bypass and skip the rest of applyPresets(). - auto applySavedBypassPreset = [&videoMode]() -> bool { + auto applySavedBypassPreset = [&videoMode]() -> bool + { /* Types: @@ -1249,127 +1441,166 @@ void applyPresets(uint8_t videoMode) */ uint8_t rawPresetId = GBS::GBS_PRESET_ID::read(); - if (rawPresetId == PresetHdBypass) { + if (rawPresetId == PresetHdBypass) + { // Required for switching from 240p to 480p to work. rto->videoStandardInput = videoMode; // Setup video mode passthrough. setOutModeHdBypass(true); - _DBGN(F("setting OutputBypass mode")); + _DBGN(F("setting OutputHDBypass mode")); return true; } - if (rawPresetId == PresetBypassRGBHV) { + if (rawPresetId == PresetBypassRGBHV) + { // TODO implement bypassModeSwitch_RGBHV (I don't have RGBHV inputs to verify) } return false; }; - if (videoMode == 1 || videoMode == 3 || videoMode == 8 || videoMode == 9 || videoMode == 14) { + if (videoMode == 1 || videoMode == 3 || videoMode == 8 || videoMode == 9 || videoMode == 14) + { // NTSC input // if (uopt->presetPreference == 0) { - if (rto->resolutionID == OutputNone) { // TODO is this OutputBypass ??? + if (rto->resolutionID == OutputNone) + { writeProgramArrayNew(ntsc_240p, false); _WSN(F("ntsc_240p is now active")); - // } else if (uopt->presetPreference == 1) { - } else if (rto->resolutionID == Output480p) { + // } else if (uopt->presetPreference == 1) { + } + else if (rto->resolutionID == Output480p) + { writeProgramArrayNew(ntsc_720x480, false); _WSN(F("ntsc_720x480 is now active")); - // } else if (uopt->presetPreference == 3) { - } else if (rto->resolutionID == Output720p) { + // } else if (uopt->presetPreference == 3) { + } + else if (rto->resolutionID == Output720p) + { writeProgramArrayNew(ntsc_1280x720, false); _WSN(F("ntsc_1280x720 is now active")); } + #if defined(ESP8266) // else if (uopt->presetPreference == OutputCustomized) { - /* else if (rto->resolutionID == OutputCustom) {*/ - if (rto->resolutionID != OutputBypass - && rto->resolutionID != PresetHdBypass - && rto->resolutionID != PresetBypassRGBHV) { + if (rto->resolutionID != OutputNone + && rto->resolutionID != OutputBypass + && rto->resolutionID != PresetHdBypass + && rto->resolutionID != PresetBypassRGBHV) + { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); _WSF(PSTR("Bypass* preset: %d is now active\n"), preset); - if (applySavedBypassPreset()) { + if (applySavedBypassPreset()) + { return; } } // } else if (uopt->presetPreference == 4) { - else if (rto->resolutionID == Output1024p) { - if (uopt->matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) { + else if (rto->resolutionID == Output1024p) + { + if (uopt->matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) + { writeProgramArrayNew(ntsc_240p, false); // pref = x1024 override to x960 _WSN(F("ntsc_240p is now active")); - } else { + } + else + { writeProgramArrayNew(ntsc_1280x1024, false); _WSN(F("ntsc_1280x1024 is now active")); } } -#endif +#endif // defined(ESP8266) + // else if (uopt->presetPreference == 5) { - else if (rto->resolutionID == Output1080p) { + else if (rto->resolutionID == Output1080p) + { writeProgramArrayNew(ntsc_1920x1080, false); _WSN(F("ntsc_1920x1080 is now active")); - // } else if (uopt->presetPreference == 6) { - } else if (rto->resolutionID == Output15kHz) { + // } else if (uopt->presetPreference == 6) { + } + else if (rto->resolutionID == Output15kHz) + { writeProgramArrayNew(ntsc_downscale, false); _WSN(F("ntsc_downscale is now active")); } - - } else if (videoMode == 2 || videoMode == 4) { + } + else if (videoMode == 2 || videoMode == 4) + { // PAL input // if (uopt->presetPreference == 0) { - if (rto->resolutionID == OutputNone) { - if (uopt->matchPresetSource) { + if (rto->resolutionID == OutputNone) + { + if (uopt->matchPresetSource) + { writeProgramArrayNew(pal_1280x1024, false); // pref = x960 override to x1024 _WSN(F("pal_1280x1024 is now active")); - } else { + } + else + { writeProgramArrayNew(pal_240p, false); _WSN(F("pal_240p is now active")); } - // } else if (uopt->presetPreference == 1) { - } else if (rto->resolutionID == Output576p) { + // } else if (uopt->presetPreference == 1) { + } + else if (rto->resolutionID == Output576p) + { writeProgramArrayNew(pal_768x576, false); _WSN(F("pal_768x576 is now active")); - // } else if (uopt->presetPreference == 3) { - } else if (rto->resolutionID == Output720p) { + // } else if (uopt->presetPreference == 3) { + } + else if (rto->resolutionID == Output720p) + { writeProgramArrayNew(pal_1280x720, false); _WSN(F("pal_1280x720 is now active")); } + #if defined(ESP8266) // else if (uopt->presetPreference == OutputCustomized) { - /* else if (rto->resolutionID == OutputCustom) {*/ - if (rto->resolutionID != OutputBypass - && rto->resolutionID != PresetHdBypass - && rto->resolutionID != PresetBypassRGBHV) { + // else if (rto->resolutionID == OutputCustom) + else if (rto->resolutionID != OutputNone && rto->resolutionID != OutputBypass && rto->resolutionID != PresetHdBypass && rto->resolutionID != PresetBypassRGBHV) + { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); _WSF(PSTR("Bypass* preset: %d is now active\n"), preset); - if (applySavedBypassPreset()) { + if (applySavedBypassPreset()) + { return; } } // } else if (uopt->presetPreference == 4) { - else if (rto->resolutionID == Output1024p) { + else if (rto->resolutionID == Output1024p) + { writeProgramArrayNew(pal_1280x1024, false); _WSN(F("pal_1280x1024 is now active")); } -#endif +#endif // defined(ESP8266) + // else if (uopt->presetPreference == 5) { - else if (rto->resolutionID == Output1080p) { + else if (rto->resolutionID == Output1080p) + { writeProgramArrayNew(pal_1920x1080, false); _WSN(F("pal_1920x1080 is now active")); - // } else if (uopt->presetPreference == 6) { - } else if (rto->resolutionID == Output15kHz) { + // } else if (uopt->presetPreference == 6) { + } + else if (rto->resolutionID == Output15kHz) + { writeProgramArrayNew(pal_downscale, false); _WSN(F("pal_downscale is now active")); } - } else if (videoMode == 5 || videoMode == 6 || videoMode == 7 || videoMode == 13) { + } + else if (videoMode == 5 || videoMode == 6 || videoMode == 7 || videoMode == 13) + { // use bypass mode for these HD sources rto->videoStandardInput = videoMode; setOutModeHdBypass(false); return; - } else if (videoMode == 15) { + } + else if (videoMode == 15) + { _WS(F("RGB/HV ")); - if (rto->syncTypeCsync) { + if (rto->syncTypeCsync) + { _WS(F("(CSync) ")); } // if (uopt->preferScalingRgbhv) { @@ -1382,7 +1613,8 @@ void applyPresets(uint8_t videoMode) } rto->videoStandardInput = videoMode; - if (waitExtra) { + if (waitExtra) + { // extra time needed for digital resets, so that autobesthtotal works first attempt // _WSN("waitExtra 400ms"); delay(400); // min ~ 300 @@ -1399,15 +1631,13 @@ void loadPresetDeinterlacerSection() uint16_t index = 0; uint8_t bank[16]; writeOneByte(0xF0, 2); - for (int j = 0; j <= 3; j++) { // start at 0x00 + for (int j = 0; j <= 3; j++) + { // start at 0x00 copyBank(bank, presetDeinterlacerSection, &index); writeBytes(j * 16, bank, 16); } } - - - #if defined(ESP8266) /** @@ -1416,7 +1646,7 @@ void loadPresetDeinterlacerSection() * @param forVideoMode * @return const uint8_t* */ -const uint8_t * loadPresetFromLFS(byte forVideoMode) +const uint8_t *loadPresetFromLFS(byte forVideoMode) { static uint8_t preset[432]; String s = ""; @@ -1425,7 +1655,8 @@ const uint8_t * loadPresetFromLFS(byte forVideoMode) fs::File f; f = LittleFS.open(FPSTR(preferencesFile), "r"); - if (f) { + if (f) + { // uint8_t result[3]; // todo: move file cursor manually // result[0] = f.read(); // slotID @@ -1434,8 +1665,10 @@ const uint8_t * loadPresetFromLFS(byte forVideoMode) slot = static_cast(f.read()); f.close(); - _WSF(PSTR("current slot: %c\n"), &slot); - } else { + _WSF(PSTR("current slot: %c (%#02x)\n"), slot, slot); + } + else + { // file not found, we don't know what preset to load _WSN(F("please select a preset slot first!")); // say "slot" here to make people save usersettings if (forVideoMode == 2 || forVideoMode == 4) @@ -1446,39 +1679,56 @@ const uint8_t * loadPresetFromLFS(byte forVideoMode) _WSF(PSTR("loading from preset slot %c: "), slot); - if (forVideoMode == 1) { + if (forVideoMode == 1) + { // strcpy(buffer, PSTR("/preset_ntsc.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc.%02x"), static_cast(slot)); - } else if (forVideoMode == 2) { + } + else if (forVideoMode == 2) + { // strcpy(buffer, PSTR("/preset_pal.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_pal.%02x"), static_cast(slot)); - } else if (forVideoMode == 3) { + } + else if (forVideoMode == 3) + { // strcpy(buffer, PSTR("/preset_ntsc_480p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc_480p.%02x"), static_cast(slot)); - } else if (forVideoMode == 4) { + } + else if (forVideoMode == 4) + { // strcpy(buffer, PSTR("/preset_pal_576p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_pal_576p.%02x"), static_cast(slot)); - } else if (forVideoMode == 5) { + } + else if (forVideoMode == 5) + { // strcpy(buffer, PSTR("/preset_ntsc_720p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc_720p.%02x"), static_cast(slot)); - } else if (forVideoMode == 6) { + } + else if (forVideoMode == 6) + { // strcpy(buffer, PSTR("/preset_ntsc_1080p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc_1080p.%02x"), static_cast(slot)); - } else if (forVideoMode == 8) { + } + else if (forVideoMode == 8) + { // strcpy(buffer, PSTR("/preset_medium_res.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_medium_res.%02x"), static_cast(slot)); - } else if (forVideoMode == 14) { + } + else if (forVideoMode == 14) + { // strcpy(buffer, PSTR("/preset_vga_upscale.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_vga_upscale.%02x"), static_cast(slot)); - } else if (forVideoMode == 0) { + } + else if (forVideoMode == 0) + { // strcpy(buffer, PSTR("/preset_unknown.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_unknown.%02x"), static_cast(slot)); @@ -1486,13 +1736,16 @@ const uint8_t * loadPresetFromLFS(byte forVideoMode) // reading preset data f = LittleFS.open(buffer, "r"); - if (!f) { + if (!f) + { _WSN(F("no preset file for this slot and source")); if (forVideoMode == 2 || forVideoMode == 4) return pal_240p; else return ntsc_240p; - } else { + } + else + { _WSF(PSTR("reading preset data from: %s\n"), f.name()); s = f.readStringUntil('}'); f.close(); @@ -1501,7 +1754,8 @@ const uint8_t * loadPresetFromLFS(byte forVideoMode) char *tmp; uint16_t i = 0; tmp = strtok(&s[0], ","); - while (tmp) { + while (tmp) + { preset[i++] = (uint8_t)atoi(tmp); tmp = strtok(NULL, ","); yield(); // wifi stack @@ -1511,8 +1765,12 @@ const uint8_t * loadPresetFromLFS(byte forVideoMode) } /** - * @brief Save "preset.slot" data. If preference file exists it will be overriden - * + * @brief Save "preset.slot" data. If preset file exists it will be overriden + * Logic: + * - create preset file ("preset.current_slot"). Preset name identified by input video signal + * - read all registers of PLC and save the data into preset file. In other words the PLC snapshot with + * all the previous changes being saved into preset file and will be autoloaded next time + * if the current slot is active and the input video signal matches preset. */ void savePresetToFS() { @@ -1523,57 +1781,74 @@ void savePresetToFS() // first figure out if the user has set a preferenced slot f = LittleFS.open(FPSTR(preferencesFile), "r"); - if (f) { + if (f) + { // uint8_t result[3]; // todo: move file cursor manually // result[0] = f.read(); // slotID // result[1] = f.read(); // result[2] = f.read(); - slot = static_cast(f.read()); // got the slot to save to now + slot = static_cast(f.read()); // got the slot to save to f.close(); - _WSF(PSTR("current slot: %c\n"), &slot); - } else { + } + else + { // file not found, we don't know where to save this preset - _WSN(F("please select a preset slot first!")); + _WSN(F("(!) please select a slot first")); return; } - _WSF(PSTR("saving to preset slot %c: "), slot); - - if (rto->videoStandardInput == 1) { + if (rto->videoStandardInput == 1) + { // strcpy(buffer, PSTR("/preset_ntsc.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 2) { + } + else if (rto->videoStandardInput == 2) + { // strcpy(buffer, PSTR("/preset_pal.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_pal.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 3) { + } + else if (rto->videoStandardInput == 3) + { // strcpy(buffer, PSTR("/preset_ntsc_480p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc_480p.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 4) { + } + else if (rto->videoStandardInput == 4) + { // strcpy(buffer, PSTR("/preset_pal_576p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_pal_576p.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 5) { + } + else if (rto->videoStandardInput == 5) + { // strcpy(buffer, PSTR("/preset_ntsc_720p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc_720p.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 6) { + } + else if (rto->videoStandardInput == 6) + { // strcpy(buffer, PSTR("/preset_ntsc_1080p.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_ntsc_1080p.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 8) { + } + else if (rto->videoStandardInput == 8) + { // strcpy(buffer, PSTR("/preset_medium_res.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_medium_res.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 14) { + } + else if (rto->videoStandardInput == 14) + { // strcpy(buffer, PSTR("/preset_vga_upscale.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_vga_upscale.%02x"), static_cast(slot)); - } else if (rto->videoStandardInput == 0) { + } + else if (rto->videoStandardInput == 0) + { // strcpy(buffer, PSTR("/preset_unknown.")); // strcat(buffer, &slot); sprintf(buffer, PSTR("/preset_unknown.%02x"), static_cast(slot)); @@ -1581,75 +1856,89 @@ void savePresetToFS() // open preset file f = LittleFS.open(buffer, "w"); - if (!f) { + if (!f) + { _WSF(PSTR("failed to open preset file: %s\n"), buffer); - } else { - _WSF(PSTR("reading preset file: %s\n"), buffer); + } + else + { + _WSF(PSTR("preset data saved into: %s (slot: %c)\n"), buffer, slot); GBS::GBS_PRESET_CUSTOM::write(1); // use one reserved bit to mark this as a custom preset // don't store scanlines - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + { disableScanlines(); } - if (!rto->extClockGenDetected) { - if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { + if (!rto->extClockGenDetected) + { + if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) + { FrameSync::reset(uopt->frameTimeLockMethod); } } - for (int i = 0; i <= 5; i++) { + for (int i = 0; i <= 5; i++) + { writeOneByte(0xF0, i); - switch (i) { - case 0: - for (int x = 0x40; x <= 0x5F; x++) { - readFromRegister(x, 1, &readout); - f.print(readout); - f.println(","); - } - for (int x = 0x90; x <= 0x9F; x++) { - readFromRegister(x, 1, &readout); - f.print(readout); - f.println(","); - } - break; - case 1: - for (int x = 0x0; x <= 0x2F; x++) { - readFromRegister(x, 1, &readout); - f.print(readout); - f.println(","); - } - break; - case 2: - // not needed anymore - break; - case 3: - for (int x = 0x0; x <= 0x7F; x++) { - readFromRegister(x, 1, &readout); - f.print(readout); - f.println(","); - } - break; - case 4: - for (int x = 0x0; x <= 0x5F; x++) { - readFromRegister(x, 1, &readout); - f.print(readout); - f.println(","); - } - break; - case 5: - for (int x = 0x0; x <= 0x6F; x++) { - readFromRegister(x, 1, &readout); - f.print(readout); - f.println(","); - } - break; + switch (i) + { + case 0: + for (int x = 0x40; x <= 0x5F; x++) + { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + for (int x = 0x90; x <= 0x9F; x++) + { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 1: + for (int x = 0x0; x <= 0x2F; x++) + { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 2: + // not needed anymore + break; + case 3: + for (int x = 0x0; x <= 0x7F; x++) + { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 4: + for (int x = 0x0; x <= 0x5F; x++) + { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; + case 5: + for (int x = 0x0; x <= 0x6F; x++) + { + readFromRegister(x, 1, &readout); + f.print(readout); + f.println(","); + } + break; } } - // EOF "byte" + // EOF symbol f.println("};"); - _WSF(PSTR("preset saved as: %s\n"), f.name()); f.close(); + _WSF(PSTR("preset saved as: %s\n"), buffer); } } @@ -1659,8 +1948,11 @@ void savePresetToFS() */ void saveUserPrefs() { + savePresetToFS(); + fs::File f = LittleFS.open(FPSTR(preferencesFile), "w"); - if (!f) { + if (!f) + { _WSF(PSTR("saveUserPrefs: open %s file failed\n"), FPSTR(preferencesFile)); return; } @@ -1687,8 +1979,7 @@ void saveUserPrefs() f.write(uopt->scanlineStrength + '0'); // #18 f.write(uopt->disableExternalClockGenerator + '0'); // #19 - f.close(); } -#endif // defined(ESP8266) \ No newline at end of file +#endif // defined(ESP8266) \ No newline at end of file diff --git a/src/video.cpp b/src/video.cpp index e43e3168..6ef1445d 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Friday, 24th May 2024 11:59:56 pm # +# Last Modified: Monday, 27th May 2024 1:19:57 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -1397,7 +1397,7 @@ void setOutModeHdBypass(bool regsInitialized) // remember debug view // if (uopt->presetPreference != 2) { // if (rto->resolutionID != OutputCustom) { - serialCommand = 'D'; + serialCommand = 'D'; // } } @@ -2828,7 +2828,7 @@ void shiftHorizontalRight() // } /** - * @brief + * @brief Output video control horizontal scale serial commands (h, z) * * @param amountToScale * @param subtracting @@ -4504,9 +4504,10 @@ void runSyncWatcher() // todo: this hack is hard to understand when looking at applypreset and mode is suddenly 1,2 or 3 // if (uopt->presetPreference == 2) { // if (rto->resolutionID == OutputCustom) { - if (rto->resolutionID != OutputBypass - && rto->resolutionID != PresetHdBypass - && rto->resolutionID != PresetBypassRGBHV) { + if (rto->resolutionID != OutputNone + && rto->resolutionID != OutputBypass + && rto->resolutionID != PresetHdBypass + && rto->resolutionID != PresetBypassRGBHV) { // custom preset defined, try to load (set mode = 14 here early) rto->videoStandardInput = 14; } else { diff --git a/src/wifiman.cpp b/src/wifiman.cpp index ecca66f2..3866eeb8 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Friday, 24th May 2024 10:07:02 pm # +# Last Modified: Monday, 27th May 2024 11:09:31 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -99,34 +99,25 @@ void updateWebSocketData() char toSend[MESSAGE_LEN] = ""; toSend[0] = '#'; // makeshift ping in slot 0 - // toSend[1] = static_cast(rto->presetID); toSend[1] = static_cast(rto->resolutionID); - // if (rto->isCustomPreset) { - // toSend[1] = 'C'; - // } else + // @sk: left here for reference // switch (rto->presetID) { - // case Output960p: - // // case 0x11: + // case 0x11: // Output960p // toSend[1] = '1'; // break; - // case Output1024p: - // // case 0x12: + // case 0x12: // Output1024p // toSend[1] = '2'; // break; - // case Output720p: - // // case 0x13: + // case 0x13: // Output720p // toSend[1] = '3'; // break; - // case Output480p: - // // case 0x14: + // case 0x14: // Output480p // toSend[1] = '4'; // break; - // case Output1080p: - // // case 0x15: + // case 0x15: // Output1080p // toSend[1] = '5'; // break; - // case Output15kHz: - // // case 0x16: + // case 0x16: // Output15kHz // toSend[1] = '6'; // break; // case OutputBypass: // bypass 0 diff --git a/src/wserial.cpp b/src/wserial.cpp index e718f02c..1380739a 100644 --- a/src/wserial.cpp +++ b/src/wserial.cpp @@ -3,7 +3,7 @@ # File: wserial.cpp # # File Created: Friday, 19th April 2024 4:13:35 pm # # Author: Sergey Ko # -# Last Modified: Saturday, 4th May 2024 12:31:47 am # +# Last Modified: Monday, 27th May 2024 12:23:15 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -13,8 +13,8 @@ #include "wserial.h" /** - * @brief - * + * @brief + * */ void discardSerialRxData() { diff --git a/src/wserial.h b/src/wserial.h index 6c5b853d..b28d7a55 100644 --- a/src/wserial.h +++ b/src/wserial.h @@ -3,7 +3,7 @@ # File: wserial.h # # File Created: Friday, 19th April 2024 4:13:41 pm # # Author: Sergey Ko # -# Last Modified: Saturday, 4th May 2024 12:31:47 am # +# Last Modified: Monday, 27th May 2024 12:23:27 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # diff --git a/src/wserver.cpp b/src/wserver.cpp index 98d0db1a..c28d35db 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Friday, 24th May 2024 9:15:00 pm # +# Last Modified: Tuesday, 28th May 2024 1:36:47 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -12,18 +12,24 @@ #include "wserver.h" -#define LOMEM_WEB ((ESP.getFreeHeap() < 10000UL)) -#define ASSERT_LOMEM_RETURN() do { \ - if (LOMEM_WEB) { \ - char msg[128] = ""; \ - sprintf_P(msg, lomemMessage, ESP.getFreeHeap()); \ - server.send(200, mimeTextHtml, msg); \ - return; \ - } \ -} while(0) -#define ASSERT_LOMEM_GOTO(G) do { \ - if (LOMEM_WEB) goto G; \ -} while(0) +#define LOMEM_WEB ((ESP.getFreeHeap() < 10000UL)) +#define ASSERT_LOMEM_RETURN() \ + do \ + { \ + if (LOMEM_WEB) \ + { \ + char msg[128] = ""; \ + sprintf_P(msg, lomemMessage, ESP.getFreeHeap()); \ + server.send(200, mimeTextHtml, msg); \ + return; \ + } \ + } while (0) +#define ASSERT_LOMEM_GOTO(G) \ + do \ + { \ + if (LOMEM_WEB) \ + goto G; \ + } while (0) /** * @brief Initializer @@ -39,9 +45,9 @@ void serverInit() server.on(F("/slot/save"), HTTP_GET, serverSlotSave); server.on(F("/slot/remove"), HTTP_GET, serverSlotRemove); // server.on(F("/data/upload"), HTTP_GET, serverFsUpload); - server.on(F("/data/upload"), HTTP_POST, serverFsUploadResponder, serverFsUploadHandler); - server.on(F("/data/download"), HTTP_GET, serverFsDownloadHandler); - server.on(F("/data/dir"), HTTP_GET, serverFsDir); + server.on(F("/data/restore"), HTTP_POST, serverFsUploadResponder, serverFsUploadHandler); + server.on(F("/data/backup"), HTTP_GET, serverBackupDownload); + // server.on(F("/data/dir"), HTTP_GET, serverFsDir); // server.on(F("/data/format"), HTTP_GET, serverFsFormat); server.on(F("/wifi/status"), HTTP_GET, serverWiFiStatus); server.on(F("/gbs/restore-filters"), HTTP_GET, serverRestoreFilters); @@ -52,7 +58,6 @@ void serverInit() server.on("/wifi/ap", HTTP_POST, serverWiFiAP); server.on("/wifi/rst", HTTP_POST, serverWiFiReset); - server.keepAlive(false); server.begin(); // Webserver for the site } @@ -65,7 +70,8 @@ void serverHome() ASSERT_LOMEM_RETURN(); server.sendHeader(F("Content-Encoding"), F("gzip")); fs::File index = LittleFS.open(String(indexPage), "r"); - if(index) { + if (index) + { server.streamFile(index, mimeTextHtml); index.close(); return; @@ -81,13 +87,15 @@ void serverHome() void serverSC() { ASSERT_LOMEM_RETURN(); - if (server.args() > 0) { + if (server.args() > 0) + { const String p = server.argName(0); serialCommand = p.charAt(0); // hack, problem with '+' command received via url param - if (serialCommand == ' ') { + if (serialCommand == ' ') + { serialCommand = '+'; } // _DBG(F("[w] serial command received: ")); @@ -103,7 +111,8 @@ void serverSC() void serverUC() { ASSERT_LOMEM_RETURN(); - if (server.args() > 0) { + if (server.args() > 0) + { String p = server.argName(0); userCommand = p.charAt(0); // _DBG(F("[w] user command received: ")); @@ -122,16 +131,19 @@ void serverSlots() ASSERT_LOMEM_RETURN(); fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - if (!slotsBinaryFile) { + if (!slotsBinaryFile) + { _DBGN(F("/slots.bin not found, attempting to create")); fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); - if(slotsBinaryFile) { + if (slotsBinaryFile) + { SlotMetaArray slotsObject; String slot_name = String(emptySlotName); - for (int i = 0; i < SLOTS_TOTAL; i++) { + for (int i = 0; i < SLOTS_TOTAL; i++) + { slotsObject.slot[i].slot = i; // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].resolutionID = OutputBypass; + slotsObject.slot[i].resolutionID = OutputNone; slotsObject.slot[i].scanlines = 0; slotsObject.slot[i].scanlinesStrength = 0; slotsObject.slot[i].wantVdsLineFilter = false; @@ -140,7 +152,9 @@ void serverSlots() strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); } slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); - } else { + } + else + { _DBGN(F("unable to create /slots.bin")); goto stream_slots_bin_failed; } @@ -163,7 +177,8 @@ void serverSlotSet() { ASSERT_LOMEM_GOTO(server_slot_set_failure); - if (server.args() > 0) { + if (server.args() > 0) + { SlotMetaArray slotsObject; // TODO here must be the slot index (1,2,3,4,...) const String slotParamValue = server.arg(0); @@ -172,7 +187,8 @@ void serverSlotSet() // slotParamValue.toCharArray(slotValue, sizeof(slotValue)); uopt->presetSlot = static_cast(slotParamValue.charAt(0)); fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - if(slotsBinaryFile) { + if (slotsBinaryFile) + { slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); // update parameters @@ -182,7 +198,9 @@ void serverSlotSet() uopt->wantVdsLineFilter = slotsObject.slot[slotIndex].wantVdsLineFilter; uopt->wantStepResponse = slotsObject.slot[slotIndex].wantStepResponse; uopt->wantPeaking = slotsObject.slot[slotIndex].wantPeaking; - } else { + } + else + { _DBGN(F("unable to read /slots.bin")); goto server_slot_set_failure; } @@ -192,7 +210,20 @@ void serverSlotSet() _WSF(PSTR("slot change success: %c\n"), slotParamValue.charAt(0)); server.send(200, mimeAppJson, F("true")); // begin loading new preset on the next loop - userCommand = '3'; + // userCommand = '3'; + // TODO: unknown logic + if (rto->videoStandardInput == 14) + { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } + else + { + // also does loadPresetFromLFS() + applyPresets(rto->videoStandardInput); + } + // save new slotID into preferences + saveUserPrefs(); return; } server_slot_set_failure: @@ -208,22 +239,27 @@ void serverSlotSave() bool result = false; ASSERT_LOMEM_GOTO(server_slot_save_end); // TODO: too many open-closes... - if (server.args() > 0) { + if (server.args() > 0) + { // slot name String slotName = server.arg(1); SlotMetaArray slotsObject; fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - if (slotsBinaryFile) { + if (slotsBinaryFile) + { // read data into slotsObject slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); - } else { + } + else + { // file doesn't exist, let's create one fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); String slot_name = String(emptySlotName); - for (int i = 0; i < SLOTS_TOTAL; i++) { + for (int i = 0; i < SLOTS_TOTAL; i++) + { slotsObject.slot[i].slot = i; // slotsObject.slot[i].presetNameID = 0; slotsObject.slot[i].scanlines = 0; @@ -243,7 +279,8 @@ void serverSlotSave() // slotIndexMap value String slotIndexString = server.arg(0); uint8_t slotIndex = lowByte(slotIndexString.toInt()); - if (slotIndex >= SLOTS_TOTAL) { + if (slotIndex >= SLOTS_TOTAL) + { goto server_slot_save_end; } @@ -279,7 +316,8 @@ void serverSlotRemove() { bool result = false; int16_t slotIndex = server.arg(0).toInt(); - if (server.args() > 0) { + if (server.args() > 0) + { // if (param == '0') { // _DBGN(F("Wait...")); // result = true; @@ -289,17 +327,18 @@ void serverSlotRemove() // uint8_t nextSlot; char buffer[4] = ""; auto currentSlot = String(slotIndexMap).indexOf(slotIndex); - if(slotIndex > SLOTS_TOTAL || slotIndex < 0) { + if (slotIndex > SLOTS_TOTAL || slotIndex < 0) + { _DBGN(F("wrong slot index, abort")); goto server_slot_remove_end; } - sprintf(buffer, ".%02x", currentSlot); + sprintf(buffer, PSTR(".%02x"), currentSlot); SlotMetaArray slotsObject; fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - if(!slotsBinaryFile) + if (!slotsBinaryFile) goto server_slot_remove_end; slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); @@ -309,21 +348,25 @@ void serverSlotRemove() // remove every preset file of this slot fs::Dir root = LittleFS.openDir("/"); - while (root.next()) { + while (root.next()) + { String fn = root.fileName(); - if(fn.lastIndexOf(buffer) == (int)(fn.length() - 4)) { + if (fn.lastIndexOf(buffer) == (int)(fn.length() - 4)) + { LittleFS.remove(fn); // let's give some time to the flash delay(10); } } // lets reset the slot data in binary file - for (int i = 0; i < SLOTS_TOTAL; i++) { - if(i == slotIndex) { + for (int i = 0; i < SLOTS_TOTAL; i++) + { + if (i == slotIndex) + { String slot_name = String(emptySlotName); slotsObject.slot[i].slot = i; // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].resolutionID = OutputBypass; + slotsObject.slot[i].resolutionID = OutputNone; slotsObject.slot[i].scanlines = 0; slotsObject.slot[i].scanlinesStrength = 0; slotsObject.slot[i].wantVdsLineFilter = false; @@ -402,28 +445,39 @@ void serverFsUploadHandler() HTTPUpload &upload = server.upload(); static fs::File _tempFile; static bool err = false; - if (upload.status == UPLOAD_FILE_START) { + if (upload.status == UPLOAD_FILE_START) + { webSocket.close(); dnsServer.stop(); - const String fname = "/" + upload.filename; - _tempFile = LittleFS.open(fname, "w"); - _DBGF(PSTR("uploading file: %s "), upload.filename.c_str()); + _tempFile = LittleFS.open(FPSTR(backupFile), "w"); + _DBG(F("upload BACKUP file")); err = false; - } else if (upload.status == UPLOAD_FILE_WRITE && upload.contentLength != 0 && !err) { - if (_tempFile.write(upload.buf, upload.contentLength) != upload.contentLength) { + } + else if (upload.status == UPLOAD_FILE_WRITE && upload.contentLength != 0 && !err) + { + if (_tempFile.write(upload.buf, upload.contentLength) != upload.contentLength) + { err = true; _DBGN(F(" write failed, abort")); goto upload_file_close; - } else { + } + else + { _DBG(F(".")); } - } else if (upload.status == UPLOAD_FILE_END && !err) { + } + else if (upload.status == UPLOAD_FILE_END && !err) + { _DBGN(F(" complete")); err = false; + // extract from backup at the next loop() + userCommand = 'u'; goto upload_file_close; - } else if (upload.status == UPLOAD_FILE_ABORTED) { + } + else if (upload.status == UPLOAD_FILE_ABORTED) + { err = false; - LittleFS.remove(String("/" + upload.filename)); + LittleFS.remove(FPSTR(backupFile)); _DBGN(F(" aborted")); goto upload_file_close; } @@ -433,59 +487,128 @@ void serverFsUploadHandler() } /** - * @brief + * @brief Backup all data * */ -void serverFsDownloadHandler() +void serverBackupDownload() { - ASSERT_LOMEM_GOTO(fs_dl_handle_fail); - if (server.args() > 0) { - String _fn = server.arg(0); - if (_fn.length() != 0 && _fn.indexOf(PSTR(".html")) == -1) { - fs::File _f = LittleFS.open(_fn, "r"); - if (_f) { - server.streamFile(_f, mimeOctetStream); + StreamString data; + // size_t contentLength = 0; + fs::Dir dir = LittleFS.openDir("/"); + String ts = server.arg(String(F("ts"))); + webSocket.close(); + // ASSERT_LOMEM_GOTO(fs_dl_handle_fail); + while (dir.next()) + { + if (dir.isFile() && dir.fileName().indexOf(PSTR(".html")) == -1) + // && (dir.fileName().compareTo(String(preferencesFile)) == 0 + // || dir.fileName().compareTo(String(slotsFile)) == 0 + // || dir.fileName().indexOf(buffer) != -1)) + { + fs::File _f = LittleFS.open(dir.fileName(), "r"); + if (_f) + { + // write header + data.print(dir.fileName()); + data.println(); + data.print(dir.fileSize()); + data.println(); + // write file contents + while(_f.available()) { + data.write(_f.read()); + } _f.close(); - goto fs_dl_handle_pass; } } } -fs_dl_handle_fail: - server.send(200, mimeAppJson, "false"); -fs_dl_handle_pass: - return; + server.sendHeader(PSTR("Content-Disposition"), String(PSTR("attachment; filename=\"gbs-backup-")) + ts + String(PSTR(".bin\""))); + server.sendHeader(PSTR("Cache-Control"), PSTR("private, max-age=0")); + server.sendHeader(PSTR("Content-Description"), PSTR("File Transfer")); + server.sendHeader(PSTR("Content-Transfer-Encoding"), PSTR("binary")); + server.send(200, String(mimeOctetStream).c_str(), data.c_str(), data.length()); + + webSocket.begin(); } /** - * @brief + * @brief Restore data from backupFile * */ -void serverFsDir() -{ - String output = "["; - fs::Dir dir = LittleFS.openDir("/"); - ASSERT_LOMEM_GOTO(server_fs_dir_failure); - - while (dir.next()) { - if(dir.fileName().indexOf(PSTR(".html")) == -1) { - output += "\""; - output += dir.fileName(); - output += "\","; - delay(1); // wifi stack +void extractBackup() { + char buffer[32] = ""; + fs::File _b = LittleFS.open(FPSTR(backupFile), "r"); + if(!_b) { + _DBGN(F("failed to access backup file, abort...")); + return; + } + // process files + while(_b.available()) { + // name + if(_b.readBytesUntil('\n', buffer, 32) != 0) { + char fname[32] = ""; + strncpy(fname, buffer, 32); + // fix last captured character + fname[strlen(fname)-1] = '\0'; + // size + memset(buffer, '\0', 32); + if(_b.readBytesUntil('\n', buffer, 32) != 0) { + size_t fsize = (size_t)String(buffer).toInt(); + if(fsize != 0) { + size_t cursor = 0; + fs::File _f = LittleFS.open(fname, "w"); + // transfer data + if(_f) { + while(_b.available() && cursor != fsize) { + _f.write(_b.read()); + cursor ++; + } + _f.close(); + _DBGF(PSTR("%s extraction complete, size: %ld\n"), fname, fsize); + } + } + } } } - - output += "]"; - - output.replace(",]", "]"); - - server.send(200, mimeAppJson, output); - return; - -server_fs_dir_failure: - server.send_P(200, mimeAppJson, PSTR("false")); + _b.close(); + // cleanup + LittleFS.remove(FPSTR(backupFile)); + _DBGN(F("restore success, restarting...")); + // reset device to apply new configuration + ESP.reset(); } +/** + * @brief + * + */ +// void serverFsDir() +// { +// String output = "["; +// fs::Dir dir = LittleFS.openDir("/"); +// ASSERT_LOMEM_GOTO(server_fs_dir_failure); + +// while (dir.next()) +// { +// if (dir.fileName().indexOf(PSTR(".html")) == -1) +// { +// output += "\""; +// output += dir.fileName(); +// output += "\","; +// delay(1); // wifi stack +// } +// } + +// output += "]"; + +// output.replace(",]", "]"); + +// server.send(200, mimeAppJson, output); +// return; + +// server_fs_dir_failure: +// server.send_P(200, mimeAppJson, PSTR("false")); +// } + /** * @brief Do not use format method. * We need a soft method to be able to remove all files @@ -505,10 +628,9 @@ void serverWiFiStatus() { WiFiMode_t wifiMode = WiFi.getMode(); server.send(200, mimeAppJson, - (wifiMode == WIFI_AP) - ? F("{\"mode\":\"ap\"}") - : String(F("{\"mode\":\"sta\",\"ssid\":\"") + WiFi.SSID() + F("\"}")) - ); + (wifiMode == WIFI_AP) + ? F("{\"mode\":\"ap\"}") + : String(F("{\"mode\":\"sta\",\"ssid\":\"") + WiFi.SSID() + F("\"}"))); } /** @@ -520,20 +642,25 @@ void serverRestoreFilters() SlotMetaArray slotsObject; fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); bool result = false; - if (slotsBinaryFile) { + if (slotsBinaryFile) + { slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); auto currentSlot = String(slotIndexMap).indexOf(uopt->presetSlot); - if (currentSlot == -1) { + if (currentSlot == -1) + { goto server_restore_filters_end; } uopt->wantScanlines = slotsObject.slot[currentSlot].scanlines; _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[currentSlot].name, uopt->presetSlot); - if (uopt->wantScanlines) { + if (uopt->wantScanlines) + { _WSN(F("on (Line Filter recommended)")); - } else { + } + else + { disableScanlines(); _WSN(F("off")); } @@ -559,11 +686,13 @@ void serverWiFiList() String s; uint8_t i = 0; int8_t n = WiFi.scanNetworks(); - while (n == -1) { + while (n == -1) + { n = WiFi.scanComplete(); WDT_FEED(); } - if(n > 0) { + if (n > 0) + { // TODO: fuzzy logic // build array of indices int ix[n]; @@ -571,33 +700,37 @@ void serverWiFiList() ix[i] = i; // sort by signal strength - for (i = 0; i < n; i++) { - for (int j = 1; j < n - i; j++) { - if (WiFi.RSSI(ix[j]) > WiFi.RSSI(ix[j - 1])) { + for (i = 0; i < n; i++) + { + for (int j = 1; j < n - i; j++) + { + if (WiFi.RSSI(ix[j]) > WiFi.RSSI(ix[j - 1])) + { std::swap(ix[j], ix[j - 1]); } } } // remove duplicates - for (i = 0; i < n; i++) { - for (int j = i + 1; j < n; j++) { - if (WiFi.SSID(ix[i]).equals(WiFi.SSID(ix[j])) - && WiFi.encryptionType(ix[i]) == WiFi.encryptionType(ix[j])) + for (i = 0; i < n; i++) + { + for (int j = i + 1; j < n; j++) + { + if (WiFi.SSID(ix[i]).equals(WiFi.SSID(ix[j])) && WiFi.encryptionType(ix[i]) == WiFi.encryptionType(ix[j])) ix[j] = -1; } } // TODO: END i = 0; server.chunkedResponseModeStart(200, mimeTextHtml); - while (i < n && ix[i] != -1) { // check s.length to limit memory usage - s = String(i ? "\n" : "") + ((constrain(WiFi.RSSI(ix[i]), -100, -50) + 100) * 2) - + "," + ((WiFi.encryptionType(ix[i]) == ENC_TYPE_NONE) ? 0 : 1) + "," - + WiFi.SSID(ix[i]); + while (i < n && ix[i] != -1) + { // check s.length to limit memory usage + s = String(i ? "\n" : "") + ((constrain(WiFi.RSSI(ix[i]), -100, -50) + 100) * 2) + "," + ((WiFi.encryptionType(ix[i]) == ENC_TYPE_NONE) ? 0 : 1) + "," + WiFi.SSID(ix[i]); server.sendContent(s.c_str()); i++; } server.chunkedResponseFinalize(); - } else + } + else server.send(200, mimeTextHtml, F("{}")); } @@ -608,7 +741,7 @@ void serverWiFiList() void serverWiFiWPS() { // if (WiFi.status() != WL_CONNECTED) { - if(wifiStartWPS()) + if (wifiStartWPS()) server.send(200, mimeTextHtml, F("WPS successful")); else server.send(200, mimeTextHtml, F("WPS failed")); @@ -635,14 +768,15 @@ void serverWiFiConnect() String ssid = server.arg(String(F("n"))); String pwd = server.arg(String(F("p"))); - if(wifiStartStaMode(ssid, pwd)) + if (ssid.length() > 0) { + wifiStartStaMode(ssid, pwd); server.send(200, mimeAppJson, F("{}")); - else + } else server.send(406, mimeAppJson, F("{}")); - delay(100); - ESP.reset(); - // userCommand = 'u'; // next loop, set wifi station mode and restart device + // delay(100); + // ESP.reset(); + userCommand = 'a'; // restart device at the next loop() } /** @@ -687,10 +821,12 @@ void printInfo() char HSp = GBS::STATUS_SYNC_PROC_HSPOL::read() ? '+' : '-'; // 0 = neg, 1 = pos char VSp = GBS::STATUS_SYNC_PROC_VSPOL::read() ? '+' : '-'; // 0 = neg, 1 = pos char h = 'H', v = 'V'; - if (!GBS::STATUS_SYNC_PROC_HSACT::read()) { + if (!GBS::STATUS_SYNC_PROC_HSACT::read()) + { h = HSp = ' '; } - if (!GBS::STATUS_SYNC_PROC_VSACT::read()) { + if (!GBS::STATUS_SYNC_PROC_VSACT::read()) + { v = VSp = ' '; } @@ -708,10 +844,12 @@ void printInfo() // _WS(F("charsToPrint: ")); _WSN(charsToPrint); _WS(print); - if (stat0FIrq != 0x00) { + if (stat0FIrq != 0x00) + { // clear 0_0F interrupt bits regardless of syncwatcher status clearIrqCounter++; - if (clearIrqCounter >= 50) { + if (clearIrqCounter >= 50) + { clearIrqCounter = 0; GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status GBS::INTERRUPT_CONTROL_00::write(0x00); @@ -719,13 +857,20 @@ void printInfo() } yield(); - if (GBS::STATUS_SYNC_PROC_HSACT::read()) { // else source might not be active - for (uint8_t i = 0; i < 9; i++) { - if (GBS::STATUS_MISC_PLLAD_LOCK::read() == 1) { + if (GBS::STATUS_SYNC_PROC_HSACT::read()) + { // else source might not be active + for (uint8_t i = 0; i < 9; i++) + { + if (GBS::STATUS_MISC_PLLAD_LOCK::read() == 1) + { lockCounter++; - } else { - for (int i = 0; i < 10; i++) { - if (GBS::STATUS_MISC_PLLAD_LOCK::read() == 1) { + } + else + { + for (int i = 0; i < 10; i++) + { + if (GBS::STATUS_MISC_PLLAD_LOCK::read() == 1) + { lockCounter++; break; } @@ -743,7 +888,8 @@ void printInfo() void printVideoTimings() { // if (rto->presetID < 0x20) { - if (rto->resolutionID != PresetHdBypass && rto->resolutionID != PresetBypassRGBHV) { + if (rto->resolutionID != PresetHdBypass && rto->resolutionID != PresetBypassRGBHV) + { // horizontal _WSF( PSTR("\nHT / scale : %d %d\nHS ST/SP : %d %d\nHB ST/SP(d) : %d %d\nHB ST/SP : %d %d\n------\n"), @@ -754,8 +900,7 @@ void printVideoTimings() GBS::VDS_DIS_HB_ST::read(), GBS::VDS_DIS_HB_SP::read(), GBS::VDS_HB_ST::read(), - GBS::VDS_HB_SP::read() - ); + GBS::VDS_HB_SP::read()); // vertical _WSF( PSTR("VT / scale : %d %d\nVS ST/SP : %d %d\nVB ST/SP(d) : %d %d\nVB ST/SP : %d %d\n"), @@ -766,15 +911,15 @@ void printVideoTimings() GBS::VDS_DIS_VB_ST::read(), GBS::VDS_DIS_VB_SP::read(), GBS::VDS_VB_ST::read(), - GBS::VDS_VB_SP::read() - ); + GBS::VDS_VB_SP::read()); // IF V offset _WSF( PSTR("IF VB ST/SP : %d %d\n"), GBS::IF_VB_ST::read(), - GBS::IF_VB_SP::read() - ); - } else { + GBS::IF_VB_SP::read()); + } + else + { _WSF( PSTR("\nHD_HSYNC_RST : %d\nHD_INI_ST : %d\nHS ST/SP : %d %d\nHB ST/SP : %d %d\n------\n"), GBS::HD_HSYNC_RST::read(), @@ -782,24 +927,21 @@ void printVideoTimings() GBS::SP_CS_HS_ST::read(), GBS::SP_CS_HS_SP::read(), GBS::HD_HB_ST::read(), - GBS::HD_HB_SP::read() - ); + GBS::HD_HB_SP::read()); // vertical _WSF( PSTR("VS ST/SP : %d %d\nVB ST/SP : %d %d\n"), GBS::HD_VS_ST::read(), GBS::HD_VS_SP::read(), GBS::HD_VB_ST::read(), - GBS::HD_VB_SP::read() - ); + GBS::HD_VB_SP::read()); } _WSF( PSTR("CsVT : %d\nCsVS_ST/SP : %d %d\n"), GBS::STATUS_SYNC_PROC_VTOTAL::read(), getCsVsStart(), - getCsVsStop() - ); + getCsVsStop()); } /** @@ -812,13 +954,17 @@ void fastGetBestHtotal() signed long inPeriod = 1; double inHz = 1.0; GBS::TEST_BUS_SEL::write(0xa); - if (FrameSync::vsyncInputSample(&inStart, &inStop)) { + if (FrameSync::vsyncInputSample(&inStart, &inStop)) + { inPeriod = (inStop - inStart) >> 1; - if (inPeriod > 1) { + if (inPeriod > 1) + { inHz = (double)1000000 / (double)inPeriod; } _WSF(PSTR("inPeriod: %ld in Hz: %d\n"), inPeriod, inHz); - } else { + } + else + { _WSN(F("error")); } @@ -832,228 +978,1336 @@ void fastGetBestHtotal() // display clock probably not exact 108mhz bestHtotal, bestHtotal50, - bestHtotal60 - ); + bestHtotal60); // if (bestHtotal > 800 && bestHtotal < 3200) { - // applyBestHTotal((uint16_t)bestHtotal); - // FrameSync::resetWithoutRecalculation(); // was single use of this function, function has changed since + // applyBestHTotal((uint16_t)bestHtotal); + // FrameSync::resetWithoutRecalculation(); // was single use of this function, function has changed since // } } #if defined(ESP8266) /** - * @brief Type2 == userCommand + * @brief extrated from main.cpp->loop() * - * @param argument */ -void handleType2Command(char argument) +void handleSerialCommand() { - _WSF( - commandDescr, - "user", - argument, - argument, - // uopt->presetPreference, - uopt->presetSlot, - uopt->presetSlot, - // rto->presetID - rto->resolutionID, - rto->resolutionID - ); - switch (argument) { - case '0': - _WS(F("pal force 60hz ")); - if (uopt->PalForce60 == 0) { - uopt->PalForce60 = 1; - _WSN(F("on")); - } else { - uopt->PalForce60 = 0; - _WSN(F("off")); + static uint8_t readout = 0; + static uint8_t segmentCurrent = 255; + static uint8_t registerCurrent = 255; + static uint8_t inputToogleBit = 0; + static uint8_t inputStage = 0; + + if (Serial.available()) + { + serialCommand = Serial.read(); + } + else if (inputStage > 0) + { + // multistage with no more data + _WSN(F(" abort")); + discardSerialRxData(); + serialCommand = ' '; + } + + if (serialCommand != '@') + { + _WSF(commandDescr, + "serial", + serialCommand, + serialCommand, + // uopt->presetPreference, + uopt->presetSlot, + uopt->presetSlot, + // rto->presetID + rto->resolutionID, + rto->resolutionID); + // multistage with bad characters? + if (inputStage > 0) + { + // need 's', 't' or 'g' + if (serialCommand != 's' && serialCommand != 't' && serialCommand != 'g') + { + discardSerialRxData(); + _WSN(F(" abort")); + serialCommand = ' '; } - saveUserPrefs(); - break; - case '1': - // reset to defaults button - webSocket.close(); - loadDefaultUserOptions(); - saveUserPrefs(); - _WSN(F("options set to defaults, restarting")); - delay(100); - ESP.reset(); // don't use restart(), messes up websocket reconnects - // - break; - case '2': - // + } + + switch (serialCommand) + { + case ' ': + // skip spaces + inputStage = segmentCurrent = registerCurrent = 0; // and reset these break; - case '3': // before: load custom preset - now: slot change + case 'd': { - // uopt->presetPreference = OutputCustomized; // custom - // TODO: unknown logic - if (rto->videoStandardInput == 14) { - // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; - } else { - // also does loadPresetFromLFS() - applyPresets(rto->videoStandardInput); - } - // save new slotID into preferences - saveUserPrefs(); - } break; - // @sk: never used - // case '4': // save custom preset - // savePresetToFS(); - // // uopt->presetPreference = OutputCustomized; // custom - // rto->resolutionID = OutputCustom; // custom - // saveUserPrefs(); - // break; - case '5': - // Frame Time Lock toggle - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; - saveUserPrefs(); - if (uopt->enableFrameTimeLock) { - _WSN(F("FTL on")); - } else { - _WSN(F("FTL off")); + // don't store scanlines + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + { + disableScanlines(); } - if (!rto->extClockGenDetected) { + // pal forced 60hz: no need to revert here. let the voffset function handle it + + if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) + { FrameSync::reset(uopt->frameTimeLockMethod); } - if (uopt->enableFrameTimeLock) { - activeFrameTimeLockInitialSteps(); + // dump + for (int segment = 0; segment <= 5; segment++) + { + dumpRegisters(segment); } + _WSN(F("};")); + } + break; + case '+': + _WSN(F("hor. +")); + shiftHorizontalRight(); + // shiftHorizontalRightIF(4); break; - case '6': - // + case '-': + _WSN(F("hor. -")); + shiftHorizontalLeft(); + // shiftHorizontalLeftIF(4); break; - case '7': - uopt->wantScanlines = !uopt->wantScanlines; - _WS(F("scanlines: ")); - if (uopt->wantScanlines) { - _WSN(F("on (Line Filter recommended)")); - } else { - disableScanlines(); + case '*': + shiftVerticalUpIF(); + break; + case '/': + shiftVerticalDownIF(); + break; + case 'z': + _WSN(F("scale+")); + scaleHorizontal(2, true); + break; + case 'h': + _WSN(F("scale-")); + scaleHorizontal(2, false); + break; + case 'q': + resetDigital(); + delay(2); + ResetSDRAM(); + delay(2); + togglePhaseAdjustUnits(); + // enableVDS(); + break; + case 'D': + _WS(F("debug view: ")); + if (GBS::ADC_UNUSED_62::read() == 0x00) + { // "remembers" debug view + // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store + GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 + GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup + GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); + GBS::ADC_UNUSED_62::write(1); // remember to remove on restore + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); + GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); + if (!rto->inputIsYPbPr) + { + // RGB input that has HD_DYN bypassed, use it now + GBS::HD_DYN_BYPS::write(0); + GBS::HD_U_OFFSET::write(GBS::HD_U_OFFSET::read() + 0x24); + GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); + } + // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly + _WSN(F("on")); + } + else + { + // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 + // if (rto->presetID == 0x05) { + if (rto->resolutionID == Output1080p) + { + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 + } + else + { + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 + } + GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore + GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); + if (!rto->inputIsYPbPr) + { + // RGB input, HD_DYN_BYPS again + GBS::HD_DYN_BYPS::write(1); + GBS::HD_U_OFFSET::write(0); // probably just 0 by default + GBS::HD_V_OFFSET::write(0); // probably just 0 by default + } + // GBS::IF_IN_DREG_BYPS::write(0); + GBS::ADC_UNUSED_60::write(0); // .. and clear + GBS::ADC_UNUSED_61::write(0); + GBS::ADC_UNUSED_62::write(0); _WSN(F("off")); } - saveUserPrefs(); + serialCommand = '@'; break; - case '9': - // + case 'C': + _WSN(F("PLL: ICLK")); + // display clock in last test best at 0x85 + GBS::PLL648_CONTROL_01::write(0x85); + GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) + latchPLLAD(); + // GBS::VDS_HSCALE::write(512); + rto->syncLockFailIgnore = 16; + FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock + rto->forceRetime = true; + // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock + // applyBestHTotal(FrameSync::init()); // twice + // GBS::VDS_FLOCK_EN::write(1); //risky + delay(200); break; - case 'a': - webSocket.close(); - _WSN(F("restart")); - delay(100); - ESP.reset(); // don't use restart(), messes up websocket reconnects + case 'Y': + writeProgramArrayNew(ntsc_1280x720, false); + doPostPresetLoadSteps(); break; - case 'e': // print files on data - { - fs::Dir dir = LittleFS.openDir("/"); - while (dir.next()) { - _WSF( - PSTR("%s %ld\n"), - dir.fileName().c_str(), - dir.fileSize() - ); - // delay(1); // wifi stack + case 'y': + writeProgramArrayNew(pal_1280x720, false); + doPostPresetLoadSteps(); + break; + case 'P': + _WS(F("auto deinterlace: ")); + rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; + if (rto->deinterlaceAutoEnabled) + { + _WSN(F("on")); } - // - fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); - if (!f) { - _WSN(F("\nfailed opening preferences file")); - } else { - _WSF( - PSTR("\npresetNameID = %c\npreset slot = %c\nframe time lock = %c\n"\ - "frame lock method = %c\nauto gain = %c\n"\ - "scanlines = %c\ncomponent output = %c\ndeinterlacer mode = %c\n"\ - "line filter = %c\npeaking = %c\npreferScalingRgbhv = %c\n"\ - "6-tap = %c\npal force60 = %c\nmatched = %c\n"\ - "step response = %c\ndisable external clock generator = %c\n"), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read(), - f.read() - ); - - f.close(); + else + { + _WSN(F("off")); } - } break; - /** - * 1. change resolution - * 2. update registers if videoStandardInput != 14 - * 3. update/save preset data - */ - case 'f': - case 'g': - case 'h': + break; case 'p': - case 's': - case 'L': { - // load preset via webui - uint8_t videoMode = getVideoMode(); - if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; // last known good as fallback - // else videoMode stays 0 and we'll apply via some assumptions - // TODO missing resolutions below ? - if (argument == 'f') - // uopt->presetPreference = Output960P; // 1280x960 - rto->resolutionID = Output960p; // 1280x960 - if (argument == 'g') - // uopt->presetPreference = Output720P; // 1280x720 - rto->resolutionID = Output720p; // 1280x720 - if (argument == 'h') - // uopt->presetPreference = Output480P; // 720x480/768x576 - rto->resolutionID = Output480p; // 720x480/768x576 - if (argument == 'p') - // uopt->presetPreference = Output1024P; // 1280x1024 - rto->resolutionID = Output1024p; // 1280x1024 - if (argument == 's') - // uopt->presetPreference = Output1080P; // 1920x1080 - rto->resolutionID = Output1080p; // 1920x1080 - if (argument == 'L') - // uopt->presetPreference = OutputDownscale; // downscale - rto->resolutionID = Output15kHz; // downscale - - rto->useHdmiSyncFix = 1; // disables sync out when programming preset - if (rto->videoStandardInput == 14) { - // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; - } else { - // normal path - applyPresets(videoMode); + if (!rto->motionAdaptiveDeinterlaceActive) + { + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + { // don't rely on rto->scanlinesEnabled + disableScanlines(); + } + enableMotionAdaptDeinterlace(); + } + else + { + disableMotionAdaptDeinterlace(); } + break; + case 'k': + bypassModeSwitch_RGBHV(); + break; + case 'K': // set outputBypass + setOutModeHdBypass(false); + // uopt->presetPreference = OutputBypass; + rto->resolutionID = OutputBypass; + _WSN(F("OutputBypass mode is now active")); saveUserPrefs(); - } break; - case 'i': - // toggle active frametime lock method - if (!rto->extClockGenDetected) { - FrameSync::reset(uopt->frameTimeLockMethod); + break; + case 'T': + _WS(F("auto gain ")); + if (uopt->enableAutoGain == 0) + { + uopt->enableAutoGain = 1; + setAdcGain(AUTO_GAIN_INIT); + GBS::DEC_TEST_ENABLE::write(1); + _WSN(F("on")); } - if (uopt->frameTimeLockMethod == 0) { - uopt->frameTimeLockMethod = 1; - } else if (uopt->frameTimeLockMethod == 1) { - uopt->frameTimeLockMethod = 0; + else + { + uopt->enableAutoGain = 0; + GBS::DEC_TEST_ENABLE::write(0); + _WSN(F("off")); } saveUserPrefs(); - activeFrameTimeLockInitialSteps(); break; - case 'l': - // cycle through available SDRAM clocks - { - uint8_t PLL_MS = GBS::PLL_MS::read(); - uint8_t memClock = 0; + case 'e': + writeProgramArrayNew(ntsc_240p, false); + doPostPresetLoadSteps(); + break; + case 'r': + writeProgramArrayNew(pal_240p, false); + doPostPresetLoadSteps(); + break; + case '.': + { + if (!rto->outModeHdBypass) + { + // bestHtotal recalc + rto->autoBestHtotalEnabled = true; + rto->syncLockFailIgnore = 16; + rto->forceRetime = true; + FrameSync::reset(uopt->frameTimeLockMethod); + + if (!rto->syncWatcherEnabled) + { + bool autoBestHtotalSuccess = 0; + delay(30); + autoBestHtotalSuccess = runAutoBestHTotal(); + if (!autoBestHtotalSuccess) + { + _WSN(F("(unchanged)")); + } + } + } + } + break; + case '!': + // fastGetBestHtotal(); + // readEeprom(); + _WSF(PSTR("sfr: %.02f\n pll: %l\n"), getSourceFieldRate(1), getPllRate()); + break; + case '$': + { + // EEPROM write protect pin (7, next to Vcc) is under original MCU control + // MCU drags to Vcc to write, EEPROM drags to Gnd normally + // This routine only works with that "WP" pin disconnected + // 0x17 = input selector? // 0x18 = input selector related? + // 0x54 = coast start 0x55 = coast end + uint16_t writeAddr = 0x54; + const uint8_t eepromAddr = 0x50; + for (; writeAddr < 0x56; writeAddr++) + { + Wire.beginTransmission(eepromAddr); + Wire.write(writeAddr >> 8); // high addr byte, 4 bits + + Wire.write((uint8_t)writeAddr); // mlow addr byte, 8 bits = 12 bits (0xfff max) + Wire.write(0x10); // coast end value ? + Wire.endTransmission(); + delay(5); + } + + // Wire.beginTransmission(eepromAddr); + // Wire.write((uint8_t)0); Wire.write((uint8_t)0); + // Wire.write(0xff); // force eeprom clear probably + // Wire.endTransmission(); + // delay(5); + + _WSN(F("done")); + } + break; + case 'j': + // resetPLL(); + latchPLLAD(); + break; + case 'J': + resetPLLAD(); + break; + case 'v': + rto->phaseSP += 1; + rto->phaseSP &= 0x1f; + _WSF(PSTR("SP: %d\n"), rto->phaseSP); + setAndLatchPhaseSP(); + // setAndLatchPhaseADC(); + break; + case 'b': + advancePhase(); + latchPLLAD(); + _WSF(PSTR("ADC: %d\n"), rto->phaseADC); + break; + case '#': + rto->videoStandardInput = 13; + applyPresets(13); + // _WSN(getStatus00IfHsVsStable()); + // globalDelay++; + // _WSN(globalDelay); + break; + case 'n': + { + uint16_t pll_divider = GBS::PLLAD_MD::read(); + pll_divider += 1; + GBS::PLLAD_MD::write(pll_divider); + GBS::IF_HSYNC_RST::write((pll_divider / 2)); + GBS::IF_LINE_SP::write(((pll_divider / 2) + 1) + 0x40); + _WSF(PSTR("PLL div: 0x%04X %d\n"), pll_divider, pll_divider); + // set IF before latching + // setIfHblankParameters(); + latchPLLAD(); + delay(1); + // applyBestHTotal(GBS::VDS_HSYNC_RST::read()); + updateClampPosition(); + updateCoastPosition(0); + } + break; + case 'N': + { + // if (GBS::RFF_ENABLE::read()) { + // disableMotionAdaptDeinterlace(); + // } + // else { + // enableMotionAdaptDeinterlace(); + // } + + // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); + + if (rto->scanlinesEnabled) + { + rto->scanlinesEnabled = false; + disableScanlines(); + } + else + { + rto->scanlinesEnabled = true; + enableScanlines(); + } + } + break; + case 'a': + _WSF(PSTR("HTotal++: %d\n"), GBS::VDS_HSYNC_RST::read() + 1); + if (GBS::VDS_HSYNC_RST::read() < 4095) + { + if (uopt->enableFrameTimeLock) + { + // syncLastCorrection != 0 check is included + FrameSync::reset(uopt->frameTimeLockMethod); + } + rto->forceRetime = 1; + applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); + } + break; + case 'A': + _WSF(PSTR("HTotal--: %d\n"), GBS::VDS_HSYNC_RST::read() - 1); + if (GBS::VDS_HSYNC_RST::read() > 0) + { + if (uopt->enableFrameTimeLock) + { + // syncLastCorrection != 0 check is included + FrameSync::reset(uopt->frameTimeLockMethod); + } + rto->forceRetime = 1; + applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); + } + break; + case 'M': + { + } + break; + case 'm': + _WS(F("syncwatcher ")); + if (rto->syncWatcherEnabled == true) + { + rto->syncWatcherEnabled = false; + if (rto->videoIsFrozen) + { + unfreezeVideo(); + } + _WSN(F("off")); + } + else + { + rto->syncWatcherEnabled = true; + _WSN(F("on")); + } + break; + case ',': + printVideoTimings(); + break; + case 'i': + rto->printInfos = !rto->printInfos; + break; + case 'c': + initUpdateOTA(); + rto->allowUpdatesOTA = true; + _WSN(F("OTA Updates on")); + break; + case 'G': + _WS(F("Debug Pings ")); + if (!rto->enableDebugPings) + { + _WSN(F("on")); + rto->enableDebugPings = 1; + } + else + { + _WSN(F("off")); + rto->enableDebugPings = 0; + } + break; + case 'u': + ResetSDRAM(); + break; + case 'f': + _WS(F("peaking ")); + if (uopt->wantPeaking == 0) + { + uopt->wantPeaking = 1; + GBS::VDS_PK_Y_H_BYPS::write(0); + _WSN(F("on")); + } + else + { + uopt->wantPeaking = 0; + GBS::VDS_PK_Y_H_BYPS::write(1); + _WSN(F("off")); + } + saveUserPrefs(); + break; + case 'F': // switch ADC filter button (dev.mode) + _WS(F("ADC filter ")); + if (GBS::ADC_FLTR::read() > 0) + { + GBS::ADC_FLTR::write(0); + _WSN(F("off")); + } + else + { + GBS::ADC_FLTR::write(3); + _WSN(F("on")); + } + break; + case 'L': + { + // Component / VGA Output + uopt->wantOutputComponent = !uopt->wantOutputComponent; + OutputComponentOrVGA(); + saveUserPrefs(); + // apply 1280x720 preset now, otherwise a reboot would be required + uint8_t videoMode = getVideoMode(); + if (videoMode == 0) + videoMode = rto->videoStandardInput; + // OutputResolution backup = rto->presetID; + OutputResolution backup = rto->resolutionID; + // uopt->presetPreference = Output720P; + // rto->presetID = Output720p; + rto->resolutionID = Output720p; + rto->videoStandardInput = 0; // force hard reset + applyPresets(videoMode); + // rto->presetID = backup; + rto->resolutionID = backup; + // uopt->presetPreference = backup; + } + break; + case 'l': + _WSN(F("resetSyncProcessor")); + // freezeVideo(); + resetSyncProcessor(); + // delay(10); + // unfreezeVideo(); + break; + case 'Z': + { + uopt->matchPresetSource = !uopt->matchPresetSource; + saveUserPrefs(); + uint8_t vidMode = getVideoMode(); + // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { + if (rto->resolutionID == OutputNone && GBS::GBS_PRESET_ID::read() == Output960p50) + { + applyPresets(vidMode); + // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { + } + else if (rto->resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) + { + applyPresets(vidMode); + } + } + break; + case 'W': + uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + break; + case 'E': + writeProgramArrayNew(ntsc_1280x1024, false); + _WSN(F("ntsc_1280x1024 is now active")); + doPostPresetLoadSteps(); + break; + case 'R': + writeProgramArrayNew(pal_1280x1024, false); + _WSN(F("pal_1280x1024 is now active")); + doPostPresetLoadSteps(); + break; + case '0': + moveHS(4, true); + break; + case '1': + moveHS(4, false); + break; + case '2': + writeProgramArrayNew(pal_768x576, false); // ModeLine "720x576@50" 27 720 732 795 864 576 581 586 625 -hsync -vsync + _WSN(F("pal_768x576 is now active")); + doPostPresetLoadSteps(); + break; + case '3': + // + break; + case '4': + { + // scale vertical + + if (GBS::VDS_VSCALE::read() <= 256) + { + _WSN(F("limit")); + break; + } + scaleVertical(2, true); + // actually requires full vertical mask + position offset calculation + } + break; + case '5': + { + // scale vertical - + if (GBS::VDS_VSCALE::read() == 1023) + { + _WSN(F("limit")); + break; + } + scaleVertical(2, false); + // actually requires full vertical mask + position offset calculation + } + break; + case '6': + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + { + if (GBS::IF_HBIN_SP::read() >= 10) + { // IF_HBIN_SP: min 2 + GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() - 8); // canvas move right + if ((GBS::IF_HSYNC_RST::read() - 4) > ((GBS::PLLAD_MD::read() >> 1) + 5)) + { + GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() - 4); // shrink 1_0e + GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 4); // and 1_22 to go with it + } + } + else + { + _WSN(F("limit")); + } + } + else if (!rto->outModeHdBypass) + { + if (GBS::IF_HB_SP2::read() >= 4) + GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a + else + GBS::IF_HB_SP2::write(GBS::IF_HSYNC_RST::read() - 0x30); + if (GBS::IF_HB_ST2::read() >= 4) + GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() - 4); // 1_18 + else + GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); + _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), + GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + } + break; + case '7': + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + { + if (GBS::IF_HBIN_SP::read() < 0x150) + { // (arbitrary) max limit + GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() + 8); // canvas move left + } + else + { + _WSN(F("limit")); + } + } + else if (!rto->outModeHdBypass) + { + if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) + GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a + else + GBS::IF_HB_SP2::write(0); + if (GBS::IF_HB_ST2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) + GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() + 4); // 1_18 + else + GBS::IF_HB_ST2::write(0); + _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), + GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + } + break; + case '8': // invert sync button (dev. mode) + // _WSN("invert sync"); + rto->invertSync = !rto->invertSync; + invertHS(); + invertVS(); + // optimizePhaseSP(); + break; + case '9': + writeProgramArrayNew(ntsc_720x480, false); + doPostPresetLoadSteps(); + break; + case 'o': + { // oversampring button (dev.mode) + if (rto->osr == 1) + { + setOverSampleRatio(2, false); + } + else if (rto->osr == 2) + { + setOverSampleRatio(4, false); + } + else if (rto->osr == 4) + { + setOverSampleRatio(1, false); + } + delay(4); + optimizePhaseSP(); + _WSF(PSTR("OSR 0x%02X\n"), rto->osr); + rto->phaseIsSet = 0; // do it again in modes applicable + } + break; + case 'g': + inputStage++; + // we have a multibyte command + if (inputStage > 0) + { + if (inputStage == 1) + { + segmentCurrent = Serial.parseInt(); + _WSF(PSTR("G%d"), segmentCurrent); + } + else if (inputStage == 2) + { + char szNumbers[3]; + szNumbers[0] = Serial.read(); + szNumbers[1] = Serial.read(); + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + _WSF(PSTR("R 0x%04X"), registerCurrent); + if (segmentCurrent <= 5) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" value: 0x%02X\n"), readout); + } + else + { + discardSerialRxData(); + _WSN(F("abort")); + } + inputStage = 0; + } + } + break; + case 's': + inputStage++; + // we have a multibyte command + if (inputStage > 0) + { + if (inputStage == 1) + { + segmentCurrent = Serial.parseInt(); + _WSF(PSTR("S%d"), segmentCurrent); + } + else if (inputStage == 2) + { + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) + { + // ascii 0x30 to 0x39 for '0' to '9' + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) + { + szNumbers[a] = Serial.read(); + } + else + { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + _WSF(PSTR("R 0x%04X"), registerCurrent); + } + else if (inputStage == 3) + { + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) + { + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) + { + szNumbers[a] = Serial.read(); + } + else + { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + inputToogleBit = strtol(szNumbers, NULL, 16); + if (segmentCurrent <= 5) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" (was 0x%04X)"), readout); + writeOneByte(registerCurrent, inputToogleBit); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" is now: 0x%02X\n"), readout); + } + else + { + discardSerialRxData(); + _WSN(F("abort")); + } + inputStage = 0; + } + } + break; + case 't': + inputStage++; + // we have a multibyte command + if (inputStage > 0) + { + if (inputStage == 1) + { + segmentCurrent = Serial.parseInt(); + _WSF(PSTR("T%d"), segmentCurrent); + } + else if (inputStage == 2) + { + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) + { + // ascii 0x30 to 0x39 for '0' to '9' + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) + { + szNumbers[a] = Serial.read(); + } + else + { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + _WSF(PSTR("R 0x%04X"), registerCurrent); + } + else if (inputStage == 3) + { + if (Serial.peek() >= '0' && Serial.peek() <= '7') + { + inputToogleBit = Serial.parseInt(); + } + else + { + inputToogleBit = 255; // will get discarded next step + } + _WSF(PSTR(" Bit: %d"), inputToogleBit); + inputStage = 0; + if ((segmentCurrent <= 5) && (inputToogleBit <= 7)) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" (was 0x%04X)"), readout); + writeOneByte(registerCurrent, readout ^ (1 << inputToogleBit)); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" is now: 0x%02X\n"), readout); + } + else + { + discardSerialRxData(); + inputToogleBit = registerCurrent = 0; + _WSN(F("abort")); + } + } + } + break; + case '<': + { + if (segmentCurrent != 255 && registerCurrent != 255) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + writeOneByte(registerCurrent, readout - 1); // also allow wrapping + _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" : 0x%04X\n"), readout); + } + } + break; + case '>': + { + if (segmentCurrent != 255 && registerCurrent != 255) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + writeOneByte(registerCurrent, readout + 1); + _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" : 0x%04X\n"), readout); + } + } + break; + case '_': + { + uint32_t ticks = FrameSync::getPulseTicks(); + _WSN(ticks); + } + break; + case '~': + goLowPowerWithInputDetection(); // test reset + input detect + break; + case 'w': + { + // Serial.flush(); + uint16_t value = 0; + String what = Serial.readStringUntil(' '); + + if (what.length() > 5) + { + _WSN(F("abort")); + inputStage = 0; + break; + } + if (what.equals("f")) + { + if (rto->extClockGenDetected) + { + _WSF(PSTR("old freqExtClockGen: %l\n"), rto->freqExtClockGen); + rto->freqExtClockGen = Serial.parseInt(); + // safety range: 1 - 250 MHz + if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) + { + Si.setFreq(0, rto->freqExtClockGen); + rto->clampPositionIsSet = 0; + rto->coastPositionIsSet = 0; + } + _WSF(PSTR("set freqExtClockGen: %l\n"), rto->freqExtClockGen); + } + break; + } + + value = Serial.parseInt(); + if (value < 4096) + { + _WSF(PSTR("set %s %d\n"), what.c_str(), value); + if (what.equals("ht")) + { + // set_htotal(value); + if (!rto->outModeHdBypass) + { + rto->forceRetime = 1; + applyBestHTotal(value); + } + else + { + GBS::VDS_HSYNC_RST::write(value); + } + } + else if (what.equals("vt")) + { + set_vtotal(value); + } + else if (what.equals("hsst")) + { + setHSyncStartPosition(value); + } + else if (what.equals("hssp")) + { + setHSyncStopPosition(value); + } + else if (what.equals("hbst")) + { + setMemoryHblankStartPosition(value); + } + else if (what.equals("hbsp")) + { + setMemoryHblankStopPosition(value); + } + else if (what.equals("hbstd")) + { + setDisplayHblankStartPosition(value); + } + else if (what.equals("hbspd")) + { + setDisplayHblankStopPosition(value); + } + else if (what.equals("vsst")) + { + setVSyncStartPosition(value); + } + else if (what.equals("vssp")) + { + setVSyncStopPosition(value); + } + else if (what.equals("vbst")) + { + setMemoryVblankStartPosition(value); + } + else if (what.equals("vbsp")) + { + setMemoryVblankStopPosition(value); + } + else if (what.equals("vbstd")) + { + setDisplayVblankStartPosition(value); + } + else if (what.equals("vbspd")) + { + setDisplayVblankStopPosition(value); + } + else if (what.equals("sog")) + { + setAndUpdateSogLevel(value); + } + else if (what.equals("ifini")) + { + GBS::IF_INI_ST::write(value); + // _WSN(GBS::IF_INI_ST::read()); + } + else if (what.equals("ifvst")) + { + GBS::IF_VB_ST::write(value); + // _WSN(GBS::IF_VB_ST::read()); + } + else if (what.equals("ifvsp")) + { + GBS::IF_VB_SP::write(value); + // _WSN(GBS::IF_VB_ST::read()); + } + else if (what.equals("vsstc")) + { + setCsVsStart(value); + } + else if (what.equals("vsspc")) + { + setCsVsStop(value); + } + } + else + { + _WSN(F("abort")); + } + } + break; + case 'x': + { + uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); + GBS::IF_HBIN_SP::write(if_hblank_scale_stop + 1); + _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop + 1)); + } + break; + case 'X': + { + uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); + GBS::IF_HBIN_SP::write(if_hblank_scale_stop - 1); + _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop - 1)); + } + break; + case '(': + { + writeProgramArrayNew(ntsc_1920x1080, false); + doPostPresetLoadSteps(); + } + break; + case ')': + { + writeProgramArrayNew(pal_1920x1080, false); + doPostPresetLoadSteps(); + } + break; + case 'V': + { + _WS(F("step response ")); + uopt->wantStepResponse = !uopt->wantStepResponse; + if (uopt->wantStepResponse) + { + GBS::VDS_UV_STEP_BYPS::write(0); + _WSN(F("on")); + } + else + { + GBS::VDS_UV_STEP_BYPS::write(1); + _WSN(F("off")); + } + saveUserPrefs(); + } + break; + case 'S': + { + snapToIntegralFrameRate(); + break; + } + case ':': + externalClockGenSyncInOutRate(); + break; + case ';': + externalClockGenResetClock(); + if (rto->extClockGenDetected) + { + rto->extClockGenDetected = 0; + _WSN(F("ext clock gen bypass")); + } + else + { + rto->extClockGenDetected = 1; + _WSN(F("ext clock gen active")); + externalClockGenSyncInOutRate(); + } + //{ + // float bla = 0; + // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; + // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); + // _WSN(bla, 5); + //} + break; + default: + _WSF(PSTR("unknown command: 0x%04X\n"), serialCommand); + break; + } + + delay(1); // give some time to read in eventual next chars + + // a web ui or terminal command has finished. good idea to reset sync lock timer + // important if the command was to change presets, possibly others + lastVsyncLock = millis(); + + if (!Serial.available()) + { + // in case we handled a Serial or web server command and there's no more extra commands + // but keep debug view command (resets once called) + if (serialCommand != 'D') + { + serialCommand = '@'; + } + wifiLoop(1); + } + } +} + +/** + * @brief initially was Type2 command + * + */ +void handleUserCommand() +{ + if (userCommand != '@') + { + _WSF( + commandDescr, + "user", + userCommand, + userCommand, + // uopt->presetPreference, + uopt->presetSlot, + uopt->presetSlot, + // rto->presetID + rto->resolutionID, + rto->resolutionID); + switch (userCommand) + { + case '0': + _WS(F("pal force 60hz ")); + if (uopt->PalForce60 == 0) + { + uopt->PalForce60 = 1; + _WSN(F("on")); + } + else + { + uopt->PalForce60 = 0; + _WSN(F("off")); + } + saveUserPrefs(); + break; + case '1': // reset to defaults button + webSocket.close(); + loadDefaultUserOptions(); + saveUserPrefs(); + _WSN(F("options set to defaults, restarting")); + delay(100); + ESP.reset(); // don't use restart(), messes up websocket reconnects + // + break; + case '2': + // + break; + case '3': // before: load custom preset, now: slot change + { + // @sk: see serverSlotSet() + /* // uopt->presetPreference = OutputCustomized; // custom + // TODO: unknown logic + if (rto->videoStandardInput == 14) { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } else { + // also does loadPresetFromLFS() + applyPresets(rto->videoStandardInput); + } + // save new slotID into preferences + saveUserPrefs(); */ + } + break; + // case '4': // save custom preset + // savePresetToFS(); + // // uopt->presetPreference = OutputCustomized; // custom + // rto->resolutionID = OutputCustom; // custom + // saveUserPrefs(); + // break; + case '5': + // Frame Time Lock toggle + uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + saveUserPrefs(); + if (uopt->enableFrameTimeLock) + { + _WSN(F("FTL on")); + } + else + { + _WSN(F("FTL off")); + } + if (!rto->extClockGenDetected) + { + FrameSync::reset(uopt->frameTimeLockMethod); + } + if (uopt->enableFrameTimeLock) + { + activeFrameTimeLockInitialSteps(); + } + break; + case '6': + // + break; + case '7': + uopt->wantScanlines = !uopt->wantScanlines; + _WS(F("scanlines: ")); + if (uopt->wantScanlines) + { + _WSN(F("on (Line Filter recommended)")); + } + else + { + disableScanlines(); + _WSN(F("off")); + } + saveUserPrefs(); + break; + case '9': + // + break; + case 'a': + webSocket.close(); + _WSN(F("restart")); + delay(100); + ESP.reset(); // don't use restart(), messes up websocket reconnects + break; + case 'e': // print files on data + { + fs::Dir dir = LittleFS.openDir("/"); + while (dir.next()) + { + _WSF( + PSTR("%s %ld\n"), + dir.fileName().c_str(), + dir.fileSize()); + // delay(1); // wifi stack + } + // + fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); + if (!f) + { + _WSN(F("\nfailed opening preferences file")); + } + else + { + _WSF( + PSTR("\npresetNameID = %c\npreset slot = %c\nframe time lock = %c\n" + "frame lock method = %c\nauto gain = %c\n" + "scanlines = %c\ncomponent output = %c\ndeinterlacer mode = %c\n" + "line filter = %c\npeaking = %c\npreferScalingRgbhv = %c\n" + "6-tap = %c\npal force60 = %c\nmatched = %c\n" + "step response = %c\ndisable external clock generator = %c\n"), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read(), + f.read()); + + f.close(); + } + } + break; + /** + * 1. change resolution + * 2. update registers if videoStandardInput != 14 + * 3. update/save preset data + */ + case 'f': + case 'g': + case 'h': + case 'p': + case 's': + case 'L': + { + // load preset via webui + uint8_t videoMode = getVideoMode(); + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; // last known good as fallback + // else videoMode stays 0 and we'll apply via some assumptions + // TODO missing resolutions below ? + if (userCommand == 'f') + // uopt->presetPreference = Output960P; // 1280x960 + rto->resolutionID = Output960p; // 1280x960 + if (userCommand == 'g') + // uopt->presetPreference = Output720P; // 1280x720 + rto->resolutionID = Output720p; // 1280x720 + if (userCommand == 'h') + // uopt->presetPreference = Output480P; // 720x480/768x576 + rto->resolutionID = Output480p; // 720x480/768x576 + if (userCommand == 'p') + // uopt->presetPreference = Output1024P; // 1280x1024 + rto->resolutionID = Output1024p; // 1280x1024 + if (userCommand == 's') + // uopt->presetPreference = Output1080P; // 1920x1080 + rto->resolutionID = Output1080p; // 1920x1080 + if (userCommand == 'L') + // uopt->presetPreference = OutputDownscale; // downscale + rto->resolutionID = Output15kHz; // downscale + + rto->useHdmiSyncFix = 1; // disables sync out when programming preset + if (rto->videoStandardInput == 14) + { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } + else + { + // normal path + applyPresets(videoMode); + } + saveUserPrefs(); + } + break; + case 'i': + // toggle active frametime lock method + if (!rto->extClockGenDetected) + { + FrameSync::reset(uopt->frameTimeLockMethod); + } + if (uopt->frameTimeLockMethod == 0) + { + uopt->frameTimeLockMethod = 1; + } + else if (uopt->frameTimeLockMethod == 1) + { + uopt->frameTimeLockMethod = 0; + } + saveUserPrefs(); + activeFrameTimeLockInitialSteps(); + break; + case 'l': + // cycle through available SDRAM clocks + { + uint8_t PLL_MS = GBS::PLL_MS::read(); + uint8_t memClock = 0; if (PLL_MS == 0) PLL_MS = 2; @@ -1068,50 +2322,57 @@ void handleType2Command(char argument) else if (PLL_MS == 5) PLL_MS = 0; - switch (PLL_MS) { - case 0: - memClock = 108; - break; - case 1: - memClock = 81; - break; // goes well with 4_2C = 0x14, 4_2D = 0x27 - case 2: - memClock = 10; - break; // feedback clock - case 3: - memClock = 162; - break; - case 4: - memClock = 144; - break; - case 5: - memClock = 185; - break; // slight OC - case 6: - memClock = 216; - break; // !OC! - case 7: - memClock = 129; - break; - default: - break; + switch (PLL_MS) + { + case 0: + memClock = 108; + break; + case 1: + memClock = 81; + break; // goes well with 4_2C = 0x14, 4_2D = 0x27 + case 2: + memClock = 10; + break; // feedback clock + case 3: + memClock = 162; + break; + case 4: + memClock = 144; + break; + case 5: + memClock = 185; + break; // slight OC + case 6: + memClock = 216; + break; // !OC! + case 7: + memClock = 129; + break; + default: + break; } GBS::PLL_MS::write(PLL_MS); ResetSDRAM(); - if (memClock != 10) { + if (memClock != 10) + { _WSF(PSTR("SDRAM clock: %dMhz\n"), memClock); - } else { + } + else + { _WSN(F("SDRAM clock: feedback clock")); } } break; case 'm': _WS(F("Line Filter: ")); - if (uopt->wantVdsLineFilter) { + if (uopt->wantVdsLineFilter) + { uopt->wantVdsLineFilter = 0; GBS::VDS_D_RAM_BYPS::write(1); _WSN(F("off")); - } else { + } + else + { uopt->wantVdsLineFilter = 1; GBS::VDS_D_RAM_BYPS::write(0); _WSN(F("on")); @@ -1128,57 +2389,79 @@ void handleType2Command(char argument) setAdcGain(GBS::ADC_RGCTRL::read() + 1); _WSF(PSTR("ADC gain-- : 0x%04X\n"), GBS::ADC_RGCTRL::read()); break; - case 'A': { + case 'A': + { uint16_t htotal = GBS::VDS_HSYNC_RST::read(); uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); - if ((hbstd > 4) && (hbspd < (htotal - 4))) { + if ((hbstd > 4) && (hbspd < (htotal - 4))) + { GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() - 4); GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() + 4); - } else { + } + else + { _WSN(F("limit")); } - } break; - case 'B': { + } + break; + case 'B': + { uint16_t htotal = GBS::VDS_HSYNC_RST::read(); uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); - if ((hbstd < (htotal - 4)) && (hbspd > 4)) { + if ((hbstd < (htotal - 4)) && (hbspd > 4)) + { GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() + 4); GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() - 4); - } else { + } + else + { _WSN(F("limit")); } - } break; - case 'C': { + } + break; + case 'C': + { // vert mask + uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); - if ((vbstd > 6) && (vbspd < (vtotal - 4))) { + if ((vbstd > 6) && (vbspd < (vtotal - 4))) + { GBS::VDS_DIS_VB_ST::write(vbstd - 2); GBS::VDS_DIS_VB_SP::write(vbspd + 2); - } else { + } + else + { _WSN(F("limit")); } - } break; - case 'D': { + } + break; + case 'D': + { // vert mask - uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); - if ((vbstd < (vtotal - 4)) && (vbspd > 6)) { + if ((vbstd < (vtotal - 4)) && (vbspd > 6)) + { GBS::VDS_DIS_VB_ST::write(vbstd + 2); GBS::VDS_DIS_VB_SP::write(vbspd - 2); - } else { + } + else + { _WSN(F("limit")); } - } break; + } + break; case 'q': - if (uopt->deintMode != 1) { + if (uopt->deintMode != 1) + { uopt->deintMode = 1; disableMotionAdaptDeinterlace(); - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) { + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) + { disableScanlines(); } saveUserPrefs(); @@ -1186,7 +2469,8 @@ void handleType2Command(char argument) _WSN(F("Deinterlacer: Bob")); break; case 'r': - if (uopt->deintMode != 0) { + if (uopt->deintMode != 0) + { uopt->deintMode = 0; saveUserPrefs(); // will enable next loop() @@ -1196,12 +2480,15 @@ void handleType2Command(char argument) case 't': // unused now _WS(F("6-tap: ")); - if (uopt->wantTap6 == 0) { + if (uopt->wantTap6 == 0) + { uopt->wantTap6 = 1; GBS::VDS_TAP6_BYPS::write(0); GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() - 1); _WSN(F("on")); - } else { + } + else + { uopt->wantTap6 = 0; GBS::VDS_TAP6_BYPS::write(1); GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() + 1); @@ -1209,23 +2496,28 @@ void handleType2Command(char argument) } saveUserPrefs(); break; - case 'u': - // restart to attempt wifi station mode connect - wifiStartStaMode(""); - delay(100); - ESP.reset(); + case 'u': // extract backup + extractBackup(); + // // restart to attempt wifi station mode connect + // wifiStartStaMode(""); + // delay(100); + // ESP.reset(); break; - case 'v': { + case 'v': + { uopt->wantFullHeight = !uopt->wantFullHeight; saveUserPrefs(); uint8_t vidMode = getVideoMode(); // if (uopt->presetPreference == 5) { - if (rto->resolutionID == Output1080p) { - if (GBS::GBS_PRESET_ID::read() == 0x05 || GBS::GBS_PRESET_ID::read() == 0x15) { + if (rto->resolutionID == Output1080p) + { + if (GBS::GBS_PRESET_ID::read() == 0x05 || GBS::GBS_PRESET_ID::read() == 0x15) + { applyPresets(vidMode); } } - } break; + } + break; case 'w': uopt->enableCalibrationADC = !uopt->enableCalibrationADC; saveUserPrefs(); @@ -1233,19 +2525,25 @@ void handleType2Command(char argument) case 'x': uopt->preferScalingRgbhv = !uopt->preferScalingRgbhv; _WS(F("preferScalingRgbhv: ")); - if (uopt->preferScalingRgbhv) { + if (uopt->preferScalingRgbhv) + { _WSN(F("on")); - } else { + } + else + { _WSN(F("off")); } saveUserPrefs(); break; case 'X': _WS(F("ExternalClockGenerator ")); - if (uopt->disableExternalClockGenerator == 0) { + if (uopt->disableExternalClockGenerator == 0) + { uopt->disableExternalClockGenerator = 1; _WSN(F("disabled")); - } else { + } + else + { uopt->disableExternalClockGenerator = 0; _WSN("enabled"); } @@ -1253,9 +2551,12 @@ void handleType2Command(char argument) break; case 'z': // sog slicer level - if (rto->currentLevelSOG > 0) { + if (rto->currentLevelSOG > 0) + { rto->currentLevelSOG -= 1; - } else { + } + else + { rto->currentLevelSOG = 16; } setAndUpdateSogLevel(rto->currentLevelSOG); @@ -1263,35 +2564,44 @@ void handleType2Command(char argument) _WSF( PSTR("Phase: %d SOG: %d\n"), rto->phaseSP, - rto->currentLevelSOG - ); + rto->currentLevelSOG); break; case 'E': // test option for now _WS(F("IF Auto Offset: ")); toggleIfAutoOffset(); - if (GBS::IF_AUTO_OFST_EN::read()) { + if (GBS::IF_AUTO_OFST_EN::read()) + { _WSN(F("on")); - } else { + } + else + { _WSN(F("off")); } break; case 'F': // freeze pic - if (GBS::CAPTURE_ENABLE::read()) { + if (GBS::CAPTURE_ENABLE::read()) + { GBS::CAPTURE_ENABLE::write(0); - } else { + } + else + { GBS::CAPTURE_ENABLE::write(1); } break; case 'K': // scanline strength - if (uopt->scanlineStrength >= 0x10) { + if (uopt->scanlineStrength >= 0x10) + { uopt->scanlineStrength -= 0x10; - } else { + } + else + { uopt->scanlineStrength = 0x50; } - if (rto->scanlinesEnabled) { + if (rto->scanlinesEnabled) + { GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); } @@ -1303,48 +2613,42 @@ void handleType2Command(char argument) GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 1); _WSF( PSTR("Brightness++ : %d\n"), - GBS::VDS_Y_OFST::read() - ); + GBS::VDS_Y_OFST::read()); break; case 'T': // brightness-- GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 1); _WSF( PSTR("Brightness-- : %d\n"), - GBS::VDS_Y_OFST::read() - ); + GBS::VDS_Y_OFST::read()); break; case 'N': // contrast++ GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 1); _WSF( PSTR("Contrast++ : %d\n"), - GBS::VDS_Y_GAIN::read() - ); + GBS::VDS_Y_GAIN::read()); break; case 'M': // contrast-- GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 1); _WSF( PSTR("Contrast-- : %d\n"), - GBS::VDS_Y_GAIN::read() - ); + GBS::VDS_Y_GAIN::read()); break; case 'Q': // pb/u gain++ GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() + 1); _WSF( PSTR("Pb/U gain++ : %d\n"), - GBS::VDS_UCOS_GAIN::read() - ); + GBS::VDS_UCOS_GAIN::read()); break; case 'H': // pb/u gain-- GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() - 1); _WSF( PSTR("Pb/U gain-- : %d\n"), - GBS::VDS_UCOS_GAIN::read() - ); + GBS::VDS_UCOS_GAIN::read()); break; break; case 'P': @@ -1352,48 +2656,48 @@ void handleType2Command(char argument) GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() + 1); _WSF( PSTR("Pr/V gain++ : %d\n"), - GBS::VDS_VCOS_GAIN::read() - ); + GBS::VDS_VCOS_GAIN::read()); break; case 'S': // pr/v gain-- GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() - 1); _WSF( PSTR("Pr/V gain-- : %d\n"), - GBS::VDS_VCOS_GAIN::read() - ); + GBS::VDS_VCOS_GAIN::read()); break; case 'O': // info - if (GBS::ADC_INPUT_SEL::read() == 1) { + if (GBS::ADC_INPUT_SEL::read() == 1) + { _WSF( - PSTR("RGB reg\n------------\nY_OFFSET: %d\n"\ - "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n"\ - "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), + PSTR("RGB reg\n------------\nY_OFFSET: %d\n" + "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" + "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), GBS::VDS_Y_OFST::read(), GBS::VDS_U_OFST::read(), GBS::VDS_V_OFST::read(), GBS::VDS_Y_GAIN::read(), GBS::VDS_USIN_GAIN::read(), - GBS::VDS_UCOS_GAIN::read() - ); - } else { + GBS::VDS_UCOS_GAIN::read()); + } + else + { _WSF( - PSTR("YPbPr reg\n------------\nY_OFFSET: %d\n"\ - "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n"\ - "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), + PSTR("YPbPr reg\n------------\nY_OFFSET: %d\n" + "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" + "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), GBS::VDS_Y_OFST::read(), GBS::VDS_U_OFST::read(), GBS::VDS_V_OFST::read(), GBS::VDS_Y_GAIN::read(), GBS::VDS_USIN_GAIN::read(), - GBS::VDS_UCOS_GAIN::read() - ); + GBS::VDS_UCOS_GAIN::read()); } break; case 'U': // default - if (GBS::ADC_INPUT_SEL::read() == 1) { + if (GBS::ADC_INPUT_SEL::read() == 1) + { GBS::VDS_Y_GAIN::write(128); GBS::VDS_UCOS_GAIN::write(28); GBS::VDS_VCOS_GAIN::write(41); @@ -1404,7 +2708,9 @@ void handleType2Command(char argument) GBS::ADC_GOFCTRL::write(adco->g_off); GBS::ADC_BOFCTRL::write(adco->b_off); _WSN(F("RGB:defauit")); - } else { + } + else + { GBS::VDS_Y_GAIN::write(128); GBS::VDS_UCOS_GAIN::write(28); GBS::VDS_VCOS_GAIN::write(41); @@ -1419,6 +2725,11 @@ void handleType2Command(char argument) break; default: break; + } + + userCommand = '@'; // in case we handled web server command + lastVsyncLock = millis(); + wifiLoop(1); } } @@ -1438,7 +2749,8 @@ void initUpdateOTA() // update: no password is as (in)secure as this publicly stated hash.. // rely on the user having to enable the OTA feature on the web ui - ArduinoOTA.onStart([]() { + ArduinoOTA.onStart([]() + { String type; if (ArduinoOTA.getCommand() == U_FLASH) type = "sketch"; @@ -1451,15 +2763,13 @@ void initUpdateOTA() PSTR("%s %s\n"), String(F("Start updating ")).c_str(), type.c_str() - ); - }); - ArduinoOTA.onEnd([]() { - _WSN(F("\nEnd")); - }); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - _WSF(PSTR("Progress: %u%%\n"), (progress / (total / 100))); - }); - ArduinoOTA.onError([](ota_error_t error) { + ); }); + ArduinoOTA.onEnd([]() + { _WSN(F("\nEnd")); }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) + { _WSF(PSTR("Progress: %u%%\n"), (progress / (total / 100))); }); + ArduinoOTA.onError([](ota_error_t error) + { _WSF(PSTR("Error[%u]: "), error); if (error == OTA_AUTH_ERROR) _WSN(F("Auth Failed")); @@ -1470,10 +2780,9 @@ void initUpdateOTA() else if (error == OTA_RECEIVE_ERROR) _WSN(F("Receive Failed")); else if (error == OTA_END_ERROR) - _WSN(F("End Failed")); - }); + _WSN(F("End Failed")); }); ArduinoOTA.begin(); yield(); } -#endif // defined(ESP8266) \ No newline at end of file +#endif // defined(ESP8266) \ No newline at end of file diff --git a/src/wserver.h b/src/wserver.h index d9613127..69cef062 100644 --- a/src/wserver.h +++ b/src/wserver.h @@ -3,7 +3,7 @@ # File: wserver.h # # File Created: Friday, 19th April 2024 3:11:47 pm # # Author: Sergey Ko # -# Last Modified: Tuesday, 14th May 2024 11:11:47 am # +# Last Modified: Tuesday, 28th May 2024 12:22:03 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -32,6 +32,7 @@ extern struct userOptions * uopt; extern struct runTimeOptions *rto; const char indexPage[] PROGMEM = "/index.html"; +const char backupFile[] PROGMEM = "/_backup"; const char notFouldMessage[] PROGMEM = "

    404 | Page Not Found

    "; const char slotIndexMap[] PROGMEM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:,"; const char lomemMessage[] PROGMEM = "%d it's not enough memory..."; @@ -50,8 +51,9 @@ void serverSlotSave(); void serverSlotRemove(); void serverFsUploadResponder(); void serverFsUploadHandler(); -void serverFsDownloadHandler(); -void serverFsDir(); +void serverBackupDownload(); +void extractBackup(); +// void serverFsDir(); // void serverFsFormat(); void serverWiFiStatus(); void serverRestoreFilters(); @@ -66,7 +68,8 @@ void printVideoTimings(); void fastGetBestHtotal(); #if defined(ESP8266) -void handleType2Command(char argument); +void handleSerialCommand(); +void handleUserCommand(); void initUpdateOTA(); #endif // defined(ESP8266) From 3ef16c78ceba70533108563c04de4ea55ca6180b Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Tue, 28 May 2024 14:57:29 -0600 Subject: [PATCH 20/41] WIP: cleanup --- .vscode/extensions.json | 3 ++- data/index.html | Bin 172808 -> 0 bytes doc/DEVELOPER_GUIDE.md | 5 +++-- doc/img/slot-preset-prefs.png | Bin 80304 -> 43362 bytes 4 files changed, 5 insertions(+), 3 deletions(-) delete mode 100644 data/index.html diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 080e70d0..bde12210 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,8 @@ // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format "recommendations": [ - "platformio.platformio-ide" + "platformio.platformio-ide", + "psioniq.psi-header" ], "unwantedRecommendations": [ "ms-vscode.cpptools-extension-pack" diff --git a/data/index.html b/data/index.html deleted file mode 100644 index 59fbb46d8ebae30b2a76a1db528ea4d313c94662..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172808 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ⅈ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∓0qRrT*jSJa#Ju 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
    )NEUWfq0gT$ybiRPr{4!y?ZaCg~fj>c}}L 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 Uojegg;O6k;-+|B@+Or1*01AK9RsaA1 diff --git a/doc/DEVELOPER_GUIDE.md b/doc/DEVELOPER_GUIDE.md index 4bcbb38a..d885ec6b 100644 --- a/doc/DEVELOPER_GUIDE.md +++ b/doc/DEVELOPER_GUIDE.md @@ -1,6 +1,7 @@ -## Datasheets +## Datasheets & Reference data -[Google drive directory](https://drive.google.com/drive/folders/0B9y2RH4Lb3MZLUYtWGFOMUFVdlE?resourcekey=0-NRfMZNuFYhL2txb3TlAXrg) +- GBS datasheets on [Google drive](https://drive.google.com/drive/folders/0B9y2RH4Lb3MZLUYtWGFOMUFVdlE?resourcekey=0-NRfMZNuFYhL2txb3TlAXrg) +- [List of display resolutions](https://en.wikipedia.org/wiki/List_of_common_display_resolutions) ## Connections diff --git a/doc/img/slot-preset-prefs.png b/doc/img/slot-preset-prefs.png index 487df21c960bc00820e6829bb9be1731f185ece8..e25c179a4c63927aa444d6281f6c072b0fd750b5 100644 GIT binary patch literal 43362 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

    Cipnn=OX`#x*%$dPl*p)&Jzz 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

    K%koaHd1iJT(I2Ah0S*mxD`Zh#gfO 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 T%$Cky@JB^a^GdFQS-}4SIn#Ix From 71b861de25475c7042d423b31605bfd2f93ea074 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Thu, 30 May 2024 13:05:01 -0600 Subject: [PATCH 21/41] WIP: rethined backup, TEST required, occasional memory leak --- builds/filesystem.bin | Bin 1024000 -> 1024000 bytes builds/firmware.bin | Bin 551200 -> 551920 bytes doc/img/4e6bb9363629898.jpg | Bin 15518 -> 14337 bytes doc/img/669cd5363629833.jpg | Bin 34874 -> 31894 bytes doc/img/e2dd64363629965.jpg | Bin 29936 -> 27480 bytes doc/img/slot-preset-prefs.png | Bin 43362 -> 23785 bytes gbs-control.ino | 50 ++-- public/scripts/html2h.sh | 2 +- public/src/index.html.tpl | 145 +++++----- public/src/index.js | 255 ++++++++++-------- public/src/index.ts | 346 +++++++++++++----------- public/src/style.css | 10 +- src/OLEDMenuImplementation.cpp | 8 +- src/framesync.cpp | 2 +- src/framesync.h | 2 +- src/main.cpp | 50 ++-- src/menu.cpp | 22 +- src/options.h | 43 ++- src/presets.cpp | 140 ++++++---- src/slot.h | 1 - src/video.cpp | 26 +- src/wifiman.cpp | 21 +- src/wifiman.h | 8 +- src/wserver.cpp | 478 +++++++++++++++++++-------------- src/wserver.h | 8 +- 25 files changed, 914 insertions(+), 703 deletions(-) diff --git a/builds/filesystem.bin b/builds/filesystem.bin index e1a2d9db3245ecc812e3ca1ac7e624086c6ed24e..b27b8e347d2c5c167b7f3a20e7bf872264e27012 100644 GIT binary patch delta 41797 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 GKmicr>M67U delta 41542 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�&Zghq)|K*gXCPNgLNa2!e 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 delta 100355 zcma&O3tUvi`#*lp**#qJESCjWghlq81r`L|+m6l+U^N zR#eKA)hDg>()})W`E(Po!$%WKvAm>~qLp^VD=4t%|DLl;x6kkUdi{Cv>^U>@%*->- z%slhVGtZp%{i45Bd|QYSw(JOJ9Ct)8FOUCtPklm64BO}0&s`p7O_8OP*(`k>03use<^ACu3L7IE5Ua)tdqP8m%;vRC!-qs)Cz8ns@Q z+{N(+>T?IC^)af={#&)=&Wxd)DwDMt*}jikT%M_+R6pJi?{Ilmgr3)io~fZ{`_5qc zrqFX`=s6?wj1N6K(R^CYSE1(zq36obb4px{$J%&wNBO~tR)F%&7BMqAB`;1<~aoUFZhYFtxXAjnkeISEl3^&; z(oi|6Wc7r2a(Y61j`r&Ri9A1q90B^ugT=ci{)ZCymb0xSvuqrvZ6piIo?&Oy zTdq%GN5v=Wqq|>mdE6a=(bvYiJR4$No_2%>ARO17ZoD&iUmfT2^dS8x((ZpOFnaeZ zq;j$&N$%gn)#m32{Ln$^DO^!LBQ?epM8(89v~^_tkNjJMl?!)zCzr{&H2*mE;^_&CYZ(OuSEdsK$pkg-{px(a(Si@^~NjW zm2hWsI>Q{`(4OifAuh+lFC+VJy!^75Bq@iWt>R-e$jQTN;E>?=kxSNKC4a6wPiY52obk*ovQ6%N={6X?59i%>%Bsg;{ zTHT<$xj8KFPM^x!&BZ3vePvP(tHh>P9o4hVc3b{!*^>~-l87m8^PvbWpIkA;ef5k$ zVD$cIm* zQ*8-DSaF+P)dbW`j5T3j_LG7cYeo)veyS}yn-xFSt3K>ayfCF7P1FXlg1PE_#Ev(z z6n~ElndI2ige(_Z^%mkU()bHgZWEqBN;+HhS|~0@prif)VUv=^lJ@xcfnOX-_k4tg zt{kY3ei!d6Z*q9zMVIHllFJj{pOoF4TBhvDlz-Fd;2w?v7Ble|UH(;XYK<)6KuL)c zQQ8k_If8O28ccwYvsks$T8P-!_GJ?~N?|I&xHD;&t+OdX9NKubRm2 zn&l#S|=uAG(*}dSCQ{;Igv3raU9rOVAcu~LEY5E0*lZOQ$$cp69tN; zB(Ak0G_3ygwAWa6Cs|i}hLt1Dc3Ch=r7)Z~j zRV4(BVPwWY5|qaiGlVn#atvny! @-gL!sdqkK8vzw9p3_p)NJbf^$)&FO@$<(JB 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 DtaBzD diff --git a/doc/img/4e6bb9363629898.jpg b/doc/img/4e6bb9363629898.jpg index 00256d5a6b5d9468e07ac5fab4cdda6c4ddd6771..b57f77248a09c7f8b9994edd6890bdb5480179b2 100644 GIT binary patch literal 14337 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 CQpA-2 diff --git a/doc/img/669cd5363629833.jpg b/doc/img/669cd5363629833.jpg index c3ea20793a99660481c3c9dd895c9b3e943456ad..94944e3118e6eb850a7685b932e3488a850d35e5 100644 GIT binary patch literal 31894 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 literal 34874 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 U{{V>oRFC(E(y42yl(s+r+1mmLt^fc4 diff --git a/doc/img/e2dd64363629965.jpg b/doc/img/e2dd64363629965.jpg index 6a94370d6c1b63cac4dbce1c528fdf520c65d99f..5c51510981849833ab1f187e6c3cb78ed49e3e48 100644 GIT binary patch literal 27480 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 Shvl*9MHSMvM=W%cKmXakAbZUK diff --git a/doc/img/slot-preset-prefs.png b/doc/img/slot-preset-prefs.png index e25c179a4c63927aa444d6281f6c072b0fd750b5..422c98959f7e6cbe7e3e01771412f6f097f0d7e3 100644 GIT binary patch literal 23785 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 = 16; rto->failRetryAttempts = 0; // rto->presetID = OutputBypass; - rto->resolutionID = OutputNone; + rto->resolutionID = Output240p; rto->isCustomPreset = false; rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; @@ -317,6 +316,7 @@ void setup() GBS::STATUS_00::read(); // delay 2 of 2 + // ? WHY? initDelay = millis(); while (millis() - initDelay < 1000) { wifiLoop(0); @@ -400,17 +400,17 @@ void setup() // FIXME double reset? // setResetParameters(); - delay(4); // help wifi (presets are unloaded now) + // delay(4); // help wifi (presets are unloaded now) wifiLoop(1); - delay(4); + // delay(4); // startup reliability test routine /*rto->videoStandardInput = 1; - writeProgramArrayNew(ntsc_240p, 0); - doPostPresetLoadSteps(); - int i = 100000; - while (i-- > 0) loop(); - ESP.restart();*/ + writeProgramArrayNew(ntsc_240p, 0); + doPostPresetLoadSteps(); + int i = 100000; + while (i-- > 0) loop(); + ESP.restart();*/ // rto->syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here // inputAndSyncDetect(); @@ -437,7 +437,8 @@ void setup() void loop() { static unsigned long lastTimeSyncWatcher = millis(); - static unsigned long lastTimeSourceCheck = 500; // 500 to start right away (after setup it will be 2790ms when we get here) + // 500 to start right away (after setup it will be 2790ms when we get here) + static unsigned long lastTimeSourceCheck = 500; static unsigned long lastTimeInterruptClear = millis(); menuLoop(); @@ -445,13 +446,17 @@ void loop() // Serial takes precedence handleSerialCommand(); - + yield(); // handle user commands handleUserCommand(); + yield(); // run FrameTimeLock if enabled - if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && - rto->syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) { + if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false + && rto->autoBestHtotalEnabled && rto->syncWatcherEnabled + && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval + && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) + { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); @@ -504,12 +509,18 @@ void loop() // } // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes - if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true && (millis() - lastTimeSyncWatcher) > 20) { + if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true + && (millis() - lastTimeSyncWatcher) > 20) + { runSyncWatcher(); lastTimeSyncWatcher = millis(); // auto adc gain - if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected && rto->videoStandardInput > 0 && rto->clampPositionIsSet && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 && rto->boardHasPower) { + if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected + && rto->videoStandardInput > 0 && rto->clampPositionIsSet + && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 + && rto->boardHasPower) + { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { @@ -693,9 +704,14 @@ void loop() pingLastTime = millis(); } } -#endif +#endif // HAVE_PINGER_LIBRARY + // web client handler server.handleClient(); // websocket event handler webSocket.loop(); + // handle ArduinoIDE + if (rto->allowUpdatesOTA) { + ArduinoOTA.handle(); + } } diff --git a/public/scripts/html2h.sh b/public/scripts/html2h.sh index 9ad0a87c..72ebe27d 100755 --- a/public/scripts/html2h.sh +++ b/public/scripts/html2h.sh @@ -9,7 +9,7 @@ # rm -f webui_html.h-e webui.html cd ../../data -gzip -c9 webui.html > index.html +gzip -c9 webui.html > __index rm -f webui.html diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 5a89bf72..4e2fc8da 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -64,8 +64,7 @@

    @@ -98,48 +97,57 @@
    • Choose an output resolution from these presets.
    • -
    • Your selection will also be used for startup. 1280x960 is recommended for NTSC sources, - 1280x1024 for PAL. -
    • -
    • Use the "Matched Presets" option to switch between the two automatically (Preferences tab) -
    • - +
    • Your selection will also be used for startup. 1280x960 is recommended for NTSC sources, 1280x1024 for PAL.
    • +
    • Use the "Matched Presets" option to switch between the two automatically (Preferences tab)
    +
    - - - - - - - +
    + + + + + + + +
    +
    + + +
    @@ -150,8 +158,7 @@
    • Gain +/- adjusts the gain for the currently loaded preset.
    • -
    • Auto Gain increases gain so bright areas are displayed as white, then decreases it when - clipping is detected. Calibrate for a few seconds on a white screen.
    • +
    • Auto Gain increases gain so bright areas are displayed as white, then decreases it when clipping is detected. Calibrate for a few seconds on a white screen.
    @@ -533,8 +538,7 @@ Matched Presets
      -
    • If enabled, default to 1280x960 for NTSC 60 and 1280x1024 for PAL 50 (does not - apply for 720p / 1080p presets).
    • +
    • If enabled, default to 1280x960 for NTSC 60 and 1280x1024 for PAL 50 (does not apply for 720p / 1080p presets).
      -
    • Some presets default to not using the entire vertical output resolution, leaving - some lines black.
    • -
    • With Full Height enabled, these presets will instead scale to fill more of the - screen height.
    • +
    • Some presets default to not using the entire vertical output resolution, leaving some lines black.
    • +
    • With Full Height enabled, these presets will instead scale to fill more of the screen height.
    • (This currently only affects 1920 x 1080)
    @@ -566,11 +568,9 @@
    • Low Resolution VGA input: Pass-through or Upscale
    • Low resolution sources can be either passed on directly or get upscaled.
    • -
    • Upscaling may have some border / scaling issues, but is more compatible with - displays.
    • +
    • Upscaling may have some border / scaling issues, but is more compatible with displays.
    • Also, refresh rates other than 60Hz are not well supported yet.
    • -
    • "Low resolution" is currently set at below or equal to 640x480 (525 active - lines).
    • +
    • "Low resolution" is currently set at below or equal to 640x480 (525 active lines).
      -
    • The default output mode is RGBHV, suitable for use with VGA cables or HDMI - converters.
    • -
    • An experimental YPbPr mode can also be selected. Compatibility is still spotty. -
    • +
    • The default output mode is RGBHV, suitable for use with VGA cables or HDMI converters.
    • +
    • An experimental YPbPr mode can also be selected. Compatibility is still spotty.
      -
    • If your TV does not support 50Hz sources (displaying unknown format, no matter - the preset), try this option. -
    • +
    • If your TV does not support 50Hz sources (displaying unknown format, no matter the preset), try this option.
    • The frame rate will not be as smooth. Reboot required.
    @@ -616,9 +612,7 @@
    • By default the external clock generator is enabled when installed.
    • -
    • You can disable it if you have issues with other options, e.g Force PAL 50Hz to - 60Hz. - Reboot required.
    • +
    • You can disable it if you have issues with other options, e.g Force PAL 50Hz to 60Hz. Reboot required.
      -
    • This option keeps the input and output timings aligned, fixing the horizontal - tear line that can appear sometimes.
    • -
    • Two methods are available. Try switching methods if your display goes blank or - shifts vertically.
    • +
    • This option keeps the input and output timings aligned, fixing the horizontal tear line that can appear sometimes.
    • +
    • Two methods are available. Try switching methods if your display goes blank or shifts vertically.
    @@ -671,13 +663,10 @@ Deinterlace Method
      -
    • Gbscontrol detects interlaced content and automatically toggles deinterlacing. -
    • -
    • Bob Method: essentially no deinterlacing, no added lag but flickers, can be - combined with scanlines
    • +
    • Gbscontrol detects interlaced content and automatically toggles deinterlacing.
    • +
    • Bob Method: essentially no deinterlacing, no added lag but flickers, can be combined with scanlines
    • Motion Adaptive: removes flicker and shows some artefacts in moving details
    • -
    • If possible, configure the source for progressive output. Otherwise, using - Motion Adaptive is recommended.
    • +
    • If possible, configure the source for progressive output. Otherwise, using Motion Adaptive is recommended.
    diff --git a/public/src/index.js b/public/src/index.js index a1a1d06b..e36c9139 100644 --- a/public/src/index.js +++ b/public/src/index.js @@ -72,21 +72,20 @@ const StructParser = { /* GBSControl Global Object*/ const GBSControl = { buttonMapping: { - 'a': "n/a", - 'c': "button1280x960", - 'd': "button1280x960", - 'e': "button1280x1024", - 'f': "button1280x1024", - 'g': "button1280x720", - 'h': "button1280x720", - 'i': "button720x480", - 'j': "button720x480", - 'k': "button1920x1080", - 'l': "button1920x1080", - 'm': "button15kHzScaleDown", - 'n': "button15kHzScaleDown", - 'o': "button768×576", - 'p': "button768×576", + 'a': "button240p", + 'c': "button960p", + 'd': "button960p", + 'e': "button1024p", + 'f': "button1024p", + 'g': "button720p", + 'h': "button720p", + 'i': "button480p", + 'j': "button480p", + 'k': "button1080p", + 'l': "button1080p", + 'm': "button15kHz", + 'n': "button15kHz", + 'p': "button576p", 'q': "buttonSourcePassThrough", 's': "buttonSourcePassThrough", 'u': "buttonSourcePassThrough", // PresetBypassRGBHV @@ -237,13 +236,15 @@ const createWebSocket = () => { GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700); GBSControl.isWsActive = true; const [messageDataAt0, // always # - messageDataAt1, // selected resolution ! (hex) - messageDataAt2, // selected slot ID (char) + messageDataAt1, // selected slot ID (int) + messageDataAt2, // selected resolution () messageDataAt3, // adcAutoGain & scanlines & vdsLineFilter & wantPeaking & PalForce60 & wantOutputComponent (binary) messageDataAt4, // matchPresetSource & enableFrameTimeLock & deintMode & wantTap6 & wantStepResponse & wantFullHeight (binary) messageDataAt5, // enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator (binary) - // dev + // developer tab messageDataAt6, // printInfos, invertSync, oversampling, ADC Filter + // system tab + messageDataAt7 // enableOTA ] = message.data; // console.log(message.data); if (messageDataAt0 != "#") { @@ -255,17 +256,16 @@ const createWebSocket = () => { } } else { - // console.log("buttonMapping: " + messageDataAt1) + // ! current/selected slot + const slotId = "slot-" + messageDataAt1; + const activeSlotButton = document.querySelector(`[gbs-element-ref="${slotId}"]`); // ! curent/selected resolution - const resID = GBSControl.buttonMapping[messageDataAt1]; + const resID = GBSControl.buttonMapping[messageDataAt2]; const resEl = document.querySelector(`[gbs-element-ref="${resID}"]`); const activePresetButton = resEl ? resEl.getAttribute("gbs-element-ref") : "none"; GBSControl.ui.presetButtonList.forEach(toggleButtonActive(activePresetButton)); - // ! current/selected slot - const slotId = "slot-" + messageDataAt2; - const activeSlotButton = document.querySelector(`[gbs-element-ref="${slotId}"]`); if (activeSlotButton) { GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); } @@ -349,30 +349,39 @@ const createWebSocket = () => { } }); } - // developer mode tab + // developer tab if (messageDataAt6) { - const optionByte4 = messageDataAt6.charCodeAt(0); + const optionByte6 = messageDataAt6.charCodeAt(0); const printInfoButton = document.querySelector(`button[gbs-message="i"][gbs-message-type="action"]`); const invertSync = document.querySelector(`button[gbs-message="8"][gbs-message-type="action"]`); const oversampling = document.querySelector(`button[gbs-message="o"][gbs-message-type="action"]`); const adcFilter = document.querySelector(`button[gbs-message="F"][gbs-message-type="action"]`); - if ((optionByte4 & 0x01) == 0x01) + if ((optionByte6 & 0x01) == 0x01) printInfoButton.setAttribute("active", ""); else printInfoButton.removeAttribute("active"); - if ((optionByte4 & 0x02) == 0x02) + if ((optionByte6 & 0x02) == 0x02) invertSync.setAttribute("active", ""); else invertSync.removeAttribute("active"); - if ((optionByte4 & 0x04) == 0x04) + if ((optionByte6 & 0x04) == 0x04) oversampling.setAttribute("active", ""); else oversampling.removeAttribute("active"); - if ((optionByte4 & 0x08) == 0x08) + if ((optionByte6 & 0x08) == 0x08) adcFilter.setAttribute("active", ""); else adcFilter.removeAttribute("active"); } + // system tab + if (messageDataAt6) { + const optionByte7 = messageDataAt7.charCodeAt(0); + const enableOTAButton = document.querySelector(`button[gbs-message="c"][gbs-message-type="action"]`); + if ((optionByte7 & 0x01) == 0x01) + enableOTAButton.setAttribute("active", ""); + else + enableOTAButton.removeAttribute("active"); + } } }; }; @@ -427,7 +436,7 @@ const loadDoc = (link) => { return fetch(`http://${GBSControl.serverIP}/sc?${link}&nocache=${new Date().getTime()}`); }; /** - * Description placeholder + * user command handler * * @param {string} link * @returns {*} @@ -441,17 +450,30 @@ const loadUser = (link) => { return fetch(`http://${GBSControl.serverIP}/uc?${link}&nocache=${new Date().getTime()}`); }; /** SLOT management */ +/** + * Remove slot handler + */ const removePreset = () => { const currentSlot = document.querySelector('[gbs-role="slot"][active]'); if (!currentSlot) { return; } - const currentIndex = currentSlot.getAttribute("gbs-slot-id"); + const currentIndex = currentSlot.getAttribute("gbs-message"); const currentName = currentSlot.getAttribute("gbs-name"); if (currentName && currentName.trim() !== "Empty") { - return fetch(`http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}`).then(() => { - console.log("slot removed, reloadng slots..."); - fetchSlotNames(); + gbsAlert(`

    Are you sure to remove slot: ${currentName}?

    This action also removes all related presets.

    `, '
    done
    Yes
    ', '
    close
    No
    ').then(() => { + return fetch(`http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}`).then(() => { + console.log("slot removed, reloadng slots..."); + fetchSlotNames().then((success) => { + if (success) { + updateSlotNames(); + } + else { + fetchSlotNamesErrorRetry(); + } + }); + }); + }).catch(() => { }); } ; @@ -466,7 +488,7 @@ const savePreset = () => { return; } const key = currentSlot.getAttribute("gbs-element-ref"); - const currentIndex = currentSlot.getAttribute("gbs-slot-id"); + const currentIndex = currentSlot.getAttribute("gbs-message"); gbsPrompt("Assign a slot name", GBSControl.structs.slots[currentIndex].name || key) .then((currentName) => { if (currentName && currentName.trim() !== "Empty") { @@ -505,23 +527,38 @@ const savePreset = () => { */ const getSlotsHTML = () => { // prettier-ignore - return [ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' - ].map((chr, idx) => { - return ``; - }).join(''); + // return [ + // 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + // 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' + // ].map((chr, idx) => { + // // gbs-message="${chr}" + // return ``; + // }).join(''); + // TODO: 'i' max. rely on SLOTS_TOTAL which is ambigous + let str = ``; + for (let i = 0; i != 72; i++) { + str += ``; + } + return str; }; /** * Description placeholder @@ -529,14 +566,14 @@ const getSlotsHTML = () => { * @param {string} slot */ const setSlot = (slot) => { - fetch(`http://${GBSControl.serverIP}/slot/set?slot=${slot}&${+new Date()}`); + fetch(`http://${GBSControl.serverIP}/slot/set?index=${slot}&${+new Date()}`); }; /** * Description placeholder */ const updateSlotNames = () => { for (let i = 0; i < GBSControl.maxSlots; i++) { - const el = document.querySelector(`[gbs-slot-id="${i}"]`); + const el = document.querySelector(`[gbs-message="${i}"][gbs-role="slot"]`); el.setAttribute("gbs-name", GBSControl.structs.slots[i].name); el.setAttribute("gbs-meta", getSlotPresetName(GBSControl.structs.slots[i].resolutionID)); } @@ -564,44 +601,45 @@ const fetchSlotNames = () => { * Must be aligned with options.h -> OutputResolution * * @param {string} resolutionID - * @returns {("1280x960" | "1280x1024" | "1280x720" | "1920x1080" | "DOWNSCALE" | "720x480" | "768x576" | "BYPASS" | "CUSTOM")} + * @returns {("960p" | "1024p" | "720p" | "480p" | "1080p" | "DOWNSCALE" | "576p" | "BYPASS" | "BYPASS HD" | "BYPASS RGBHV" | "240p" | "NONE")} */ const getSlotPresetName = (resolutionID) => { switch (resolutionID) { case 'c': case 'd': // case 0x011: - return "1280x960"; + return "960p"; case 'e': case 'f': // case 0x012: - return "1280x1024"; + return "1024p"; case 'g': case 'h': // case 0x013: - return "1280x720"; + return "720p"; case 'i': case 'j': // case 0x015: - return "720x480"; + return "480p"; case 'k': case 'l': - return "1920x1080"; + return "1080p"; case 'm': case 'n': // case 0x016: return "DOWNSCALE"; - case 'o': case 'p': - return "768x576"; + return "576p"; case 'q': return "BYPASS"; case 's': // bypass 1 - return "HD_BYPASS"; + return "BYPASS HD"; case 'u': // bypass 2 - return "BYPASS_RGBHV"; + return "BYPASS RGBHV"; // case 12: // return "CUSTOM"; + case 'a': + return "240p"; default: return "NONE"; } @@ -895,7 +933,7 @@ const doRestore = (f) => { formData.append("gbs-backup.bin", f, f.name); const setAlertBody = () => { const fsize = f.size / 1024; - return '

    Backup File:

    Backup date: ' + return '

    Backup File:

    Backup date: ' + backupDate.toLocaleString() + '

    Size: ' + fsize.toFixed(2) + ' kB

    '; }; @@ -904,10 +942,7 @@ const doRestore = (f) => { }, () => { return fetch(`http://${GBSControl.serverIP}/data/restore`, { method: "POST", - body: formData, - headers: { - "Content-Type": "application/octet-stream", - } + body: formData }).then((response) => { // backupInput.removeAttribute("disabled"); window.setTimeout(() => { @@ -975,34 +1010,36 @@ const doRestore = (f) => { * @param {Blob} blob * @param {string} [name="file.txt"] */ -const downloadBlob = (blob, name = "file.txt") => { - let wnav = window.navigator; - // IE10+ - if (wnav && wnav.msSaveOrOpenBlob) { - wnav.msSaveOrOpenBlob(blob, name); - return; - } - /// normal browsers: - // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) - const blobUrl = URL.createObjectURL(blob); - // Create a link element - const link = document.createElement("a"); - // Set link's href to point to the Blob URL - link.href = blobUrl; - link.download = name; - // Append link to the body - document.body.appendChild(link); - // Dispatch click event on the link - // This is necessary as link.click() does not work on the latest firefox - link.dispatchEvent(new MouseEvent("click", { - bubbles: true, - cancelable: true, - view: window, - })); - window.URL.revokeObjectURL(blobUrl); - // Remove link from body - document.body.removeChild(link); -}; +// const downloadBlob = (blob: Blob, name = "file.txt") => { +// let wnav: any = window.navigator; +// // IE10+ +// if (wnav && wnav.msSaveOrOpenBlob) { +// wnav.msSaveOrOpenBlob(blob, name); +// return; +// } +// /// normal browsers: +// // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) +// const blobUrl = URL.createObjectURL(blob); +// // Create a link element +// const link = document.createElement("a"); +// // Set link's href to point to the Blob URL +// link.href = blobUrl; +// link.download = name; +// // Append link to the body +// document.body.appendChild(link); +// // Dispatch click event on the link +// // This is necessary as link.click() does not work on the latest firefox +// link.dispatchEvent( +// new MouseEvent("click", { +// bubbles: true, +// cancelable: true, +// view: window, +// }) +// ); +// window.URL.revokeObjectURL(blobUrl); +// // Remove link from body +// document.body.removeChild(link); +// }; /** WIFI management */ const wifiGetStatus = () => { return fetch(`http://${GBSControl.serverIP}/wifi/status?${+new Date()}`) @@ -1026,7 +1063,7 @@ const wifiGetStatus = () => { }); }; /** - * Description placeholder + * Does connect to selected WiFi network */ const wifiConnect = () => { const ssid = GBSControl.ui.wifiSSDInput.value; @@ -1042,15 +1079,13 @@ const wifiConnect = () => { method: "POST", body: formData, }).then(() => { - gbsAlert(`GBSControl will restart and will connect to ${ssid}. Please wait some seconds then press OK`) - .then(() => { + gbsAlert(`GBSControl will restart and will connect to ${ssid}. Please wait few seconds then press OK`).then(() => { window.location.href = "http://gbscontrol.local/"; - }) - .catch(() => { }); + }).catch(() => { }); }); }; /** - * Description placeholder + * Query WiFi networks */ const wifiScanSSID = () => { GBSControl.ui.wifiStaButton.setAttribute("disabled", ""); @@ -1082,10 +1117,10 @@ const wifiScanSSID = () => { .then((ssids) => { return ssids.reduce((acc, ssid) => { return `${acc} - wifi - ${ssid.ssid} - ${ssid.encripted ? "lock" : "lock_open"} - `; + wifi + ${ssid.ssid} + ${ssid.encripted ? "lock" : "lock_open"} + `; }, ""); }) .then((html) => { @@ -1124,11 +1159,9 @@ const wifiSetAPMode = () => { method: "POST", // body: formData, }).then((response) => { - gbsAlert("Switching to AP mode. Please connect to gbscontrol SSID and then click OK") - .then(() => { + gbsAlert("Switching to AP mode. Please connect to gbscontrol SSID and then click OK").then(() => { window.location.href = "http://192.168.4.1"; - }) - .catch(() => { }); + }).catch(() => { }); return response; }); }; diff --git a/public/src/index.ts b/public/src/index.ts index 7b254b7f..48ab4bf8 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -125,24 +125,23 @@ const StructParser = { /* GBSControl Global Object*/ const GBSControl = { buttonMapping: { - 'a': "n/a", - 'c': "button1280x960", - 'd': "button1280x960", // 50Hz - 'e': "button1280x1024", - 'f': "button1280x1024", // 50Hz - 'g': "button1280x720", - 'h': "button1280x720", // 50Hz - 'i': "button720x480", - 'j': "button720x480", // 50Hz - 'k': "button1920x1080", - 'l': "button1920x1080", // 50Hz - 'm': "button15kHzScaleDown", - 'n': "button15kHzScaleDown", // 50Hz - 'o': "button768×576", - 'p': "button768×576", // 50Hz + 'a': "button240p", + 'c': "button960p", + 'd': "button960p", // 50Hz + 'e': "button1024p", + 'f': "button1024p", // 50Hz + 'g': "button720p", + 'h': "button720p", // 50Hz + 'i': "button480p", + 'j': "button480p", // 50Hz + 'k': "button1080p", + 'l': "button1080p", // 50Hz + 'm': "button15kHz", + 'n': "button15kHz", // 50Hz + 'p': "button576p", // 50Hz 'q': "buttonSourcePassThrough", - 's': "buttonSourcePassThrough", // PresetHdBypass - 'u': "buttonSourcePassThrough", // PresetBypassRGBHV + 's': "buttonSourcePassThrough", // PresetHdBypass + 'u': "buttonSourcePassThrough", // PresetBypassRGBHV // 'w': "buttonLoadCustomPreset", }, controlKeysMobileMode: "move", @@ -305,13 +304,15 @@ const createWebSocket = () => { const [ messageDataAt0, // always # - messageDataAt1, // selected resolution ! (hex) - messageDataAt2, // selected slot ID (char) + messageDataAt1, // selected slot ID (int) + messageDataAt2, // selected resolution () messageDataAt3, // adcAutoGain & scanlines & vdsLineFilter & wantPeaking & PalForce60 & wantOutputComponent (binary) messageDataAt4, // matchPresetSource & enableFrameTimeLock & deintMode & wantTap6 & wantStepResponse & wantFullHeight (binary) messageDataAt5, // enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator (binary) - // dev + // developer tab messageDataAt6, // printInfos, invertSync, oversampling, ADC Filter + // system tab + messageDataAt7 // enableOTA ] = message.data; // console.log(message.data); @@ -325,9 +326,13 @@ const createWebSocket = () => { GBSControl.dataQueued = 0; } } else { -// console.log("buttonMapping: " + messageDataAt1) + // ! current/selected slot + const slotId = "slot-" + messageDataAt1; + const activeSlotButton = document.querySelector( + `[gbs-element-ref="${slotId}"]` + ); // ! curent/selected resolution - const resID = GBSControl.buttonMapping[messageDataAt1]; + const resID = GBSControl.buttonMapping[messageDataAt2]; const resEl = document.querySelector( `[gbs-element-ref="${resID}"]` ); @@ -337,11 +342,6 @@ const createWebSocket = () => { GBSControl.ui.presetButtonList.forEach( toggleButtonActive(activePresetButton) ); - // ! current/selected slot - const slotId = "slot-" + messageDataAt2; - const activeSlotButton = document.querySelector( - `[gbs-element-ref="${slotId}"]` - ); if (activeSlotButton) { GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); @@ -433,31 +433,40 @@ const createWebSocket = () => { } }); } - // developer mode tab + // developer tab if(messageDataAt6) { - const optionByte4 = messageDataAt6.charCodeAt(0); + const optionByte6 = messageDataAt6.charCodeAt(0); const printInfoButton = document.querySelector(`button[gbs-message="i"][gbs-message-type="action"]`); const invertSync = document.querySelector(`button[gbs-message="8"][gbs-message-type="action"]`); const oversampling = document.querySelector(`button[gbs-message="o"][gbs-message-type="action"]`); const adcFilter = document.querySelector(`button[gbs-message="F"][gbs-message-type="action"]`); - if((optionByte4 & 0x01) == 0x01) + if((optionByte6 & 0x01) == 0x01) printInfoButton.setAttribute("active", ""); else printInfoButton.removeAttribute("active"); - if((optionByte4 & 0x02) == 0x02) + if((optionByte6 & 0x02) == 0x02) invertSync.setAttribute("active", ""); else invertSync.removeAttribute("active"); - if((optionByte4 & 0x04) == 0x04) + if((optionByte6 & 0x04) == 0x04) oversampling.setAttribute("active", ""); else oversampling.removeAttribute("active"); - if((optionByte4 & 0x08) == 0x08) + if((optionByte6 & 0x08) == 0x08) adcFilter.setAttribute("active", ""); else adcFilter.removeAttribute("active"); } + // system tab + if(messageDataAt6) { + const optionByte7 = messageDataAt7.charCodeAt(0); + const enableOTAButton = document.querySelector(`button[gbs-message="c"][gbs-message-type="action"]`); + if((optionByte7 & 0x01) == 0x01) + enableOTAButton.setAttribute("active", ""); + else + enableOTAButton.removeAttribute("active"); + } } }; }; @@ -518,7 +527,7 @@ const loadDoc = (link: string) => { }; /** - * Description placeholder + * user command handler * * @param {string} link * @returns {*} @@ -537,6 +546,9 @@ const loadUser = (link: string) => { /** SLOT management */ +/** + * Remove slot handler + */ const removePreset = () => { const currentSlot = document.querySelector('[gbs-role="slot"][active]'); @@ -544,14 +556,30 @@ const removePreset = () => { return; } - const currentIndex = currentSlot.getAttribute("gbs-slot-id"); + const currentIndex = currentSlot.getAttribute("gbs-message"); const currentName = currentSlot.getAttribute("gbs-name"); if (currentName && currentName.trim() !== "Empty") { - return fetch( - `http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}` - ).then(() => { - console.log("slot removed, reloadng slots..."); - fetchSlotNames(); + gbsAlert( + `

    Are you sure to remove slot: ${currentName}?

    This action also removes all related presets.

    `, + '
    done
    Yes
    ', + '
    close
    No
    ' + ).then( + () => { + return fetch( + `http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}` + ).then(() => { + console.log("slot removed, reloadng slots..."); + fetchSlotNames().then((success: boolean) => { + if (success) { + updateSlotNames(); + } else { + fetchSlotNamesErrorRetry(); + } + }); + }); + } + ).catch(() => { + }); }; }; @@ -568,7 +596,7 @@ const savePreset = () => { } const key = currentSlot.getAttribute("gbs-element-ref"); - const currentIndex = currentSlot.getAttribute("gbs-slot-id"); + const currentIndex = currentSlot.getAttribute("gbs-message"); gbsPrompt( "Assign a slot name", GBSControl.structs.slots[currentIndex].name || key @@ -617,25 +645,40 @@ const savePreset = () => { */ const getSlotsHTML = () => { // prettier-ignore - return [ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' - ].map((chr, idx) => { - - return ``; - - }).join(''); +// return [ +// 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', +// 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', +// '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' +// ].map((chr, idx) => { + +// // gbs-message="${chr}" +// return ``; + +// }).join(''); + // TODO: 'i' max. rely on SLOTS_TOTAL which is ambigous + let str = ``; + for(let i = 0; i != 72; i++) { + str += ``; + } + return str; }; /** @@ -644,7 +687,7 @@ const getSlotsHTML = () => { * @param {string} slot */ const setSlot = (slot: string) => { - fetch(`http://${GBSControl.serverIP}/slot/set?slot=${slot}&${+new Date()}`); + fetch(`http://${GBSControl.serverIP}/slot/set?index=${slot}&${+new Date()}`); }; /** @@ -652,7 +695,7 @@ const setSlot = (slot: string) => { */ const updateSlotNames = () => { for (let i = 0; i < GBSControl.maxSlots; i++) { - const el = document.querySelector(`[gbs-slot-id="${i}"]`); + const el = document.querySelector(`[gbs-message="${i}"][gbs-role="slot"]`); el.setAttribute("gbs-name", GBSControl.structs.slots[i].name); el.setAttribute( @@ -684,48 +727,50 @@ const fetchSlotNames = () => { }); }; + /** * Must be aligned with options.h -> OutputResolution * * @param {string} resolutionID - * @returns {("1280x960" | "1280x1024" | "1280x720" | "1920x1080" | "DOWNSCALE" | "720x480" | "768x576" | "BYPASS" | "CUSTOM")} + * @returns {("960p" | "1024p" | "720p" | "480p" | "1080p" | "DOWNSCALE" | "576p" | "BYPASS" | "BYPASS HD" | "BYPASS RGBHV" | "240p" | "NONE")} */ const getSlotPresetName = (resolutionID: string) => { switch (resolutionID) { case 'c': case 'd': // case 0x011: - return "1280x960"; + return "960p"; case 'e': case 'f': // case 0x012: - return "1280x1024"; + return "1024p"; case 'g': case 'h': // case 0x013: - return "1280x720"; + return "720p"; case 'i': case 'j': // case 0x015: - return "720x480"; + return "480p"; case 'k': case 'l': - return "1920x1080"; + return "1080p"; case 'm': case 'n': // case 0x016: return "DOWNSCALE"; - case 'o': case 'p': - return "768x576"; + return "576p"; case 'q': return "BYPASS"; case 's': // bypass 1 - return "HD_BYPASS"; + return "BYPASS HD"; case 'u': // bypass 2 - return "BYPASS_RGBHV"; + return "BYPASS RGBHV"; // case 12: // return "CUSTOM"; + case 'a': + return "240p"; default: return "NONE"; } @@ -1079,7 +1124,7 @@ const doRestore = (f: File) => { formData.append("gbs-backup.bin", f, f.name); const setAlertBody = () => { const fsize = f.size / 1024; - return '

    Backup File:

    Backup date: ' + return '

    Backup File:

    Backup date: ' + backupDate.toLocaleString() + '

    Size: ' + fsize.toFixed(2)+' kB

    '; }; @@ -1094,15 +1139,12 @@ const doRestore = (f: File) => { () => { return fetch(`http://${GBSControl.serverIP}/data/restore`, { method: "POST", - body: formData, - headers: { - "Content-Type": "application/octet-stream", - } + body: formData }).then((response) => { // backupInput.removeAttribute("disabled"); window.setTimeout(() => { window.location.reload(); - }, 2000) + }, 2000); return response; }); } @@ -1170,40 +1212,40 @@ const doRestore = (f: File) => { * @param {Blob} blob * @param {string} [name="file.txt"] */ -const downloadBlob = (blob: Blob, name = "file.txt") => { - let wnav: any = window.navigator; - // IE10+ - if (wnav && wnav.msSaveOrOpenBlob) { - wnav.msSaveOrOpenBlob(blob, name); - return; - } - /// normal browsers: - // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) - const blobUrl = URL.createObjectURL(blob); - - // Create a link element - const link = document.createElement("a"); - - // Set link's href to point to the Blob URL - link.href = blobUrl; - link.download = name; - - // Append link to the body - document.body.appendChild(link); - - // Dispatch click event on the link - // This is necessary as link.click() does not work on the latest firefox - link.dispatchEvent( - new MouseEvent("click", { - bubbles: true, - cancelable: true, - view: window, - }) - ); - window.URL.revokeObjectURL(blobUrl); - // Remove link from body - document.body.removeChild(link); -}; +// const downloadBlob = (blob: Blob, name = "file.txt") => { +// let wnav: any = window.navigator; +// // IE10+ +// if (wnav && wnav.msSaveOrOpenBlob) { +// wnav.msSaveOrOpenBlob(blob, name); +// return; +// } +// /// normal browsers: +// // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) +// const blobUrl = URL.createObjectURL(blob); + +// // Create a link element +// const link = document.createElement("a"); + +// // Set link's href to point to the Blob URL +// link.href = blobUrl; +// link.download = name; + +// // Append link to the body +// document.body.appendChild(link); + +// // Dispatch click event on the link +// // This is necessary as link.click() does not work on the latest firefox +// link.dispatchEvent( +// new MouseEvent("click", { +// bubbles: true, +// cancelable: true, +// view: window, +// }) +// ); +// window.URL.revokeObjectURL(blobUrl); +// // Remove link from body +// document.body.removeChild(link); +// }; /** WIFI management */ const wifiGetStatus = () => { @@ -1228,7 +1270,7 @@ const wifiGetStatus = () => { }; /** - * Description placeholder + * Does connect to selected WiFi network */ const wifiConnect = () => { const ssid = GBSControl.ui.wifiSSDInput.value; @@ -1248,17 +1290,15 @@ const wifiConnect = () => { body: formData, }).then(() => { gbsAlert( - `GBSControl will restart and will connect to ${ssid}. Please wait some seconds then press OK` - ) - .then(() => { - window.location.href = "http://gbscontrol.local/"; - }) - .catch(() => { }); + `GBSControl will restart and will connect to ${ssid}. Please wait few seconds then press OK` + ).then(() => { + window.location.href = "http://gbscontrol.local/"; + }).catch(() => { }); }); }; /** - * Description placeholder + * Query WiFi networks */ const wifiScanSSID = () => { GBSControl.ui.wifiStaButton.setAttribute("disabled", ""); @@ -1277,37 +1317,37 @@ const wifiScanSSID = () => { fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { method: 'POST' }) - .then((e) => e.text()) - .then((result) => { - GBSControl.scanSSIDDone = false; - return result.length - ? result - .split("\n") - .map((line) => line.split(",")) - .map(([strength, encripted, ssid]) => { - return { strength, encripted, ssid }; - }) - : []; - }) - .then((ssids) => { - return ssids.reduce((acc, ssid) => { - return `${acc} - wifi - ${ssid.ssid} - ${ssid.encripted ? "lock" : "lock_open"} - `; + .then((e) => e.text()) + .then((result) => { + GBSControl.scanSSIDDone = false; + return result.length + ? result + .split("\n") + .map((line) => line.split(",")) + .map(([strength, encripted, ssid]) => { + return { strength, encripted, ssid }; + }) + : []; + }) + .then((ssids) => { + return ssids.reduce((acc, ssid) => { + return `${acc} + wifi + ${ssid.ssid} + ${ssid.encripted ? "lock" : "lock_open"} + `; }, ""); - }) - .then((html) => { - GBSControl.ui.wifiStaButton.removeAttribute("disabled"); + }) + .then((html) => { + GBSControl.ui.wifiStaButton.removeAttribute("disabled"); - if (html.length) { - GBSControl.ui.wifiListTable.innerHTML = html; - GBSControl.ui.wifiList.removeAttribute("hidden"); - GBSControl.ui.wifiConnect.setAttribute("hidden", ""); - } - }); + if (html.length) { + GBSControl.ui.wifiListTable.innerHTML = html; + GBSControl.ui.wifiList.removeAttribute("hidden"); + GBSControl.ui.wifiConnect.setAttribute("hidden", ""); + } + }); }; /** @@ -1344,11 +1384,9 @@ const wifiSetAPMode = () => { }).then((response) => { gbsAlert( "Switching to AP mode. Please connect to gbscontrol SSID and then click OK" - ) - .then(() => { - window.location.href = "http://192.168.4.1"; - }) - .catch(() => { }); + ).then(() => { + window.location.href = "http://192.168.4.1"; + }).catch(() => { }); return response; }); }; diff --git a/public/src/style.css b/public/src/style.css index 2816854f..6063adcf 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -215,7 +215,7 @@ body { margin: 1px; min-width: 40px; padding: 4px; - text-align: right; + text-align: center; vertical-align: top; white-space: initial; } @@ -373,9 +373,9 @@ body { margin: 0; } -.gbs-resolution { +/* .gbs-resolution { display: flex; -} +} */ .gbs-scroll > section[name="presets"] > fieldset.presets { flex-grow: 1; @@ -584,6 +584,10 @@ section[name="alert"] { display: flex; } +.gbs-margin__bottom--8 { + margin-bottom: 8px; +} + .gbs-margin__bottom--16 { margin-bottom: 16px; } diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index 6d2fa79d..aabdb266 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -32,7 +32,7 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen display->display(); uint8_t videoMode = getVideoMode(); // OutputResolution preset = OutputBypass; - OutputResolution preset = OutputNone; + OutputResolution preset = Output240p; switch (item->tag) { case MT_1280x960: preset = Output960p; @@ -298,10 +298,12 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav } else if (rto->resolutionID == Output720p) { display.drawString(0, 0, "720x480"); // } else if (rto->presetID == 0x14) { - } else if (rto->resolutionID == Output576p) { + } else if (rto->resolutionID == Output576p50) { display.drawString(0, 0, "768x576"); // ??? 720x576 ??? - } else { + } else if (rto->resolutionID == OutputBypass) { // OutputBypass display.drawString(0, 0, "bypass"); + } else { + display.drawString(0, 0, "240p"); } display.drawString(0, 20, String(ofr, 5) + "Hz"); diff --git a/src/framesync.cpp b/src/framesync.cpp index 636e2a38..07276d77 100644 --- a/src/framesync.cpp +++ b/src/framesync.cpp @@ -3,7 +3,7 @@ # File: framesync.cpp # # File Created: Sunday, 5th May 2024 12:52:08 pm # # Author: # -# Last Modified: Sunday, 12th May 2024 4:27:51 pm # +# Last Modified: Thursday, 30th May 2024 11:33:00 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # diff --git a/src/framesync.h b/src/framesync.h index 9c02df90..0872bf44 100644 --- a/src/framesync.h +++ b/src/framesync.h @@ -133,7 +133,7 @@ class FrameSyncManager static void cleanup() { - _WSN(F("FrameSyncManager::cleanup(), resetting video frequency")); + _WSN(F("FrameSyncManager::cleanup(), reset video frequency")); syncLastCorrection = 0; // the important bit syncLockReady = 0; diff --git a/src/main.cpp b/src/main.cpp index cd72ca75..a8fb4dba 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Monday, 27th May 2024 12:29:27 pm # +# Last Modified: Thursday, 30th May 2024 12:59:29 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -100,7 +100,6 @@ void setup() wifiInit(); webSocket.begin(); // Websocket for interaction serverInit(); - yield(); #ifdef HAVE_PINGER_LIBRARY // pinger library @@ -148,7 +147,7 @@ void setup() rto->phaseSP = 16; rto->failRetryAttempts = 0; // rto->presetID = OutputBypass; - rto->resolutionID = OutputNone; + rto->resolutionID = Output240p; rto->isCustomPreset = false; rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; @@ -317,6 +316,7 @@ void setup() GBS::STATUS_00::read(); // delay 2 of 2 + // ? WHY? initDelay = millis(); while (millis() - initDelay < 1000) { wifiLoop(0); @@ -400,17 +400,17 @@ void setup() // FIXME double reset? // setResetParameters(); - delay(4); // help wifi (presets are unloaded now) + // delay(4); // help wifi (presets are unloaded now) wifiLoop(1); - delay(4); + // delay(4); // startup reliability test routine /*rto->videoStandardInput = 1; - writeProgramArrayNew(ntsc_240p, 0); - doPostPresetLoadSteps(); - int i = 100000; - while (i-- > 0) loop(); - ESP.restart();*/ + writeProgramArrayNew(ntsc_240p, 0); + doPostPresetLoadSteps(); + int i = 100000; + while (i-- > 0) loop(); + ESP.restart();*/ // rto->syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here // inputAndSyncDetect(); @@ -437,7 +437,8 @@ void setup() void loop() { static unsigned long lastTimeSyncWatcher = millis(); - static unsigned long lastTimeSourceCheck = 500; // 500 to start right away (after setup it will be 2790ms when we get here) + // 500 to start right away (after setup it will be 2790ms when we get here) + static unsigned long lastTimeSourceCheck = 500; static unsigned long lastTimeInterruptClear = millis(); menuLoop(); @@ -445,13 +446,17 @@ void loop() // Serial takes precedence handleSerialCommand(); - + yield(); // handle user commands handleUserCommand(); + yield(); // run FrameTimeLock if enabled - if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && - rto->syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) { + if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false + && rto->autoBestHtotalEnabled && rto->syncWatcherEnabled + && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval + && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) + { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); @@ -504,12 +509,18 @@ void loop() // } // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes - if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true && (millis() - lastTimeSyncWatcher) > 20) { + if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true + && (millis() - lastTimeSyncWatcher) > 20) + { runSyncWatcher(); lastTimeSyncWatcher = millis(); // auto adc gain - if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected && rto->videoStandardInput > 0 && rto->clampPositionIsSet && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 && rto->boardHasPower) { + if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected + && rto->videoStandardInput > 0 && rto->clampPositionIsSet + && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 + && rto->boardHasPower) + { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { @@ -693,9 +704,14 @@ void loop() pingLastTime = millis(); } } -#endif +#endif // HAVE_PINGER_LIBRARY + // web client handler server.handleClient(); // websocket event handler webSocket.loop(); + // handle ArduinoIDE + if (rto->allowUpdatesOTA) { + ArduinoOTA.handle(); + } } diff --git a/src/menu.cpp b/src/menu.cpp index 1318a91a..83a6903f 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Monday, 27th May 2024 11:00:08 am # +# Last Modified: Wednesday, 29th May 2024 5:12:46 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -383,7 +383,7 @@ void settingsMenuOLED() if (oled_menuItem == 2) { if (oled_pointer_count == 0 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'A'; + // uopt->presetSlot = 'A'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -409,7 +409,7 @@ void settingsMenuOLED() } if (oled_pointer_count == 1 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'B'; + // uopt->presetSlot = 'B'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -435,7 +435,7 @@ void settingsMenuOLED() } if (oled_pointer_count == 2 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'C'; + // uopt->presetSlot = 'C'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -461,7 +461,7 @@ void settingsMenuOLED() } if (oled_pointer_count == 3 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'D'; + // uopt->presetSlot = 'D'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -487,7 +487,7 @@ void settingsMenuOLED() } if (oled_pointer_count == 4 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'E'; + // uopt->presetSlot = 'E'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -513,7 +513,7 @@ void settingsMenuOLED() } if (oled_pointer_count == 5 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'F'; + // uopt->presetSlot = 'F'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -539,7 +539,7 @@ void settingsMenuOLED() } if (oled_pointer_count == 6 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->presetSlot = 'G'; + // uopt->presetSlot = 'G'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; saveUserPrefs(); @@ -638,7 +638,7 @@ void settingsMenuOLED() float ofr = getOutputFrameRate(); uint8_t currentInput = GBS::ADC_INPUT_SEL::read(); // rto->presetID = GBS::GBS_PRESET_ID::read(); - rto->resolutionID = GBS::GBS_PRESET_ID::read(); + rto->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); oled_page = 1; oled_pointer_count = 0; @@ -668,12 +668,12 @@ void settingsMenuOLED() } else if (rto->resolutionID == Output480p) { display.drawString(0, 0, "720x480"); // } else if (rto->presetID == 0x14) { - } else if (rto->resolutionID == Output576p) { + } else if (rto->resolutionID == Output576p50) { display.drawString(0, 0, "768x576"); } else if (rto->resolutionID == OutputBypass) { // OutputBypass display.drawString(0, 0, "bypass"); } else { - display.drawString(0, 0, "none/240p"); + display.drawString(0, 0, "240p"); } display.drawString(0, 20, String(ofr, 5) + "Hz"); diff --git a/src/options.h b/src/options.h index ba67e5a5..73450c3b 100644 --- a/src/options.h +++ b/src/options.h @@ -79,32 +79,31 @@ // Output resolution requested by user, *given to* applyPresets(). enum OutputResolution : char { - // RESOLUTION | FREQ | U.CMD. | OLD ID | - OutputNone = 'a', // N/A is this 240p ? - Output960p = 'c', // SXGA- | 1280x960 | 60Hz | 'f' | 0x01 | - Output960p50 = 'd', // ? SXGA- | 1280x960 | 50Hz | | 0x11 | - Output1024p = 'e', // SXGA | 1280x1024 | 60Hz | 'p' | 0x02 | - Output1024p50 = 'f', // ? SXGA | 1280x1024 | 50Hz | | 0x12 | - Output720p = 'g', // HD | 1280×720 | 60Hz | 'g' | 0x03 | - Output720p50 = 'h', // ? HD | 1280×720 | 50Hz | | 0x13 | - Output480p = 'i', // SD | 720×480 | 60Hz | 'h' | 0x04 | - Output480p50 = 'j', // ? SD | 720×480 | 50Hz | | - | - Output1080p = 'k', // FHD | 1920×1080 | 60Hz | 's' | 0x05 | - Output1080p50 = 'l', // ? FHD | 1920×1080 | 50Hz | | 0x15 | - Output15kHz = 'm', // 15kHz scale-down | 60Hz | 'L' | 0x06 | - Output15kHz50 = 'n', // ? 15kHz scale-down | 50Hz | | 0x16 | - Output576p = 'o', // PAL | 768×576 | 60Hz | | 0x14 | == 480p ? - Output576p50 = 'p', // ? PAL | 768×576 | 50Hz | | | - OutputBypass = 'q', // passthrough 0 / bypass 0 | 'K' | | - PresetHdBypass = 's', // passthrough 1 / bypass 1 - PresetBypassRGBHV = 'u', // passthrough 2 / bypass 2 + // RESOLUTION | FREQ | U.CMD. | OLD ID | + Output240p = 'a', // 320x240 (512/640?)| ? | 'j' | 0 | + Output960p = 'c', // SXGA- | 1280x960 | 60Hz | 'f' | 0x01 | + Output960p50 = 'd', // ? SXGA- | 1280x960 | 50Hz | | 0x11 | + Output1024p = 'e', // SXGA | 1280x1024 | 60Hz | 'p' | 0x02 | + Output1024p50 = 'f', // ? SXGA | 1280x1024 | 50Hz | | 0x12 | + Output720p = 'g', // HD | 1280×720 | 60Hz | 'g' | 0x03 | + Output720p50 = 'h', // ? HD | 1280×720 | 50Hz | | 0x13 | + Output480p = 'i', // SD | 720×480 | 60Hz | 'h' | 0x04 | + Output480p50 = 'j', // ? SD | 720×480 | 50Hz | | - | + Output1080p = 'k', // FHD | 1920×1080 | 60Hz | 's' | 0x05 | + Output1080p50 = 'l', // ? FHD | 1920×1080 | 50Hz | | 0x15 | + Output15kHz = 'm', // 15kHz scale-down | 60Hz | 'L' | 0x06 | + Output15kHz50 = 'n', // ? 15kHz scale-down | 50Hz | | 0x16 | + Output576p50 = 'p', // PAL | 768×576 | 50Hz | 'k' | 0x14 | + OutputBypass = 'q', // passthrough 0 / bypass 0 | 'K' | | + PresetHdBypass = 's', // passthrough 1 / bypass 1 + PresetBypassRGBHV = 'u', // passthrough 2 / bypass 2 // It suppose to be that the output custom sets automatically in case // if user does scale the output video signal. However we operate with // registers directly (ex: video->scaleHorizontal()) and there is no connection // between output image scale (ex. GBS::VDS_HSCALE) and resolution // (however it must be logically, so the custom scale changes output image size) // hence the following is disabled - // OutputCustom = 'w', // ? + // OutputCustom = 'w' }; // userOptions holds user preferences / customizations @@ -114,7 +113,7 @@ struct userOptions // 6 - downscale, 10 - bypass // OutputResolution presetPreference; - // current/active slot (see: slotIndexMap[]) + // current/active slot uint8_t presetSlot; uint8_t enableFrameTimeLock; uint8_t frameTimeLockMethod; @@ -256,7 +255,7 @@ const char * const preset_names[] PROGMEM = { const char preferencesFile[] PROGMEM = "/preferencesv2.txt"; const char systemInfo[] PROGMEM = "h:%4u v:%4u PLL:%01u A:%02x%02x%02x S:%02x.%02x.%02x %c%c%c%c I:%02x D:%04x m:%hu ht:%4d vt:%4d hpw:%4d u:%3x s:%2x S:%2d W:%2d\n"; -const char commandDescr[] PROGMEM = "\n> %s command: %c (0x%02X) slotID: %c (0x%02X), resolutionID: %c (0x%02X)\n\n"; +const char commandDescr[] PROGMEM = "\n> %s command: %c (0x%02X) slotID: %d, resolutionID: %c (0x%02X)\n\n"; #ifdef THIS_DEVICE_MASTER const char ap_ssid[] PROGMEM = "gbscontrol"; diff --git a/src/presets.cpp b/src/presets.cpp index ca4b6122..e457f937 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Tuesday, 28th May 2024 12:34:22 pm # +# Last Modified: Thursday, 30th May 2024 12:42:51 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -19,9 +19,9 @@ void loadDefaultUserOptions() { // uopt->presetPreference = Output960P; // #1 - rto->resolutionID = OutputNone; + rto->resolutionID = Output240p; uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! - uopt->presetSlot = 'A'; // + uopt->presetSlot = 0; // uopt->frameTimeLockMethod = 0; // compatibility with more displays uopt->enableAutoGain = 0; uopt->wantScanlines = 0; @@ -62,7 +62,7 @@ void loadPresetMdSection() } /** - * @brief Set the Reset Parameters object + * @brief reset runtime parameters and some PLC registers * */ void setResetParameters() @@ -191,7 +191,7 @@ void setResetParameters() void doPostPresetLoadSteps() { // unsigned long postLoadTimer = millis(); - + delay(10); // adco->r_gain gets applied if uopt->enableAutoGain is set. if (uopt->enableAutoGain) { @@ -223,7 +223,10 @@ void doPostPresetLoadSteps() } // set output resolution // @sk: override resolution via user preset - if (rto->resolutionID == OutputNone || rto->resolutionID == OutputBypass || rto->resolutionID == PresetHdBypass || rto->resolutionID == PresetBypassRGBHV) + if (/* rto->resolutionID == Output240p + || */rto->resolutionID == OutputBypass + || rto->resolutionID == PresetHdBypass + || rto->resolutionID == PresetBypassRGBHV) { rto->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); } @@ -591,28 +594,28 @@ void doPostPresetLoadSteps() { // out 1080p GBS::IF_HB_ST2::write(0x4C0); // 1_18 GBS::IF_HB_SP2::write(0xC8); // 1_1a - // } else if (rto->presetID == 0x13) { // out 720p } + // } else if (rto->presetID == 0x13) { // out 720p else if (rto->resolutionID == Output720p50) { // out 720p GBS::IF_HB_ST2::write(0x478); // 1_18 GBS::IF_HB_SP2::write(0x88); // 1_1a - // } else if (rto->presetID == 0x12) { // out x1024 } + // } else if (rto->presetID == 0x12) { // out x1024 else if (rto->resolutionID == Output1024p50) { // out x1024 // VDS_VB_SP -= 12 used to shift pic up, but seems not necessary anymore // GBS::VDS_VB_SP::write(GBS::VDS_VB_SP::read() - 12); GBS::IF_HB_ST2::write(0x454); // 1_18 GBS::IF_HB_SP2::write(0x88); // 1_1a - // } else if (rto->presetID == 0x11) { // out x960 } + // } else if (rto->presetID == 0x11) { // out x960 else if (rto->resolutionID == Output960p50) { // out x960 GBS::IF_HB_ST2::write(0x454); // 1_18 GBS::IF_HB_SP2::write(0x88); // 1_1a - // } else if (rto->presetID == 0x14) { // out x576 } + // } else if (rto->presetID == 0x14) { // out x576 else if (rto->resolutionID == Output576p50) { // out x576 GBS::IF_HB_ST2::write(0x478); // 1_18 @@ -797,10 +800,12 @@ void doPostPresetLoadSteps() GBS::ADC_BOFCTRL::write(adco->b_off); } - _WSF(PSTR("ADC offset: R: 0x%04X G: 0x%04X B: 0x%04X\n"), - GBS::ADC_ROFCTRL::read(), - GBS::ADC_GOFCTRL::read(), - GBS::ADC_BOFCTRL::read()); + _WSF( + PSTR("ADC offset: R: 0x%04X G: 0x%04X B: 0x%04X\n"), + GBS::ADC_ROFCTRL::read(), + GBS::ADC_GOFCTRL::read(), + GBS::ADC_BOFCTRL::read() + ); GBS::IF_AUTO_OFST_U_RANGE::write(0); // 0 seems to be full range, else 1 to 15 GBS::IF_AUTO_OFST_V_RANGE::write(0); // 0 seems to be full range, else 1 to 15 @@ -1183,13 +1188,15 @@ void doPostPresetLoadSteps() else if (rto->resolutionID == Output480p) _WS(F("720x480")); // else if (rto->presetID == 0x14) - else if (rto->resolutionID == Output576p) + else if (rto->resolutionID == Output576p50) _WS(F("720x576")); // else else if (rto->resolutionID == OutputBypass) _WS(F("bypass")); + else if (rto->resolutionID == Output240p) + _WS(F("240p")); else - _WS(F("none/240p")); + _WS(F("UNKNOWN")); if (rto->outModeHdBypass) { @@ -1259,10 +1266,12 @@ void applyPresets(uint8_t videoMode) // TODO replace videoMode with VideoStandardInput enum if (!rto->boardHasPower) { - _WSN(F("GBS board not responding!")); + _WSN(F("(!) GBS board not responding!")); return; } + delay(10); + // if RGBHV scaling and invoked through web ui or custom preset // need to know syncTypeCsync if (videoMode == 14) @@ -1306,14 +1315,14 @@ void applyPresets(uint8_t videoMode) // (else the command will instantly disable debug view) // if (rto->presetID != OutputCustom) { // if (rto->resolutionID != OutputCustom) { - serialCommand = 'D'; // debug view + // serialCommand = 'D'; // debug view // } } if (videoMode == 0) { // Unknown - _WSN(F("Source format not properly recognized, using active resolution")); + _WSF(PSTR("(!) source format not properly recognized, resolution: %c\n"), rto->resolutionID); videoMode = 3; // in case of success: override to 480p60 GBS::ADC_INPUT_SEL::write(1); // RGB delay(100); @@ -1349,16 +1358,17 @@ void applyPresets(uint8_t videoMode) // call setResetParameters() again. But if we don't call // setResetParameters() here, the second call will never happen. setResetParameters(); + _DBGN(F("reset runtime parameters while applying preset")); // Deselect the output resolution in the web UI. We cannot call // doPostPresetLoadSteps() to select the right resolution, since // it *enables* the output (showing a green screen) even if // previously disabled, and we want to *disable* it. - // rto->presetID = OutputNone; + // rto->presetID = Output240p; // // @sk: supressed for now // - // rto->resolutionID = OutputNone; + // rto->resolutionID = Output240p; return; } } @@ -1370,15 +1380,17 @@ void applyPresets(uint8_t videoMode) // if (rto->resolutionID != OutputCustom) { // != custom. custom saved as pal preset has ntsc customization if (videoMode == 2 || videoMode == 4) { - _WSN(F("PAL@50 to 60Hz")); + _DBGN(F("video mode #2 or #4, set PAL@50 to 60Hz")); rto->presetIsPalForce60 = 1; } if (videoMode == 2) { + _DBGN(F("video mode #2, switched to #1")); videoMode = 1; } if (videoMode == 4) { + _DBGN(F("video mode #4, switched to #3")); videoMode = 3; } // } @@ -1394,7 +1406,7 @@ void applyPresets(uint8_t videoMode) - Registers: - Written by applyPresets() -> writeProgramArrayNew(), - loadHdBypassSection(), etc. + loadHdBypassSection(), etc. - GBS_PRESET_ID @ S1_2B[0:6] - GBS_PRESET_CUSTOM @ S1_2B[7] - uopt is source of truth, rto is derived cached state??? @@ -1448,7 +1460,7 @@ void applyPresets(uint8_t videoMode) // Setup video mode passthrough. setOutModeHdBypass(true); - _DBGN(F("setting OutputHDBypass mode")); + _DBGN(F("OutputHDBypass mode active")); return true; } if (rawPresetId == PresetBypassRGBHV) @@ -1462,7 +1474,7 @@ void applyPresets(uint8_t videoMode) { // NTSC input // if (uopt->presetPreference == 0) { - if (rto->resolutionID == OutputNone) + if (rto->resolutionID == Output240p) { writeProgramArrayNew(ntsc_240p, false); _WSN(F("ntsc_240p is now active")); @@ -1482,16 +1494,17 @@ void applyPresets(uint8_t videoMode) #if defined(ESP8266) // else if (uopt->presetPreference == OutputCustomized) { - if (rto->resolutionID != OutputNone + else if (rto->resolutionID != Output240p && rto->resolutionID != OutputBypass && rto->resolutionID != PresetHdBypass && rto->resolutionID != PresetBypassRGBHV) { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); - _WSF(PSTR("Bypass* preset: %d is now active\n"), preset); + _WSF(PSTR("%d preset is now active\n"), preset); if (applySavedBypassPreset()) { + _DBGN(F("Bypass preset applied")); return; } } @@ -1529,7 +1542,7 @@ void applyPresets(uint8_t videoMode) // PAL input // if (uopt->presetPreference == 0) { - if (rto->resolutionID == OutputNone) + if (rto->resolutionID == Output240p) { if (uopt->matchPresetSource) { @@ -1543,9 +1556,9 @@ void applyPresets(uint8_t videoMode) } // } else if (uopt->presetPreference == 1) { } - else if (rto->resolutionID == Output576p) + else if (rto->resolutionID == Output576p50) { - writeProgramArrayNew(pal_768x576, false); + writeProgramArrayNew(pal_768x576, false); // 4:3 square pixel _WSN(F("pal_768x576 is now active")); // } else if (uopt->presetPreference == 3) { } @@ -1558,13 +1571,17 @@ void applyPresets(uint8_t videoMode) #if defined(ESP8266) // else if (uopt->presetPreference == OutputCustomized) { // else if (rto->resolutionID == OutputCustom) - else if (rto->resolutionID != OutputNone && rto->resolutionID != OutputBypass && rto->resolutionID != PresetHdBypass && rto->resolutionID != PresetBypassRGBHV) + else if (rto->resolutionID != Output240p + && rto->resolutionID != OutputBypass + && rto->resolutionID != PresetHdBypass + && rto->resolutionID != PresetBypassRGBHV) { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); - _WSF(PSTR("Bypass* preset: %d is now active\n"), preset); + _WSF(PSTR("%d preset is now active\n"), preset); if (applySavedBypassPreset()) { + _DBGN(F("Bypass preset applied")); return; } } @@ -1574,7 +1591,7 @@ void applyPresets(uint8_t videoMode) writeProgramArrayNew(pal_1280x1024, false); _WSN(F("pal_1280x1024 is now active")); } -#endif // defined(ESP8266) +#endif // defined(ESP8266) // else if (uopt->presetPreference == 5) { else if (rto->resolutionID == Output1080p) @@ -1613,6 +1630,7 @@ void applyPresets(uint8_t videoMode) } rto->videoStandardInput = videoMode; + _DBGF(PSTR("video mode set: %d\n"), videoMode); if (waitExtra) { // extra time needed for digital resets, so that autobesthtotal works first attempt @@ -1650,7 +1668,7 @@ const uint8_t *loadPresetFromLFS(byte forVideoMode) { static uint8_t preset[432]; String s = ""; - char slot = '0'; + uint8_t slot = 0; char buffer[32] = ""; fs::File f; @@ -1663,14 +1681,14 @@ const uint8_t *loadPresetFromLFS(byte forVideoMode) // result[1] = f.read(); // result[2] = f.read(); - slot = static_cast(f.read()); + slot = static_cast(f.read()); f.close(); - _WSF(PSTR("current slot: %c (%#02x)\n"), slot, slot); + _WSF(PSTR("current slot: %d (%#02x)\n"), slot, slot); } else { // file not found, we don't know what preset to load - _WSN(F("please select a preset slot first!")); // say "slot" here to make people save usersettings + _WSN(F("please select a slot first!")); // say "slot" here to make people save usersettings if (forVideoMode == 2 || forVideoMode == 4) return pal_240p; else @@ -1683,55 +1701,55 @@ const uint8_t *loadPresetFromLFS(byte forVideoMode) { // strcpy(buffer, PSTR("/preset_ntsc.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc.%d"), slot); } else if (forVideoMode == 2) { // strcpy(buffer, PSTR("/preset_pal.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_pal.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_pal.%d"), slot); } else if (forVideoMode == 3) { // strcpy(buffer, PSTR("/preset_ntsc_480p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc_480p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), slot); } else if (forVideoMode == 4) { // strcpy(buffer, PSTR("/preset_pal_576p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_pal_576p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_pal_576p.%d"), slot); } else if (forVideoMode == 5) { // strcpy(buffer, PSTR("/preset_ntsc_720p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc_720p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), slot); } else if (forVideoMode == 6) { // strcpy(buffer, PSTR("/preset_ntsc_1080p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc_1080p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), slot); } else if (forVideoMode == 8) { // strcpy(buffer, PSTR("/preset_medium_res.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_medium_res.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_medium_res.%d"), slot); } else if (forVideoMode == 14) { // strcpy(buffer, PSTR("/preset_vga_upscale.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_vga_upscale.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_vga_upscale.%d"), slot); } else if (forVideoMode == 0) { // strcpy(buffer, PSTR("/preset_unknown.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_unknown.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_unknown.%d"), slot); } // reading preset data @@ -1776,6 +1794,7 @@ void savePresetToFS() { uint8_t readout = 0; fs::File f; + uint8_t i = 0; char slot = '0'; char buffer[32] = ""; @@ -1803,55 +1822,55 @@ void savePresetToFS() { // strcpy(buffer, PSTR("/preset_ntsc.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc.%d"), slot); } else if (rto->videoStandardInput == 2) { // strcpy(buffer, PSTR("/preset_pal.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_pal.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_pal.%d"), slot); } else if (rto->videoStandardInput == 3) { // strcpy(buffer, PSTR("/preset_ntsc_480p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc_480p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), slot); } else if (rto->videoStandardInput == 4) { // strcpy(buffer, PSTR("/preset_pal_576p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_pal_576p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_pal_576p.%d"), slot); } else if (rto->videoStandardInput == 5) { // strcpy(buffer, PSTR("/preset_ntsc_720p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc_720p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), slot); } else if (rto->videoStandardInput == 6) { // strcpy(buffer, PSTR("/preset_ntsc_1080p.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_ntsc_1080p.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), slot); } else if (rto->videoStandardInput == 8) { // strcpy(buffer, PSTR("/preset_medium_res.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_medium_res.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_medium_res.%d"), slot); } else if (rto->videoStandardInput == 14) { // strcpy(buffer, PSTR("/preset_vga_upscale.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_vga_upscale.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_vga_upscale.%d"), slot); } else if (rto->videoStandardInput == 0) { // strcpy(buffer, PSTR("/preset_unknown.")); // strcat(buffer, &slot); - sprintf(buffer, PSTR("/preset_unknown.%02x"), static_cast(slot)); + sprintf(buffer, PSTR("/preset_unknown.%d"), slot); } // open preset file @@ -1862,7 +1881,7 @@ void savePresetToFS() } else { - _WSF(PSTR("preset data saved into: %s (slot: %c)\n"), buffer, slot); + _WSF(PSTR("preset data saved into: %s (slot: %d)\n"), buffer, slot); GBS::GBS_PRESET_CUSTOM::write(1); // use one reserved bit to mark this as a custom preset // don't store scanlines @@ -1879,7 +1898,7 @@ void savePresetToFS() } } - for (int i = 0; i <= 5; i++) + while(i <= 5) { writeOneByte(0xF0, i); switch (i) @@ -1934,11 +1953,12 @@ void savePresetToFS() } break; } + delay(1); + i++; } - // EOF symbol + // ? EOF symbol f.println("};"); f.close(); - _WSF(PSTR("preset saved as: %s\n"), buffer); } } @@ -1948,7 +1968,9 @@ void savePresetToFS() */ void saveUserPrefs() { + delay(10); savePresetToFS(); + delay(10); fs::File f = LittleFS.open(FPSTR(preferencesFile), "w"); if (!f) diff --git a/src/slot.h b/src/slot.h index e5fbea82..93015a24 100644 --- a/src/slot.h +++ b/src/slot.h @@ -4,7 +4,6 @@ // SLOTS const char slotsFile[] PROGMEM = "/slots.bin"; // the file where to store slots metadata const char emptySlotName[] PROGMEM = "Empty "; -const char emptySlotLine[] PROGMEM = " "; typedef struct { diff --git a/src/video.cpp b/src/video.cpp index 6ef1445d..df5cad3e 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Monday, 27th May 2024 1:19:57 pm # +# Last Modified: Thursday, 30th May 2024 12:42:51 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -1732,7 +1732,7 @@ void togglePhaseAdjustUnits() void bypassModeSwitch_RGBHV() { if (!rto->boardHasPower) { - _WSN(F("GBS board not responding!")); + _WSN(F("(!) GBS board not responding!")); return; } @@ -2568,6 +2568,7 @@ void goLowPowerWithInputDetection() GBS::DAC_RGBS_PWDNZ::write(0); // direct disableDAC() // zeroAll(); setResetParameters(); // includes rto->videoStandardInput = 0 + _DBGN(F("reset runtime parameters while going LowPower")); prepareSyncProcessor(); delay(100); rto->isInLowPowerMode = true; @@ -4178,16 +4179,17 @@ void runSyncWatcher() // if format changed to valid, potentially new video mode if (((detectedVideoMode != 0 && detectedVideoMode != rto->videoStandardInput) || (detectedVideoMode != 0 && rto->videoStandardInput == 0)) && - rto->videoStandardInput != 15) { + rto->videoStandardInput != 15) + { // before thoroughly checking for a mode change, watch format via newVideoModeCounter if (newVideoModeCounter < 255) { newVideoModeCounter++; rto->continousStableCounter = 0; // usually already 0, but occasionally not if (newVideoModeCounter > 1) { // help debug a few commits worth - if (newVideoModeCounter == 2) { - _WSN(); - } - _WS(newVideoModeCounter); + // if (newVideoModeCounter == 2) { + // _WSN(); + // } + _WSF(PSTR("video mode counter: %d\n"), newVideoModeCounter); } if (newVideoModeCounter == 3) { freezeVideo(); @@ -4504,8 +4506,8 @@ void runSyncWatcher() // todo: this hack is hard to understand when looking at applypreset and mode is suddenly 1,2 or 3 // if (uopt->presetPreference == 2) { // if (rto->resolutionID == OutputCustom) { - if (rto->resolutionID != OutputNone - && rto->resolutionID != OutputBypass + if (rto->resolutionID != Output240p + && rto->resolutionID != OutputBypass && rto->resolutionID != PresetHdBypass && rto->resolutionID != PresetBypassRGBHV) { // custom preset defined, try to load (set mode = 14 here early) @@ -4529,10 +4531,8 @@ void runSyncWatcher() } // if (uopt->presetPreference == 10) { - // if (rto->presetID == OutputBypass) { if (rto->resolutionID == OutputBypass) { // uopt->presetPreference = Output960P; // fix presetPreference which can be "bypass" - // rto->presetID = Output960p; // fix presetPreference which can be "bypass" rto->resolutionID = Output960p; // fix presetPreference which can be "bypass" } @@ -4647,7 +4647,6 @@ void runSyncWatcher() } // if (uopt->presetPreference == 10) { - // if (rto->presetID == OutputBypass) { if (rto->resolutionID == OutputBypass) { // uopt->presetPreference = Output960P; // fix presetPreference which can be "bypass" rto->resolutionID = Output960p; // fix presetPreference which can be "bypass" @@ -4814,6 +4813,7 @@ void runSyncWatcher() if (RGBHVNoSyncCounter > limitNoSync) { RGBHVNoSyncCounter = 0; + _DBGN(F("reset runtime parameters while running syncWatcher")); setResetParameters(); prepareSyncProcessor(); resetSyncProcessor(); // todo: fix MD being stuck in last mode when sync disappears @@ -4959,6 +4959,7 @@ void runSyncWatcher() GBS::DAC_RGBS_PWDNZ::write(0); // 0 = disable DAC rto->noSyncCounter = 0; _WSN(); + yield(); goLowPowerWithInputDetection(); // does not further nest, so it can be called here // sets reset parameters } } @@ -5223,6 +5224,7 @@ uint8_t inputAndSyncDetect() // reset to base settings, then go to low power GBS::SP_SOG_MODE::write(1); goLowPowerWithInputDetection(); + delay(10); rto->isInLowPowerMode = true; } } diff --git a/src/wifiman.cpp b/src/wifiman.cpp index 3866eeb8..cb659230 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Monday, 27th May 2024 11:09:31 am # +# Last Modified: Thursday, 30th May 2024 12:54:36 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -95,11 +95,13 @@ void updateWebSocketData() if (rto->webServerEnabled && rto->webServerStarted) { if (webSocket.connectedClients() > 0) { - constexpr size_t MESSAGE_LEN = 7; + constexpr size_t MESSAGE_LEN = 8; char toSend[MESSAGE_LEN] = ""; toSend[0] = '#'; // makeshift ping in slot 0 - - toSend[1] = static_cast(rto->resolutionID); + // slotID is INTEGER + toSend[1] = uopt->presetSlot + '0'; + // TODO: resolutionID must be INTEGER too + toSend[2] = static_cast(rto->resolutionID); // @sk: left here for reference // switch (rto->presetID) { // case 0x11: // Output960p @@ -137,13 +139,12 @@ void updateWebSocketData() // break; // } - toSend[2] = static_cast(uopt->presetSlot); - // '@' = 0x40, used for "byte is present" detection; 0x80 not in ascii table toSend[3] = '@'; toSend[4] = '@'; toSend[5] = '@'; toSend[6] = '0'; + toSend[7] = '0'; if (uopt->enableAutoGain) { toSend[3] |= (1 << 0); @@ -208,6 +209,11 @@ void updateWebSocketData() toSend[6] |= (1 << 3); } + // system tab controls + if(rto->allowUpdatesOTA) { + toSend[7] |= (1 << 0); + } + webSocket.broadcastTXT(toSend, MESSAGE_LEN); } } @@ -350,9 +356,6 @@ void wifiLoop(bool instant) { } _lastTimePing = millis(); } - if (rto->allowUpdatesOTA) { - ArduinoOTA.handle(); - } } } diff --git a/src/wifiman.h b/src/wifiman.h index 4346d9c5..c3dc2544 100644 --- a/src/wifiman.h +++ b/src/wifiman.h @@ -3,7 +3,7 @@ # File: wifiman.h # # File Created: Friday, 19th April 2024 2:25:42 pm # # Author: Sergey Ko # -# Last Modified: Friday, 24th May 2024 9:54:01 pm # +# Last Modified: Tuesday, 28th May 2024 4:42:17 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -26,9 +26,9 @@ extern DNSServer dnsServer; extern struct runTimeOptions *rto; // HOWTO: Rely on the previously implemented logic -// __________ _____________ __________________ yes _____________________ -// | if ssid | -> | connect AP | -> | connect failed? | ----> | fallback to APmode | -// ---------- ------------- ------------------ --------------------- +// __________ _____________ __________________ yes _____________________ +// | if ssid | -> | connect AP | -> | connect failed? | ---> | fallback to APmode | +// ---------- ------------- ------------------ --------------------- // ^ _________________ |_____________ // | | yes v no | // | no ____________________ _______________ | diff --git a/src/wserver.cpp b/src/wserver.cpp index c28d35db..c7e85efe 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Tuesday, 28th May 2024 1:36:47 pm # +# Last Modified: Thursday, 30th May 2024 12:59:27 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -58,6 +58,9 @@ void serverInit() server.on("/wifi/ap", HTTP_POST, serverWiFiAP); server.on("/wifi/rst", HTTP_POST, serverWiFiReset); + // in case if something went wrong last time + LittleFS.remove(FPSTR(backupFile)); + server.begin(); // Webserver for the site } @@ -69,7 +72,7 @@ void serverHome() { ASSERT_LOMEM_RETURN(); server.sendHeader(F("Content-Encoding"), F("gzip")); - fs::File index = LittleFS.open(String(indexPage), "r"); + fs::File index = LittleFS.open(FPSTR(indexPage), "r"); if (index) { server.streamFile(index, mimeTextHtml); @@ -141,9 +144,9 @@ void serverSlots() String slot_name = String(emptySlotName); for (int i = 0; i < SLOTS_TOTAL; i++) { - slotsObject.slot[i].slot = i; + // slotsObject.slot[i].slot = i; // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].resolutionID = OutputNone; + slotsObject.slot[i].resolutionID = Output240p; slotsObject.slot[i].scanlines = 0; slotsObject.slot[i].scanlinesStrength = 0; slotsObject.slot[i].wantVdsLineFilter = false; @@ -160,7 +163,7 @@ void serverSlots() } } - server.streamFile(slotsBinaryFile, String(mimeOctetStream)); + server.streamFile(slotsBinaryFile, mimeOctetStream); slotsBinaryFile.close(); return; stream_slots_bin_failed: @@ -180,12 +183,12 @@ void serverSlotSet() if (server.args() > 0) { SlotMetaArray slotsObject; - // TODO here must be the slot index (1,2,3,4,...) - const String slotParamValue = server.arg(0); - uint8_t slotIndex = lowByte(slotParamValue.toInt()); + // const String slotParamValue = server.arg(String(F("index"))).toInt(); + uint8_t slotIndex = lowByte(server.arg(String(F("index"))).toInt()); // char slotValue[2]; // slotParamValue.toCharArray(slotValue, sizeof(slotValue)); - uopt->presetSlot = static_cast(slotParamValue.charAt(0)); + // uopt->presetSlot = static_cast(slotParamValue.charAt(0)); + uopt->presetSlot = slotIndex; fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); if (slotsBinaryFile) { @@ -207,23 +210,10 @@ void serverSlotSet() //// uopt->presetPreference = OutputCustomized; // rto->presetID = OutputCustom; // saveUserPrefs(); // user prefs being saved in userCommand handler - _WSF(PSTR("slot change success: %c\n"), slotParamValue.charAt(0)); + _WSF(PSTR("slot change success: %d\n"), uopt->presetSlot); server.send(200, mimeAppJson, F("true")); // begin loading new preset on the next loop - // userCommand = '3'; - // TODO: unknown logic - if (rto->videoStandardInput == 14) - { - // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; - } - else - { - // also does loadPresetFromLFS() - applyPresets(rto->videoStandardInput); - } - // save new slotID into preferences - saveUserPrefs(); + userCommand = '3'; return; } server_slot_set_failure: @@ -237,13 +227,16 @@ void serverSlotSet() void serverSlotSave() { bool result = false; + uint8_t i = 0; ASSERT_LOMEM_GOTO(server_slot_save_end); // TODO: too many open-closes... if (server.args() > 0) { // slot name - String slotName = server.arg(1); + String slotName = server.arg(String(F("name"))); + uint8_t slotIndex = server.arg(String(F("index"))).toInt(); SlotMetaArray slotsObject; + uint8_t k = slotName.length(); fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); if (slotsBinaryFile) @@ -254,42 +247,53 @@ void serverSlotSave() } else { - // file doesn't exist, let's create one - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); - String slot_name = String(emptySlotName); - for (int i = 0; i < SLOTS_TOTAL; i++) + while (i < SLOTS_TOTAL) { - slotsObject.slot[i].slot = i; + // slotsObject.slot[i].slot = i; // slotsObject.slot[i].presetNameID = 0; slotsObject.slot[i].scanlines = 0; - slotsObject.slot[i].resolutionID = OutputNone; + slotsObject.slot[i].resolutionID = Output240p; slotsObject.slot[i].scanlinesStrength = 0; slotsObject.slot[i].wantVdsLineFilter = false; slotsObject.slot[i].wantStepResponse = true; slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); + strncpy(slotsObject.slot[i].name, + slot_name.c_str(), + sizeof(slotsObject.slot[i].name) + ); + i++; + delay(1); } - + // file doesn't exist, let's create one + slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); } // updating the SlotMetaObject with data received - // slotIndexMap value - String slotIndexString = server.arg(0); - uint8_t slotIndex = lowByte(slotIndexString.toInt()); + // uint8_t slotIndex = lowByte(slotIndexString.toInt()); + uint8_t nameMaxLen = sizeof(slotsObject.slot[slotIndex].name); + const char space = 0x20; if (slotIndex >= SLOTS_TOTAL) { + _WSF(PSTR("too much slots, max allowed: %d\n"), (uint8_t)SLOTS_TOTAL); goto server_slot_save_end; } - - String slot_line = String(emptySlotLine); - strncpy(slotsObject.slot[slotIndex].name, slot_line.c_str(), sizeof(slotsObject.slot[slotIndex].name)); - - slotsObject.slot[slotIndex].slot = slotIndex; + // fail proof + if(slotName.length() >= nameMaxLen) { + _WSF(PSTR("slot name is too long, max allowed: %d\n"), nameMaxLen); + goto server_slot_save_end; + } + // slotsObject.slot[slotIndex].slot = slotIndex; // slotsObject.slot[slotIndex].presetNameID = 0; - slotName.toCharArray(slotsObject.slot[slotIndex].name, sizeof(slotsObject.slot[slotIndex].name)); + // slotName.toCharArray(slotsObject.slot[slotIndex].name, sizeof(slotsObject.slot[slotIndex].name)); + strcpy(slotsObject.slot[slotIndex].name, slotName.c_str()); + while(k < nameMaxLen - 1) { + slotsObject.slot[slotIndex].name[k] = space; + k ++; + } + delay(10); slotsObject.slot[slotIndex].resolutionID = rto->resolutionID; slotsObject.slot[slotIndex].scanlines = uopt->wantScanlines; slotsObject.slot[slotIndex].scanlinesStrength = uopt->scanlineStrength; @@ -297,9 +301,9 @@ void serverSlotSave() slotsObject.slot[slotIndex].wantStepResponse = uopt->wantStepResponse; slotsObject.slot[slotIndex].wantPeaking = uopt->wantPeaking; - fs::File slotsBinaryOutputFile = LittleFS.open(FPSTR(slotsFile), "w"); - slotsBinaryOutputFile.write((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryOutputFile.close(); + slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); + slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFile.close(); result = true; } @@ -315,78 +319,69 @@ void serverSlotSave() void serverSlotRemove() { bool result = false; - int16_t slotIndex = server.arg(0).toInt(); - if (server.args() > 0) + uint8_t i = 0; + int16_t slotIndex = server.arg(String(F("index"))).toInt(); + SlotMetaArray slotsObject; + if (server.args() > 0 && slotIndex >= 0) { - // if (param == '0') { - // _DBGN(F("Wait...")); - // result = true; - // } else { - // uint8_t slot = uopt->presetSlot; - - // uint8_t nextSlot; char buffer[4] = ""; - auto currentSlot = String(slotIndexMap).indexOf(slotIndex); + // auto currentSlot = String(slotIndexMap).charAt(slotIndex); if (slotIndex > SLOTS_TOTAL || slotIndex < 0) { _DBGN(F("wrong slot index, abort")); goto server_slot_remove_end; } + // preset file extension + sprintf(buffer, PSTR(".%d"), slotIndex); - sprintf(buffer, PSTR(".%02x"), currentSlot); - - SlotMetaArray slotsObject; fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - if (!slotsBinaryFile) + if (!slotsBinaryFile) { + _DBGN(F("failed to read slots.bin")); goto server_slot_remove_end; + } slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); - _DBGF("removing slot: %s and its preset\n", slotsObject.slot[currentSlot].name); + _DBGF( + PSTR("removing slot: %s and related presets...\n"), + slotsObject.slot[slotIndex].name + ); // remove every preset file of this slot fs::Dir root = LittleFS.openDir("/"); while (root.next()) { String fn = root.fileName(); - if (fn.lastIndexOf(buffer) == (int)(fn.length() - 4)) - { + if (fn.lastIndexOf(buffer) == (int)(fn.length() - 3)) LittleFS.remove(fn); - // let's give some time to the flash - delay(10); - } + delay(10); } // lets reset the slot data in binary file - for (int i = 0; i < SLOTS_TOTAL; i++) + while (i < SLOTS_TOTAL) { if (i == slotIndex) { String slot_name = String(emptySlotName); - slotsObject.slot[i].slot = i; + // slotsObject.slot[i].slot = i; // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].resolutionID = OutputNone; + slotsObject.slot[i].resolutionID = Output240p; slotsObject.slot[i].scanlines = 0; slotsObject.slot[i].scanlinesStrength = 0; slotsObject.slot[i].wantVdsLineFilter = false; slotsObject.slot[i].wantStepResponse = true; slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); + strncpy(slotsObject.slot[i].name, + slot_name.c_str(), + sizeof(slotsObject.slot[i].name) + ); break; } + i++; + delay(1); } - // LittleFS.remove("/preset_ntsc." + String((char)currentSlot)); - // LittleFS.remove("/preset_pal." + String((char)currentSlot)); - // LittleFS.remove("/preset_ntsc_480p." + String((char)currentSlot)); - // LittleFS.remove("/preset_pal_576p." + String((char)currentSlot)); - // LittleFS.remove("/preset_ntsc_720p." + String((char)currentSlot)); - // LittleFS.remove("/preset_ntsc_1080p." + String((char)currentSlot)); - // LittleFS.remove("/preset_medium_res." + String((char)currentSlot)); - // LittleFS.remove("/preset_vga_upscale." + String((char)currentSlot)); - // LittleFS.remove("/preset_unknown." + String((char)currentSlot)); - // uint8_t loopCount = 0; // uint8_t flag = 1; // String sInd = String(slotIndexMap); @@ -420,15 +415,20 @@ void serverSlotRemove() slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); result = true; - // } } + delay(10); + // reset parameters + setResetParameters(); + _DBGN(F("slot has been removed, parameters now reset to defaults")); + // also reset resolution + rto->resolutionID = Output240p; server_slot_remove_end: server.send(200, mimeAppJson, result ? F("true") : F("false")); } /** - * @brief + * @brief Upload file final response * */ void serverFsUploadResponder() @@ -437,7 +437,7 @@ void serverFsUploadResponder() } /** - * @brief + * @brief Upload file handler * */ void serverFsUploadHandler() @@ -450,12 +450,11 @@ void serverFsUploadHandler() webSocket.close(); dnsServer.stop(); _tempFile = LittleFS.open(FPSTR(backupFile), "w"); - _DBG(F("upload BACKUP file")); - err = false; + _DBGF(PSTR("uploading file: %s"), upload.filename.c_str()); } - else if (upload.status == UPLOAD_FILE_WRITE && upload.contentLength != 0 && !err) + else if (upload.status == UPLOAD_FILE_WRITE && !err) { - if (_tempFile.write(upload.buf, upload.contentLength) != upload.contentLength) + if (_tempFile.write(upload.buf, upload.currentSize) != upload.currentSize) { err = true; _DBGN(F(" write failed, abort")); @@ -466,7 +465,7 @@ void serverFsUploadHandler() _DBG(F(".")); } } - else if (upload.status == UPLOAD_FILE_END && !err) + else if (upload.status == UPLOAD_FILE_END) { _DBGN(F(" complete")); err = false; @@ -487,12 +486,21 @@ void serverFsUploadHandler() } /** - * @brief Backup all data - * + * @brief Backup slots and its presets + * The commented code below may be used in future in case of large size + * of data to backup. It does the following: + * 1. creates backup file with all data needed to backup + * 2. streams backup file to client + * 3. removes backup file */ void serverBackupDownload() { - StreamString data; + // fs::File _b = LittleFS.open(FPSTR(backupFile), "w"); + // if(!_b) { + // _DBGN(F("failed to create backup file, can not continue...")); + // return; + // } + StreamString _b; // size_t contentLength = 0; fs::Dir dir = LittleFS.openDir("/"); String ts = server.arg(String(F("ts"))); @@ -500,32 +508,66 @@ void serverBackupDownload() // ASSERT_LOMEM_GOTO(fs_dl_handle_fail); while (dir.next()) { - if (dir.isFile() && dir.fileName().indexOf(PSTR(".html")) == -1) - // && (dir.fileName().compareTo(String(preferencesFile)) == 0 - // || dir.fileName().compareTo(String(slotsFile)) == 0 - // || dir.fileName().indexOf(buffer) != -1)) + if (dir.isFile() && dir.fileName().indexOf(PSTR("__")) == -1) { fs::File _f = LittleFS.open(dir.fileName(), "r"); if (_f) { - // write header - data.print(dir.fileName()); - data.println(); - data.print(dir.fileSize()); - data.println(); - // write file contents - while(_f.available()) { - data.write(_f.read()); - } + // write file name + _b.print(dir.fileName()); + _b.println(); + // slots.bin will be processed differently + // if(dir.fileName().compareTo(String(slotsFile).substring(1)) != 0) { + // file size + _b.print(dir.fileSize()); + _b.println(); + // write file contents + while(_f.available()) { + _b.write(_f.read()); + } + _DBGF(PSTR("%s dump complete\n"), dir.fileName().c_str()); + /* } else { + SlotMetaArray slotsObject; + // reading into mem + _f.read((byte *)&slotsObject, sizeof(slotsObject)); + _f.close(); + uint8_t i = 0; + String slot_name = String(emptySlotName); + while(i < SLOTS_TOTAL) { + if(strcmp(slotsObject.slot[i].name, slot_name.c_str()) != 0) { + _DBGF(PSTR("slot: %s\n"), slotsObject.slot[i].name); + _b.println(i); + _b.println(slotsObject.slot[i].name); + _b.println(slotsObject.slot[i].resolutionID); + _b.println(slotsObject.slot[i].scanlines); + _b.println(slotsObject.slot[i].scanlinesStrength); + _b.println(slotsObject.slot[i].wantVdsLineFilter); + _b.println(slotsObject.slot[i].wantStepResponse); + _b.println(slotsObject.slot[i].wantPeaking); + } else + break; + i++; + } + // since we're unable to have number of not empty slots beforehand, + // let's leave here a "stop string" for now. The principle of + // slots storage may need to change to allow the simplier logic. + _b.println("\t\t"); + _DBGN(F("slots.bin dump complete")); + } */ _f.close(); } } } + delay(100); server.sendHeader(PSTR("Content-Disposition"), String(PSTR("attachment; filename=\"gbs-backup-")) + ts + String(PSTR(".bin\""))); server.sendHeader(PSTR("Cache-Control"), PSTR("private, max-age=0")); server.sendHeader(PSTR("Content-Description"), PSTR("File Transfer")); server.sendHeader(PSTR("Content-Transfer-Encoding"), PSTR("binary")); - server.send(200, String(mimeOctetStream).c_str(), data.c_str(), data.length()); + server.send(200, mimeOctetStream, _b.c_str(), _b.length()); + /* server.streamFile(_b, mimeOctetStream); + // cleanup + _b.close(); + LittleFS.remove(FPSTR(backupFile)); */ webSocket.begin(); } @@ -536,6 +578,9 @@ void serverBackupDownload() */ void extractBackup() { char buffer[32] = ""; + char fname[32] = ""; + size_t fsize = 0; + fs::File _f; fs::File _b = LittleFS.open(FPSTR(backupFile), "r"); if(!_b) { _DBGN(F("failed to access backup file, abort...")); @@ -545,36 +590,68 @@ void extractBackup() { while(_b.available()) { // name if(_b.readBytesUntil('\n', buffer, 32) != 0) { - char fname[32] = ""; strncpy(fname, buffer, 32); // fix last captured character fname[strlen(fname)-1] = '\0'; - // size memset(buffer, '\0', 32); - if(_b.readBytesUntil('\n', buffer, 32) != 0) { - size_t fsize = (size_t)String(buffer).toInt(); - if(fsize != 0) { - size_t cursor = 0; - fs::File _f = LittleFS.open(fname, "w"); - // transfer data - if(_f) { - while(_b.available() && cursor != fsize) { - _f.write(_b.read()); - cursor ++; - } - _f.close(); - _DBGF(PSTR("%s extraction complete, size: %ld\n"), fname, fsize); + // it is not slots.bin file + // if(strcmp(fname, String(slotsFile).substring(1).c_str()) != 0) { + if(_b.readBytesUntil('\n', buffer, 32) != 0) { + fsize = (size_t)String(buffer).toInt(); + if(fsize != 0) { + size_t cursor = 0; + _f = LittleFS.open(fname, "w"); + // transfer data + if(_f) { + while(_b.available() && cursor != fsize) { + _f.write(_b.read()); + cursor ++; + } + _f.close(); + _DBGF(PSTR("%s extraction complete, size: %ld\n"), fname, fsize); + } else + _DBGF(PSTR("unable to open/create %s (size: %ld)\n"), fname, fsize); } } - } + /* } else { + // it is slots.bin file + _f = LittleFS.open(FPSTR(slotsFile), "r"); + if(_f) { + SlotMetaArray slotsObject; + _f.read((byte *)&slotsObject, sizeof(slotsObject)); + _f.close(); + uint8_t k = 0; + String data = ""; + while(_b.available()) { + // starts from slotID, so it's stop string or slotID + data =_b.readString(); + // stop condition, see serverBackupDownload() + if(data.compareTo(String(F("\t\t"))) == 0) + break; + // mind data order! + k = data.toInt(); + strcpy(slotsObject.slot[k].name, _b.readString().c_str()); + slotsObject.slot[k].resolutionID = _b.readString().charAt(0); + slotsObject.slot[k].scanlines = _b.readString().toInt(); + slotsObject.slot[k].scanlinesStrength = _b.readString().toInt(); + slotsObject.slot[k].wantVdsLineFilter = _b.readString().toInt(); + slotsObject.slot[k].wantStepResponse = _b.readString().toInt(); + slotsObject.slot[k].wantPeaking = _b.readString().toInt(); + } + // open for writing + _f = LittleFS.open(FPSTR(slotsFile), "w"); + _f.write((byte *)&slotsObject, sizeof(slotsObject)); + _f.close(); + _DBGN(F("slots.bin extraction complete")); + } else + _DBGN(F("unable to open/create slots.bin")); + } */ } } _b.close(); // cleanup LittleFS.remove(FPSTR(backupFile)); _DBGN(F("restore success, restarting...")); - // reset device to apply new configuration - ESP.reset(); } /** @@ -646,15 +723,15 @@ void serverRestoreFilters() { slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); - auto currentSlot = String(slotIndexMap).indexOf(uopt->presetSlot); - if (currentSlot == -1) - { - goto server_restore_filters_end; - } + // auto currentSlot = String(slotIndexMap).indexOf(uopt->presetSlot); + // if (currentSlot == -1) + // { + // goto server_restore_filters_end; + // } - uopt->wantScanlines = slotsObject.slot[currentSlot].scanlines; + uopt->wantScanlines = slotsObject.slot[uopt->presetSlot].scanlines; - _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[currentSlot].name, uopt->presetSlot); + _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[uopt->presetSlot].name, uopt->presetSlot); if (uopt->wantScanlines) { _WSN(F("on (Line Filter recommended)")); @@ -666,14 +743,14 @@ void serverRestoreFilters() } saveUserPrefs(); - uopt->scanlineStrength = slotsObject.slot[currentSlot].scanlinesStrength; - uopt->wantVdsLineFilter = slotsObject.slot[currentSlot].wantVdsLineFilter; - uopt->wantStepResponse = slotsObject.slot[currentSlot].wantStepResponse; - uopt->wantPeaking = slotsObject.slot[currentSlot].wantPeaking; + uopt->scanlineStrength = slotsObject.slot[uopt->presetSlot].scanlinesStrength; + uopt->wantVdsLineFilter = slotsObject.slot[uopt->presetSlot].wantVdsLineFilter; + uopt->wantStepResponse = slotsObject.slot[uopt->presetSlot].wantStepResponse; + uopt->wantPeaking = slotsObject.slot[uopt->presetSlot].wantPeaking; result = true; } -server_restore_filters_end: +// server_restore_filters_end: server.send(200, mimeAppJson, result ? F("true") : F("false")); } @@ -689,7 +766,7 @@ void serverWiFiList() while (n == -1) { n = WiFi.scanComplete(); - WDT_FEED(); + yield(); } if (n > 0) { @@ -760,7 +837,7 @@ void serverWiFiWPS() // } /** - * @brief + * @brief switch WiFi in STA mode * */ void serverWiFiConnect() @@ -803,7 +880,8 @@ void serverWiFiReset() } /** - * @brief + * @brief Prints current system & PLC parameters + * into WS and Serial * */ void printInfo() @@ -857,6 +935,7 @@ void printInfo() } yield(); + if (GBS::STATUS_SYNC_PROC_HSACT::read()) { // else source might not be active for (uint8_t i = 0; i < 9; i++) @@ -878,6 +957,7 @@ void printInfo() } } } + delay(10); lockCounterPrevious = getMovingAverage(lockCounter); } @@ -1014,15 +1094,14 @@ void handleSerialCommand() if (serialCommand != '@') { _WSF(commandDescr, - "serial", - serialCommand, - serialCommand, - // uopt->presetPreference, - uopt->presetSlot, - uopt->presetSlot, - // rto->presetID - rto->resolutionID, - rto->resolutionID); + "serial", + serialCommand, + serialCommand, + // uopt->presetPreference, + uopt->presetSlot, + // rto->presetID + rto->resolutionID, + rto->resolutionID); // multistage with bad characters? if (inputStage > 0) { @@ -1406,7 +1485,7 @@ void handleSerialCommand() case 'i': rto->printInfos = !rto->printInfos; break; - case 'c': + case 'c': // enableOTA mode initUpdateOTA(); rto->allowUpdatesOTA = true; _WSN(F("OTA Updates on")); @@ -1491,7 +1570,7 @@ void handleSerialCommand() saveUserPrefs(); uint8_t vidMode = getVideoMode(); // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { - if (rto->resolutionID == OutputNone && GBS::GBS_PRESET_ID::read() == Output960p50) + if (rto->resolutionID == Output240p && GBS::GBS_PRESET_ID::read() == Output960p50) { applyPresets(vidMode); // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { @@ -1581,7 +1660,7 @@ void handleSerialCommand() else GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); } break; case '7': @@ -2087,7 +2166,6 @@ void handleUserCommand() userCommand, // uopt->presetPreference, uopt->presetSlot, - uopt->presetSlot, // rto->presetID rto->resolutionID, rto->resolutionID); @@ -2122,17 +2200,17 @@ void handleUserCommand() case '3': // before: load custom preset, now: slot change { // @sk: see serverSlotSet() - /* // uopt->presetPreference = OutputCustomized; // custom - // TODO: unknown logic - if (rto->videoStandardInput == 14) { - // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; - } else { - // also does loadPresetFromLFS() - applyPresets(rto->videoStandardInput); - } - // save new slotID into preferences - saveUserPrefs(); */ + // uopt->presetPreference = OutputCustomized; // custom + // TODO: unknown logic + if (rto->videoStandardInput == 14) { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } else { + // also does loadPresetFromLFS() + applyPresets(rto->videoStandardInput); + } + // save new slotID into preferences + saveUserPrefs(); } break; // case '4': // save custom preset @@ -2208,12 +2286,12 @@ void handleUserCommand() else { _WSF( - PSTR("\npresetNameID = %c\npreset slot = %c\nframe time lock = %c\n" - "frame lock method = %c\nauto gain = %c\n" - "scanlines = %c\ncomponent output = %c\ndeinterlacer mode = %c\n" - "line filter = %c\npeaking = %c\npreferScalingRgbhv = %c\n" - "6-tap = %c\npal force60 = %c\nmatched = %c\n" - "step response = %c\ndisable external clock generator = %c\n"), + PSTR("\npresetNameID = %c\npreset slot = %c\nframe time lock = %c\n" \ + "frame lock method = %c\nauto gain = %c\n" \ + "scanlines = %c\ncomponent output = %c\ndeinterlacer mode = %c\n" \ + "line filter = %c\npeaking = %c\npreferScalingRgbhv = %c\n" \ + "6-tap = %c\npal force60 = %c\nmatched = %c\n" \ + "step response = %c\ndisable external clock generator = %c\n"), f.read(), f.read(), f.read(), @@ -2240,12 +2318,14 @@ void handleUserCommand() * 2. update registers if videoStandardInput != 14 * 3. update/save preset data */ - case 'f': - case 'g': - case 'h': - case 'p': - case 's': - case 'L': + case 'f': // 960p + case 'g': // 720p + case 'h': // 480p + case 'p': // 1024p + case 's': // 1080p + case 'L': // 15kHz/downscale + case 'j': // 240p + case 'k': // 576p { // load preset via webui uint8_t videoMode = getVideoMode(); @@ -2271,16 +2351,22 @@ void handleUserCommand() if (userCommand == 'L') // uopt->presetPreference = OutputDownscale; // downscale rto->resolutionID = Output15kHz; // downscale + if (userCommand == 'k') + rto->resolutionID = Output576p50; // PAL + if (userCommand == 'j') + rto->resolutionID = Output240p; // 240p rto->useHdmiSyncFix = 1; // disables sync out when programming preset if (rto->videoStandardInput == 14) { // vga upscale path: let synwatcher handle it + _DBGN(F("video input is #14, switch to #15")); rto->videoStandardInput = 15; } else { // normal path + _DBGF(PSTR("apply preset of videoMode: %d resolution: %d\n"), videoMode, rto->resolutionID); applyPresets(videoMode); } saveUserPrefs(); @@ -2498,11 +2584,14 @@ void handleUserCommand() break; case 'u': // extract backup extractBackup(); + // reset device to apply new configuration + delay(1000); + ESP.reset(); // // restart to attempt wifi station mode connect // wifiStartStaMode(""); // delay(100); // ESP.reset(); - break; + // break; case 'v': { uopt->wantFullHeight = !uopt->wantFullHeight; @@ -2670,9 +2759,9 @@ void handleUserCommand() if (GBS::ADC_INPUT_SEL::read() == 1) { _WSF( - PSTR("RGB reg\n------------\nY_OFFSET: %d\n" - "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" - "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), + PSTR("RGB reg\n------------\nY_OFFSET: %d\n" \ + "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" \ + "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), GBS::VDS_Y_OFST::read(), GBS::VDS_U_OFST::read(), GBS::VDS_V_OFST::read(), @@ -2739,38 +2828,37 @@ void handleUserCommand() */ void initUpdateOTA() { - ArduinoOTA.setHostname("GBS OTA"); - + // @sk: MDNS already started + // ArduinoOTA.setHostname("GBS OTA"); // ArduinoOTA.setPassword("admin"); // Password can be set with it's md5 value as well // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); - // update: no password is as (in)secure as this publicly stated hash.. // rely on the user having to enable the OTA feature on the web ui - ArduinoOTA.onStart([]() - { + ArduinoOTA.onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) - type = "sketch"; + type = "firmware"; else // U_SPIFFS type = "filesystem"; // NOTE: if updating LittleFS this would be the place to unmount LittleFS using LittleFS.end() LittleFS.end(); _WSF( - PSTR("%s %s\n"), - String(F("Start updating ")).c_str(), + PSTR("%s OTA update start\n"), type.c_str() - ); }); - ArduinoOTA.onEnd([]() - { _WSN(F("\nEnd")); }); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) - { _WSF(PSTR("Progress: %u%%\n"), (progress / (total / 100))); }); - ArduinoOTA.onError([](ota_error_t error) - { - _WSF(PSTR("Error[%u]: "), error); + ); + }); + ArduinoOTA.onEnd([]() { + _WSN(F("OTA update end")); + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + _WSF(PSTR("progress: %u%%\n"), (progress / (total / 100))); + }); + ArduinoOTA.onError([](ota_error_t error) { + _WSF(PSTR("OTA error[%u]: "), error); if (error == OTA_AUTH_ERROR) _WSN(F("Auth Failed")); else if (error == OTA_BEGIN_ERROR) @@ -2780,9 +2868,9 @@ void initUpdateOTA() else if (error == OTA_RECEIVE_ERROR) _WSN(F("Receive Failed")); else if (error == OTA_END_ERROR) - _WSN(F("End Failed")); }); + _WSN(F("End Failed")); + }); ArduinoOTA.begin(); - yield(); } #endif // defined(ESP8266) \ No newline at end of file diff --git a/src/wserver.h b/src/wserver.h index 69cef062..8487ad75 100644 --- a/src/wserver.h +++ b/src/wserver.h @@ -3,7 +3,7 @@ # File: wserver.h # # File Created: Friday, 19th April 2024 3:11:47 pm # # Author: Sergey Ko # -# Last Modified: Tuesday, 28th May 2024 12:22:03 am # +# Last Modified: Thursday, 30th May 2024 11:03:13 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -31,10 +31,10 @@ extern char userCommand; extern struct userOptions * uopt; extern struct runTimeOptions *rto; -const char indexPage[] PROGMEM = "/index.html"; -const char backupFile[] PROGMEM = "/_backup"; +const char indexPage[] PROGMEM = "/__index"; +const char backupFile[] PROGMEM = "/__backup"; const char notFouldMessage[] PROGMEM = "

    404 | Page Not Found

    "; -const char slotIndexMap[] PROGMEM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:,"; +// const char slotIndexMap[] PROGMEM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:,"; const char lomemMessage[] PROGMEM = "%d it's not enough memory..."; const char mimeTextHtml[] PROGMEM = "text/html"; const char mimeOctetStream[] PROGMEM = "application/octet-stream"; From bd1f33e286e4e3dbb1706bc482c633c3da552a88 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Sat, 1 Jun 2024 17:40:58 -0600 Subject: [PATCH 22/41] TEST: :large update: mild device reset, runtime parameters are in slots, webUi updates/fixes, overall improvements --- builds/filesystem.bin | Bin 1024000 -> 1024000 bytes builds/firmware.bin | Bin 551920 -> 551904 bytes gbs-control.ino | 177 ++-- public/assets/fonts/material.woff2 | Bin 98812 -> 125116 bytes public/src/index.html.tpl | 132 ++- public/src/index.js | 1553 --------------------------- public/src/index.ts | 1558 +++++++++++++++------------- public/src/style.css | 845 +++++++-------- src/OLEDMenuImplementation.cpp | 28 +- src/main.cpp | 165 ++- src/menu.cpp | 22 +- src/options.h | 44 +- src/presets.cpp | 31 +- src/slot.cpp | 233 +++++ src/slot.h | 24 +- src/utils.cpp | 2 +- src/utils.h | 2 +- src/wifiman.cpp | 128 +-- src/wserver.cpp | 388 ++----- src/wserver.h | 11 +- 20 files changed, 2042 insertions(+), 3301 deletions(-) delete mode 100644 public/src/index.js create mode 100644 src/slot.cpp diff --git a/builds/filesystem.bin b/builds/filesystem.bin index b27b8e347d2c5c167b7f3a20e7bf872264e27012..c728677854257af12c852794ffe18d5e0e445b88 100644 GIT binary patch delta 187031 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

    1;C}(&pjxeK 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

    OUt`q|)6Fbu&@KSL8zw=z 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 AzW@LL literal 0 HcmV?d00001 diff --git a/doc/tv5725_programming_guide.pdf b/doc/tv5725_programming_guide.pdf index 85a315d2f1ee1e29bcc78526375ec7f4eb499d97..4371aaf9aad2b3572bd37feef261d83aeb0c6ba1 100644 GIT binary patch delta 6136 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 acu&e174EHjqqqs|8dI7*d+9ZurT+jSBvao2 delta 67 zcmV~$TM|M5006*2Qu3^*sB0RZee9PR7jO<|a4R!*_idb(;V%%1oW#x&7gwp9Os-I> T)b1Xh8m*VNk52Eq{?hpX99I>@ diff --git a/doc/tv5725_registers_definition_v1.1.pdf b/doc/tv5725_registers_definition_v1.1.pdf index 3c8996735ff550a392d04bafa27051bec16546bc..315ea4988b06c4dd440e70a0371f249d35913067 100644 GIT binary patch delta 84453 zcmeHQd7KQ__P30PA@(guG%=QtnXa|FgJBrPgxJa0%`h0-$Qb)_kwFL%L@Ws+f*^z- z_MM2tBlexxV~Yr}M!a*Y>Q>$A>aMQto__v$^ZERK@%naEpE~#6Q|Eim`JOxWL5u4d zZAN5d&B&IKJtHh5N5)GTIWu0)$dwVEkvk(##w!_lGxBBR&nS>lFr!dL;nhWQ4nd5~ zZc9z-9$u}QEvosTKFPMI#))0w|G%5uIVG`H>Ofl?_=4RgxCEP%XKn59cv^Drben@? z;q#`psM=|%eRN+8SH9RZH9avs8NL+NG`VkTzqC%teQo5L)ZXcElfE{@NjHg(4o~jg z8Oy=L|NbA!g9POvh(My7Jg(5ngWMIwU~OZq5`h>zLrra(h8V2F%u*3jCf97v7-yXLpIiZ$FX=S16oW0tR;kP5?(60nUkkdn>h|oWq=})&EwfhA~22~%p@mo zdTo6x#+DKZ-#2)XkY&rw$(x=MNuEkdBs`OTiiF6^#9U2Yv?OnON+fwEDUp1cZ)Ea* z3q&N|-F)-z<{Mt3nwDZv@7}5K8g!ED{CoxLMGQB*t39nPo?L|AFbKbdd3Srx2W-zB z9J#ya_3l2ANOlW&cYDse+jHKUJ@;tNO+-SHOXE>Z?)F@8x95Tfdv4X76OoWLHOX2M z-0is_-$q;Sg1_b*?2qct5t;lF$<3bI1b1^Tn3{9F{V}+h0g2>p&INaKE^6i+p5MXtcxsL&?C1eZ{INj~H)7^f%H2ZCfiXk49GU5JhLBx?4m~79jxlk^5d+s9k zoS1W$MRShrk3nsEku;NLW~f|blMt%__tk@RmnUKEtS!_Bg@fNuTy9? zgABQfSOrFjoDr!|_i%;@!orjL`{NBWjAr2>{)rJNqeRb$SRj=YKC?1~9%hiNTi;S4 z&HH4e_?&JES$DI}ND;J5luC*}n%Q-RbvNvc5<{bP<;k>Lvg{ClwXQ5$SMIi*QKD$H zRCuHM&=rY48{UBdNhQVUbTg;~(kQ86sSo(sa->!nh>8ejN};SAPZ36)V(D#h4{?)>%t zJc{K5?=VsjPq)yNs2VMm(b^l0J@$V*xqyL5MXa$pgGyYDmP&8zkzX0Vz@*Zwy<+Tn zc}}rZNY45(QgAJ>DO6Uee|bno3f?ufQSlE(39nJglHzM2l?u;46#-$S0G@7P3G$@U zQsHUHB&qQ4ODoXy9VEr@^is)_N=s$I+AF_B8GEpQIF(G^Cca)jI;oW48>K6Vz6Bot3rs45EALd| zZ?srJSa<)WLV&%b2%lbA2J0@x;5<)ZP&0^dMUkiU8zTkzbW$l%H%eDh*exij;QjB{ z!jj^8dZ`T7U5dO}l#0Y()Fhn$QwTFCh4%DP$(xzh6~41UDrBwHD=?|tU3XTAzG+gi zNQ%B0#0s5MtQ6c+b%h}Kz$(!w{k-9i3x~GaIN#$o=AQyuSS-1U zAPiQC#!)jUMdNf*A?xMFqou-=Y(**$`5#h>=a*y1Dm8SpRPKQrR*J^yrLvs=2~aA%wFhG_)zN9S+mQcZ zrEr{HEMuS&^ywi^8JJW`B^}n4lK)|qa2z#-QZz2)Qc?LIR;i|=rcjB-(Nf__%|xku z=6_hFppKTxVC@BuzP%ME8aV=-LSj)=yQ)OvC|ya>I3K$5mj4M%Dy6KB(v?(Jr!99_ z?NT&OmCC>TPk>UX)}9!9sj^OzisXM-DIBMY8T>zX_>gy<}lxQ5au%rsO%#jMICDW#kpi*K-OJ%U`jzC;_By*|McbciP z47xH{cO@D}>k4mF@47-}46neXQVQ)TT`AExN-8NDhowUP^Uea4N_P8bsjw@Lbj#gI zTX*7e5&Dy#&W(QgQ!baTUc)W_!;*}zwkeh99Id>7t-ZsbJ4^W=R;j?Fl&3`JD5<3A zocD$1Wu3|SAA?vhGd{CYtWtDGOQrMev1>1t#hFNDmj4M*DucCGqI0yaRM+1B{7-;V zDe)d{UAd$;IGz9Dr0|@HvP|+nDyhUD1IF1Iy#8o}!71T6O<9~2oePyzp7K8&0a>cD zI3+qqOBIN%hx!zs0Ql(G!$RZgmn3rbgh=6^VM{;G{L@K-s12&^RjLh?VR%JP;g;|vT| zPKm}*rol6Z)mr{X4Q}{l-HjwxBa0PDe8B*xkObKMlZsp=nFgHy;S>%4t*judJGs9l zsYw2ZQ%hh}i={;0XsP_Q?i#tz+YBO8_7kTuw;iat0Qw^!~L}sp|+(D#^{GP(G*Qu}behE(j)TU{a|} zR-{g$fy>JIO=k7I+zm4b`qwJTIHlH(dgmDEteiQY)szqAL05SF`zSW$r0AZ`Nj5NA zIf~Ni7o!zH^_{d;@csSTga%G4r;=I;35t`VZ>FX}i@&&6Nd+hsvA*iMGSFH%n%9c_ z%%lV;m3yFuBg|H$HooD4;I;-P6%Ovn`4?4L26ihK1ijUYRLIaFh%@k8IRn9!^Mm1P zzOHEeZx#XMr0AY*6B;3jKu+5Es%LT!94M%Q{IqB7#UH77cc!b2HxONUJB$4f4`P{Ete|woyAxdz zh~@6P^Fc6O{neGszvT@~SKh#M<%3|ldY6jee@~l`H!xj!1Jjka%yc!~jxm!fTCVUY|S@y+~vGh(w1`9GpOZz($X z7KIUcDY{3y5xjx<%1hBVBBiNRQ2(#w168|9-X?xodjs>8H!xp$J@ZvAF|gWy(2ptA z@HDSB10w)~*O;#|@fC&hI_9gXvNB6oWGjPIIR6L@&kY__w@LTc?FYcqRHqONHOyfk}n@QI=YV&a1w*y0Da2EG-q@NWP>} z;xC!A36QT$upz;xxM z=$o%8gjx24Fvy$NTvvGhY3puay7Ef&jh@0F!tm}=;otWe0ptx#SKh#M<$W<-Jtyy# z`U`iltV!jbWaSM^S6*YfdM3Kk@fX7;3`{D@y3590X)8y~phk2Jp#CB-soVoKyi9bZ z>o52qn680sLWhL^bk2+teWR2mMc+cT2|d+c@CK$UuXuR0R939JytT~MmG$}y-oSL_ zmFOEKl?l_;Gfk4NzaUG*++x8q(FV)Fbma|9S6+&~d7eSv^%sFj-sK4M1Ojq8(bmfC!x+>i^2+Yy9lk-}C z!5f&ayb^t*bmb4z)g9)@y7IIBf;TW-d6zt?v{ZObEzTf`zo_WT|0%>XNUkCaOE559 z11w*Lyw$1*dZH_?zYvt@n>K}lj_K+rCiF{J zr2axMFk1yB`bJ6R7qeB*by6uWZZl|Je<2u{t%8BsDtKYGS|Mu+5dZVP0j;3a(rJi7 zFfdyMDf;Gn6MC$_@TM$7_MUzd3Q}~B_GJVEu~m?wZ?sf?)L#T9m4VnQ=!mV-`%egh z*&3i!#C2EeF9ap}MlJUsn5~wj($!xG24<_EMB8Yo{IKqB?;Hdt%8Bs zDj1oq)+nU7{=$P;uq%C3g$M>_tDr>NC|&s`wtBC>2v91LnpNL~24brq1>2NO=x_Z+ zfKn06rb#8gC8D+Z3qgvu(Y66Qc3u;Qx}%WP5R032H#b-~n5VD55DZLKL5jA8PAX&l zg`id`smfBKZPdb&qHUQW6^;K*H=!CQ)TDBE-Gu;%tZMy5U{k0rM^!52K9sIZiL5^A zF9MW`Sa(e-_Z+Jr1=~`S0;<0VP%8Jpi~zwlxB3eqa3-rGAgPd`)Y4JTjDg82SYfg% zaXj~6gAb{^)L#e&CaWOT($OU}f}Y9h7iCnH%CGthL8+yqbtO+KwcK??R+6DpLU6`n zJAM4chw`jt=me#e`xU>%2e@b~lFk1tY3i#g& z0#I#*5`Ckk!jl}JwU;|6dk#JTMnoRVj|8Q*j+#OPvsI9yZ^251{5ZQ%FfdyM1G807 znXS02jVyn{WicXIQ~s^nlv-T=O06BGJE_)Ax6V|eYXJOPH>vdTB(JdFKx`GHQac_0 zR*-7pf}K*oW)zWVfx7$+%vK>VW~z-$$iXdJaEeKA`-=X>0xLe`J& z#7QOfJS%JQr$gKw`y<1}4~-ifWq=P{>hM_zxdy{OdMX`4_q z5L-nYjYEOjRbsaNlZsqLR=bD{%vMo~#`!UY^bC^wTb2r+zbG1*t)hY1DoW9~%$Lgh z`ER0u*(w^Ct)dCD)mO4WURU7%`9-@BNjCzOn=Bfbt)di-v!*M<`A>l@cf)zCq7sdx zHlasitHtwY0+h<#xQhm2D-w0gR`S9o)J5Y9+eo3-@;`1;T6teX{zoLK==eO@*KNAJM>c6%9;R(KFN4b2lXS{Ex~2vuwez z0VB&rn?VE9RrE}BwU+-0P%2`LRcmh`x{62&&snn-26RUJ0snNROTyy(k7!`Jic&4y z|3WH~{}ByLSJA+96@y^9dYeJ>{Euj0x{6A4j})pB-qVJXo$S}JQ{ zde8ZvfEJdTj#Q;mqH~l~Qrv^ql|T8PfTU8LT1_fBIwwmd<$pxUL=&;dJBZLe{d@=M zrS$aiX2gbdT(aK`>v{+q;_z)BdX>QGsSx4a`?DQ06O6yeRxHKV2{b^Hnr3 zUqvZeM`qMy20is(RXhHmUAUz^atd=(AMS5bGy zD>AVS9;%u>O`-1@G%#O9B^pPcKOF?~H9)DbhamB9)OU`7`6>p%d{s-i&1MkzPap-o z2@T9w(ZGBagJ8b8Nrm)q%v<44*q;gNnI&kToKL6v;74gUPOYfGNW~N^0*|Ou4TZ`!<}X0d;FE%Qyu1Z)Ll)g56#LzSlS{wR68t$#7|} z#7>Qx*;*#2^@YpesM|6&3I1fW?Tgld>Ut(JNU|ZwZx{{e6 zm|n#e)29z`wBAkaoNQwvnM&bN@K5cRS>VhvPP+gH)rzg*XXRgRo|4`(**1M@bP*vu zT$UG}VEV7oMM}_>?haj&&_5HX*1h<(CPXJeI>gvG43+Nkaf{e#Yh!aLZ8zJIUMBJf zsz+z5*ep4%Yw{pl{nWHxDLqrt`wr?2nvZF0!+D>Ea6PF`z{aIhx~&Z`omm^$l1PUg z&@J?eh_v$#KHR}@kq#HU=OK*xt~{xdY8?!O`WQ;Jweg;ebUEQ_$f-q2|Hc2{pgswp zYP;~L*ce;IsCvmg`zNQTbV{^AY_fS5Fm7EzuDUiJkdCZq318TvYNe)ih9x5RzqR9^ zhc(c-acT+>;y?i)tSTB2R{O-$qi7EY_iENJDP77)*GuWzttb3nIttftn5-S5%m&H5 zyQX)uG2jL&A|^CS>W-BbRTs1?NzKqU+CeI&)nCEi3y-Rs(lZ?%DXMNy*dVdVo$%6) zs-?8#!Sl~?qNH^=^CHsj0?ol=M@QTGro+bS6+STQyOXNt-C@r&`r(|5v$w4&bSn*-v%lH1AxzROJ6IP5IGN|-8q0$%miblrKMqY9b!uC4 z_UXmJ_l7)NczS$z>)k_pvDG)`-cgue_~G$?o1k}?Zlm6CeKVzMTtv*?_=crAzH_@w z#`nLZu)S{2T6FQ=idIcO$am$;=J_8FSy=B}a^Af)i(WY+?l?O6=eA2HRybU|?z5`v zE{?pC`>oTlk$6!mLM!KoI@AN2K#l5}rQe>IY1K0|ty!PMPRY_Dt=*TgIn+vXTU4Ea z>2b}ZMj*~{^2ok6W+muetl3^W(M}d)$^rrm`?sY5go2dBOwQD8zP3{c0mQ%lE z2cdBJ6Ef>Dc&>V5OBNNI+&`sLa?`k4wkTySusE^~+lYh7^f0OPoX!4hK=WoNi;g|8 z*|GW8f@N(H_e%`UWjj>0UXidStC@$L&pG>s&cIp+~Me%Y=L9Wio%TYmcAodS}@24OtrhGb(IHdP3F_ z{Jez1f85;OwqT)Oc0J5iJb%`_30b#Y=+Y%D?on*EBmZo!K6B-U$z>h2%e|B(yv|W1RvTWv*p+ObHe0p(RrYz<&-bTQV#hFS(RsPP`nK$) zUElS5u;^;#jeBQIFMoMniB|hx-NetCu(9#ESrHfJPY9dWc1FZ+UFQ$YnY_7q{H!cj z9#%Yj_|X>)ve*mH?6B`z`FTCZv2_Z+`p3AxvSoSs(_OAjX?Z_-?CLfr%fN+QFOLr! z7oW5c6*xX4<;w3rb$N1kRkO!QOyy5^zI)-rfejAaU!CV;d$AGUrG8c?YecJFGrLW` zy{y#j+pUgW?e=)<$@8xdZ}zPEPlKPfxLf|#fjKb~=CnHB^VYXfn~P?7P_FgoudUiL ztwomAy$Y)pwUG&*M0O6(Ku0g2;$nrIuMVHxqj0x=9kL7??P|O( zKIc!V)w9%oBYU~tH3nxJcC$@>Cj6%@o4PHVjK1qTi5>j!wI`)>w;kX6LW7vH&8|Mk zGpTc0#8*{boqs-~=k{y`KgpT?WjH@F(w?nK$5%>?;QC}gXUmc?qF(;&pJk7%mo24c z*!MBfC$facFekG1|Db!HEJsET{xz)OD6!8=ZNuK%_DY}Jc}B$53?H+-zCG)?ktr{a z`ZIr#uVR*bQuOP5Gf}N$`AfEbc~I?`#?Hdoch?^GN&YD{AOBkZo8oVNuw-8C#?|k? zkzQiM%k4gR@@39nZTw5mvJT5AFeBUH#8*ya`C-J#6;(^U9Jk|_-(m+A`66erZKp51 zv#w}#-nBc5T`2iymMWt=?3ns;&7WS*ez0!B%O&r|*7_u&T-E|*dQ2|+b+*NIW_^

    yl{w#Cnt8znuN0vGWpV6fgSYtCz;Mns6bhW#X}eyz*^p)99B;Kl8D({|cuU;(GXZX6}ZQ0(!^02k} zj!)P);^xj*E|kAJaMPRT3f~!(Z+qWAlZKYr5{^ot*UwKX{o__t;gejg!+MO$SLQQY zxt`^k=P&W{wU?h|6xhKx8Tn14^s-~}58Bl>snW`iPsD7BFIB$b)WY#&$`xx`uF}la zBb&!}FWats_41p`Ox^o-=eV@ut!lP!w7lG0TZf2zQ))E+v|{LibL_BphM}mqsoeB?(=Y8^Hg)Ob9@B149}>~%)8o?z zOz#jmw?c<9=$(HT{{`Y>r$(zv7#E(*Jw zL~NQea?09*jTYCuzT!~Cf-)s)9bPc#(7M&{u73Me@+tdkagMK_9-exA_x;kpZ@!-^ zIU>2um5NtNT`7UCtopg>OFQfxA8}1zT`*zlgpCs>-Q%yWKXB>5Y4N+1_Rlv}n)dk3 z-fs?_R(4vKX<4UDTGF6J>e0eSXD{isq|p(3_wwBnyPxd-^l0SLi3b)P7%=C+><;|% z%m0kMv0}rx!RwxM|9j_+>NlpAm{np+iC0UsC^4P?QFwJ$?^%0iU72-_-?O?KYMpyc zSnDgTudQispEmQ4ea*W>toq0`Z`tzOi{3gI{q@rGh`3+a?FVt>IWE)4! z+O}((4XD+qepEtKhwqx)nHSw;?y|XGZ;jj92K~J4SKFzMAH{sW{hN8?=WR`#lQ{oE zr#F^NUV8A&`K{+y{n6R!hxf73AcH+pn<{dX2SbZQ*kE`9v z^Gk(|d%jw6rd6wN>mK{kwX@n!L+20r{Bh;n)jvx3Xm-)FMLSfvU8UJuH>;FxRjE~u zgkGy}ta!5X)UH`Q+I1SXXH54?omTB%c=qa=WsBcB-+$}vVO3|fTXDAN#)caYJjnZ? z?9=j3nVi+f4jj8V@52-6{VQ(FK*Np}xcU2qb^Gs5xRkTPkP0gg$1gfRyVd?m`(N2V zKX;yDe-=CPR`Ilh?_XF~Ds6IP=g0{i2KJeEq{ZoJms;O^vhUsF6R-8()oa(;6V*>X zTlchbzWVtl$9=Tt(?wISl{k>Q{fE=PdvEf4->seUFzHVBJBy;}uw+5|iF>v_60by??)rqaWYh%4hKOOoh z?xTrC>lYnRcW>P8I!EK)tuv&~^g8vYCsb**>T=x)ttZ$PRxet*WRW4|`lGbP4-cKK zKlakCi{Y34h~(OSw(8cYv^7^2|8ijYCmpu8djHMWOO}4^eE#R-3hh{YrNQ$19o7%H z5_Wv*#<5SQT>G)|wTXAzJxcy(a@h2Y?=ud@PT$pTT&MWu@kQb_S`_-K=E2Dg zD)w#FW#f#G|84Mhy$R($kNBWf?p58tKi4%bdG60m_7%8#|MINMy?=Ra@4dZGhYMYV z0sXpe>HqJTf3^#M^vJtx^s(h_Pp@w{pxyQj7yjOIb5bu`uX-o{{H5+M6O&7x?>+w9 zktSa@S+S*Kw^etp{#a{$ttJ=H=C}5@$=h>x&mui44w*zdYc~+3OqbCCp4})&AtK%YSRP?8?5szWQtJ z#`kV*X_?sO{f_xkCUu^)n*HYc&F_5IJ?`kD8(-fTSz^+xtDA2OS$li-sXeEUZ#~}& z9nLy2`|g}5`t`!4Hld#$Htw-3rq}MoGZ((ydEn+(H#ThTiaMa!+x6~FJ`guLZo!@% zllmR4dgQp{8^@>Oj)_x#TzTpJJ*m%r`@8m#LQAhV=H{<|6y_}Bx_fcYqtbWgs#{KZMm@=fnkn`6^9G?B!{@32B@%i(i=>CKUGiR;( zxoiCcllK?-;&a#B0mJ{Q_2cNfAB`(E_U-r5qc^O+d}#La70b{4GIIKN?eDHnTYP%+ z(|=k_U)puKt6kM$vxjZIJ?7cOW3O+V^I3;m!&9!WxzlU&^**bfeRgTt$6Im?yY{5r z)2MR~HVnJ+@$=awvw!r`lRqN240+!EO!e!-&OJMr6D`iyzQ(@6&S%}8b-H!ws|w+b z-kh_f#RUmovxVAY3RCyiNGJL>tg$KN&Dnd89X1C{Hpu6rYHS=@mM zk0+cRyz>6;KYy7p{qUvHTPywh!^3F@m(CqN;OXYBNqcww+2i2NnKj-y_stg9lVcBh zUF-b&<--F~?krq1{@l_nH6Dz7hUPu(bbrs}>$e&`YBX)`#2N#J=KANaf#rL3xqAL# z#=WN=TxvDSgS}DB*~LCFabjz|3#hGM&-9c&JqHo+qWRGj;Bg5Uf5<+vLn)ggo-sJa zx&lj|*ixlD5^O0!ODA9&30iV|B;(}Ra0qe$$|2AaNdW^DTS6xm4Ymi1Ey<&sK})2^ zmP9sAmKLB0`2=H2w`XCrPds8v8d~Zq&WcCG!;4(JIO^iC z-8rK6Eqb@H!#-`_@^6ZqM^RN;ZtA#n#(~cp45%M7W7MQd7uP%HG|dye{kIxRI$s(X z|L50J3gx^XKl*BH#NZl#pWL}?hI4(jw08Y|{TvPL(EHm?Vx6>Et{Ju8=r{9+)ZdR@ zINI!LpA(IitvLMlgFBbUm;5Z>=09WSc-jgio69&DZ6{z&k)7ZHTsl<}EC!dz9bG~M z1Fpwqsix>szKgtbG<4}yLVD^Rl0P8QcmS6ur0CK&xI`gEm%hOz3Msnu4K7hg(WP&2 zi9(7leS=FBQgrDXT%wSoOW)uUg%n--2A3$L=+Za1L?K0&zQH95DZ2CxE>TF)rEhSF zLW(YZgG&@rbm<#hqL89X-{2C36kYlTmnfv@(l@w7Aw`$I!6gbQy7Ub$QAp9HZ*Yl1 ziY|SFOQcWOI7tQ?P9)XPrR)CLVi}bl%_!Uc>7Hiew^yjRH)h%ySNnq17GK_#b>WfMcQh-oe`-pP;{{iK zpLcE@;Ys8DSE}B0b{l`0?_2MK&WZbnz0v-)_50SG8pxuFi6^#Bt^9hzmbFV_#~U%G zQ|hQ$Pg2mWH6m7yQqzg!k7vJNZU%f20$J# zrWwRUy0mm48BE_8(+pywpfi}hF{T;BL_udTePc{Bh>3#EVEV?GW)Kqvox${tG0h+* z3Oa-78)KS5OcZnm(>KO6gP17j45n|4X$CP-&>2kM7}E@5qM$RFzA>g5#6&@7Fnwc8 zGl+?T&S3h+m}U?Y1)ah4jWNw2CJH)(=^JC3K}-~M2GcjjG=rEZ=nSTBjA;fjQP3Go z-x$*jVxpikn7%Ql8N@_EXE1$ZOf!gyg3e(2#+YUh69t{Y^o=pyAf|dY42GCU^{FMN znE2F|F{avP5-_GhIj0$Czq;EXPK&Kr}R|j|J2#IP@6P z3}PZ*1+oOXnI$m|7?V`*a*DiEiL4AU)dxc48)^-(PmHPK@e_;*v?Q+>Qx7poLrfWB zVy3Z$GFgZfur8=7b^^)ME5_W6t7J1CM(?gZvZS2JeBG9Rc^a#II zam=TM=A6!7aZzzLkP@(HLPId$vQI*+ad}qN~mz}^&3T|d|U16t2Yit|JG}L z|J&z2{i*)@OW&8TgfrD%q8@Rk+SAi}Dibr^oN5mQJ98ywE`1~ZZ6O4;CWrZk2sTtnQBjafSE{QVd^VookFD3VRv{>WU?H?*)yk57M>qi zm;}371erj>BxSLjBCPg_u27bYs##hMUD~7!CX!f~RHdv_*HetZOJL?&gqNgQzr_ru z+Uc9)IZ5l@;bqml*_b@BPrpcN_}j!wLwkhZSmvx5#^*jXm%xY)HQ1saSSoc| z^@J?dBMv+wOZBJ$@5mAZOSKc54p=JP(xm+(bsBO?pODy3CLv2}z!CumGc?H38n8sb z!3+(uv<55@a4-pLxU`>0ZRlN%+Mf9Yrql#2QxIt(i*Tt zz`+a+va|*)5pXa=gDkB9O9ULu&>%}|z!CumGc?H38n8sb!3+(uv<55@a4#e!?%h-oQcMls`a#6!C_T||(`_YJ( z6SCy`>v_S*UWGm_^Wb{=@P|K+a%|fCN%;HYMs2(NOR4P9@3sANM|$@Or+!=9xyJO4 zJMVPJxvEIw>hagloH+ZR91jXdr0nS1E`zVrB<$i_(^g%1xpGFfu74M3xA>(p&H2SQ zPwnI*<{nOeH3NKOUTl|>9OBDJRKc?^!g}%j)DZE6XZ}DRaFHz`Q{FuT^6#5oFrtlJlzQvCz zyhNdI@nZ@vQRrLzn8HgG`W8Q?@Dhc-#g8ex{2#RVF@={X^eui&;Ux-viyu>Xi9EFU zaY`qTV1HGQFA3_zJTj~J(y5*w4DeDpJ4ADgd4}}=!T0oyFCn)_dZWngWA%wk78<|` z4(|+1sEuWuye@HxPkIibeJsIl0VFPEVG&Kgq_MK{ES|WRa^}*2FD2y=ltJ*Nuew+` zX)Lv0S|>QJ2NWYI*Kd3YJ$td%J>yFZFX_bPy?))5#N~+9m;Wu;9(`7>Vx3zDyZzH; z=lEAz&i$oU!M+)tzTX`;_F<7?n^t^LV!oL0X40_t-yZsWSmQRiCbV4nMaj=MZrJu& zQa#s&^-&|!#+TVyp!DJ@vkE!i_@vWbF{xsUGT9=clEyq}{8p2^I}SST9#aird95pP~&!i*oz+ErFzmdT^B2< zim2KXyj0JI_L#lowJyk}{7dx=8y&n<&Y7Wh5#1+C4=;V9%m4E)gY6(|3NL-4%m4E) zgY6(|3NL-4%m4E)gY6(|3NL-4%m4E)gY6(|3NL-4%m4E)gY6(|3NL-4%m4E)gY6(| z3NL*&ko`aZGT08Xrts1ex|B{uBc_zy1$^O6WlF)yieR@6}uk*9Mn zj5WYZ-64?#UYfP`(bFyk<)9z8x>)4tAPe<$5&)!}$V*!H4ln7$N$$OzxeZ1X$f9VF4er!&$*_|>)(`(n{kK_E7Uj7)Rd*&->y8~{-3W(46C^4 z@&31q&MG+QJ?GV!@9m4ue|WrZE z;Gm^9%B8L_7MUGRVw$mpfCo#=jW=`S~ znH^4Inz_uJ#3eF2oFq7C>5X!!D~v^Ehm)9QE;A=_iOdcsG0j|NPT~@o9ZnJ)wDd-~ z)D^}ev%^VDGnbi@xI|`$lbB{MGbeG0%nm0B4qAGnTGPT1=oYFDt_%aMFG0db(`lJuY zJv~E9x-eEcj@^JP;XDr{A5J1bUmuon(Uq~f!dU2EYi9+w-m#gHxI_VDE+t_p4yKNA zsSH{zi-nW!bw}0v4=j~a=KW1ua&YV`s2sVh0ZY1PEVPWxp*!@_mDqGzHtA%Ne!Fut z+PA3uH?K5^SXKGd=La@A&bHk2WeYfq@bKo1zq+>XDSY=t4SX_5O#GJSduLyYK-;Ij zgActNeW~8Qh7}GUTb^9-pmS)^qrca7eKz3Ooi8g*IlQmTD^o_h9!wnA?=pM5`=!17 zn8fD|m#<44lpQ%@MGwGIBnMB@xKek9u7)d-dg!H7)D9le_Ji6pR+LZv_601Zo5-7n z!j+<&TGnu-^a1{w#QzKhu(XIP(Th0rlERhfMI3rb;Y#!(4!xvsC3+EuUQ)Ocy@*3E zDO`zO#G#iIu0${5&`Szeq8D-KC50=|i#YU>!jP}qHrXqNb7}hNk*+gOF)(+IgE8lkfok* zDfK^+I>0u^Gp5g3!ugmO_4^Ag0jNt__l_*JPO%7D#nx!p<)y0)tJMsvGNSpDe+x!N zvY#{Y~8+mW7-)myJvYaM<3 zYv_aKm1wp9)lK}I2^$-qn-y_k{)Di3-g?Da>*(WOLm#xP)a~1?j$Q5cc{`Y_2-;xd!+mZ;0LtkWhfY0x6|XyK!? zm-JfF=!o50uUKmxef(?ag9^2q64}NPv$pNpW&>(9svngQ)xle@SZf`9{A=ig5l_SVfRrCU{MmBUivGL!O_XmVud$O#<=_L+C2#p!96THk!K?_F=bVy$)b z@vor|I#M)St$%9wA6+e%kf&XdCw+@YR`J#=)>=m&{~G$B#a9|Ezu#f~fGc6gr*0hk zbjr0KD_crjW>Ve~&HcH_z5-Y8U!HZj_b;#Qy|?%2aKT%zSZf`9{A=ig7Ccz+bii-@ zUmkGg?DY-z5@sf~YVWOAthJ6l{x$SLN2?w=?)b*>skmd}lpj}KdVf#qGfRofOv+oL z>EE@#yFP94>CI37X)%3i*X6EuRlW6!wbs$czlJ{O`LxI1HQJfuz~Tdy>#nYQBW_vT z0dKuxt#$PAub~f;PhW75lR|X(Qu2w37i$?`ItU#M@|F&aHR-&i^Z~ggW-W2 zdIp)u=5%5>Fe`*6<1sv~<;*nfWCwlm|h$8Kx-$vb~UUC0*S zWQ?=Jx7V(rS8|IhUMoG#S=U)6GTOOm`MTf6Jw75GdHG;>tGnwT?l?6*y!Gy(z1g$N za_=b2FZ^)Nzm4Bvx{Z3{anp#BaS<_l;~SQ;PYEv_p8W3c5+}R2uN5)l#7`TpkC^o3 zB=Jz{=k?Ad=S?XwBk|DK*Lwf`Nr`qh@19*X?%>MjPg|Z@u_^1C+o-lD(xrm{cgA5? z)A*8}h@L$mOs5RjaV&&Fm;_)teL$o! zLzw0O6V9IrF~T$lnCO>X53?1|pEYkn)@>KMgaToj156Y@E6bIK6%QYN^hJX#_D~>9 zbAXA?_q_FO)aIgD9+YeS`D?n;*i1s0<^U5Vd=l9?JOdrQfQpM1LV+;N0Vc{49>bi- z+W&*@eX<-G8484H4lvOdIg4#Oec_#TMWges-JvUu%_M|r4lq%vynD92da+cW;p>XG zWkZ25%>gEgODo>0X8T6V%gwcQhzJG3GzXYy%E&2e3pQF@^ZJTI5esysv6+N0%>gEw zcwo_i0do$_?!Z64{7)zlra8bwaa-G|(>8F}&U3z;r?UXX|YX=WPu6-01>0oP6%GF-REz6bMk23_wPPTmgpz zg6pjg2-*OLPi;^KoZ0}7(KH!=^H$VbiTFqsbwH8|>Tf|@rvs;Q)e(nwi3=YKN(P|A zF1eS>j?0790ZtoW?bNSBgHZJf4%1Q9E8yAjqa*lr7o=#l5vZnBFA;H1A94wFgHZ>7 zYDx`g&+c;3KLT^0T*27w^lt$DPZ>arouz*SYNgdnI4AXpP^GI52)O4e5eq6l)d3M> zG<86IcE;|+2Y#pn%Cj>(V@EEW(IX@9Z*nh&!KXs11M0Ig3><(;4XDq~;M-{f0OQnK z3Aiqt+zN1@I^eKF{#hH*o*mjmQNQleo}F>&7O?j0EJObYD4YBU%h{>laB0uZ^6(q5 z{@@R95|{|>8iAfI#;!d*>%dKcv}?4-XLVZ()TiDJ&gy~PuU-Sk)Dqb^sDGw}W8l0` zbqG2!Qy0O`QAc>thju$Sd`KM;ao=3^hhWat5eL1N7*^E+VmOy>=R?P7auMuHYTg*I zFX{-38~mz21pUg?5gxRujleUgBLYtg2Q8fN2!id;@S=;FZ3YPH>P1e>R#$%rHkUf$ z(oGT2cFBmq=%xskg*pNOF8Xeu1;zd`0Jx!gSBJm=(j%G{V1}qEVxhgCdJRwS zA{N%OIwI1$h=m4b>Iibs+lYlNst&p6ZNvgwUKwHGT}BHBq;+)!|El&t@QPMPAjnLO z07XI`K|E_0baMo67xf~M-bO4GZmAIkEoBA2EG z=+;k}VGdTZdJRuc5og!50B>(fI1bs>#lXUIQ**@GH7!Vq0d-zE%{_#dD?LRVoDEJy z;8=Q!IPfOa5z4Vaws1~!5#hB$&k+Y_!KoLC^b~P$vY0yJq^F3}oJ0_So+7+)$Td8p zOc9cHKd1SL;EmCij)R9#FXCxS$7zlt%L}xn!?U7Z;~Q6pFjc>b{n65CO|NOK-pryX8_+C`f4$ikyiTHrO`k#%zLtJ*c1@5nlN z+<8R(9hO6?bif0ow7_f5BMY^Glooi+c?6f2o+4iJ9pU9lPZ2hvM5nNPDB%#VIghLh za%z-xn)ArI1bT{i#d*Y5y$-w~!kH$|H7$iY^Tv;gyucR#N=j~vtk(^}A+N1#mVrU+m*5rJWJ zQ>6Kh_@q#Jp=!P(2X3;R!auy`Jc1dArLHX#&3WV)2Mx@4&36O?4{s*z8qIg);MGPi zRF}FI!15#bU(`jaVSu*>Zt{x%uzm#1d4!h&Y+hC#LGv9sc(qYl5ES1L;~#kYfcK#N zkmfwX-Ds#UXwDZV+>HQus&I zoJS6#j?^{+WUO6;eKk!4&3EJ=WJGB})O<${=p)qP7B$}ye&0b`I#F{TISA)adtB6< zN6uxZrwAMvRX7*MR+?~{?+E?|Jw@0~$y$K-ADj(EEg(^I9yu4_aq4!O^N1Z=YITFB zq>13tO_An1@?dFbEy%tj%s(s}Qjy&KJbr%8tfyyma1aQ`=IdW*O1o&h0 zHgah83|t_3uQ=dk?Q+RceZVX9W&urs#2kakRQM0?d)fcwIi7xW<%`nMbmWWVGkR*3 z&+y@9_-oP)$!D}$X@NZgbKsJUS=6T$j(CvE;I>rEF zAT+PTU&?1XkU&0D9!|#J@`tdfY1K$Kbcl3JLiwJ9-ooTF+If&abK<}~{F8n-eQZyT zKSLl##RIS9u?(>A^G8zQV3~tv#LlyTq1~C;?plC%Ddj)O+7iKR8H5pZ zE`f4Chue+-{4EMn>l6Ga*di%kbkSKG`7@_zSeOtLqCIi)J;Rz2oenx`A%72Yi1_>y z{HOh}3%muxXF7nVTrAK)k$gtKkEG8WtS*E=K2zgT7=J1sg0t`T!w_1>WL5m93J4(y zgQ<2vfX{t>z-M#{SpE%It8VK9fdkDL)a4KWzq|i15Ovus z<$DmUq41~jA$}XeKj|litfu=5#sSW-+mrC{_Qsv2^w+v{=mo|gyX3;oobo+*|B??4 z`yE_EI$SG#4}4bI-6x+JtRwD4>@Ey^Mn`g`YvKG?mQI_>Hw1i1X(2r=F{Nj6n$!a} zKGxQzS}er+Vr#qjx=v>-SDO_awcxels8bhqdaYPKwr+Ga2gC_$Ibv#q1&paB#9}SP zh_&k0j$yf4FpsWisJV@5nwpv(XLI0~i&X!dGB_Ekp#@u1006-8p5OUO6DdU^*clCJN&{lMujBsqOCpuY6-q&+)@XHlgHbe@E!JlX F=MUNj5QqQ( diff --git a/gbs-control.ino b/gbs-control.ino index 167d43f3..5e02ec48 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -8,7 +8,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Sunday, 16th June 2024 2:21:46 am # +# Last Modified: Tuesday, 18th June 2024 12:42:27 am # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -120,7 +120,7 @@ void setup() rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; rto->deinterlaceAutoEnabled = true; - rto->scanlinesEnabled = false; + // rto->scanlinesEnabled = false; rto->boardHasPower = true; rto->presetIsPalForce60 = false; rto->syncTypeCsync = false; @@ -132,7 +132,7 @@ void setup() rto->inputIsYPbPr = false; rto->videoStandardInput = 0; - rto->outModeHdBypass = false; + // rto->outModeHdBypass = false; // rto->videoIsFrozen = false; rto->printInfos = false; rto->sourceDisconnected = true; @@ -365,30 +365,6 @@ void loop() menuLoop(); wifiLoop(); - // Input signal detection - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { - if ((millis() - lastTimeSourceCheck) >= 500) { - if (checkBoardPower()) { - inputAndSyncDetect(); - } else { - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - rto->syncWatcherEnabled = false; - } - lastTimeSourceCheck = millis(); - - // vary SOG slicer level from 2 to 6 - uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); - if (currentSOG >= 3) { - rto->currentLevelSOG = currentSOG - 1; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); - } else { - rto->currentLevelSOG = 6; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); - } - } - } - // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && rto->syncWatcherEnabled @@ -435,7 +411,7 @@ _DBGN(F("11")); } } - // information mode + // TODO heavy load for serial and WS. to reimplement if (rto->printInfos == true) { printInfo(); } @@ -538,10 +514,13 @@ _DBGN(F("73")); if (rto->extClockGenDetected && rto->videoStandardInput != 14) { // switch to ext clock - if (!rto->outModeHdBypass) { - if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // if (!rto->outModeHdBypass) { + if (uopt->resolutionID != OutputHdBypass) { + uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); + if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D - GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // GBS::GBS_PRESET_DISPLAY_CLOCK::write(pll648_value); + rto->presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -577,6 +556,30 @@ _DBGN(F("8")); _DBGN(F("9")); } + // Input signal detection + if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { + if ((millis() - lastTimeSourceCheck) >= 500) { + if (checkBoardPower()) { + inputAndSyncDetect(); + } else { + // rto->boardHasPower = false; + rto->continousStableCounter = 0; + rto->syncWatcherEnabled = false; + } + lastTimeSourceCheck = millis(); + + // vary SOG slicer level from 2 to 6 + uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); + if (currentSOG >= 3) { + rto->currentLevelSOG = currentSOG - 1; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } else { + rto->currentLevelSOG = 6; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } + } + } + // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues diff --git a/public/src/index.ts b/public/src/index.ts index 9fe8c7d8..17d31b3e 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -1592,7 +1592,7 @@ const initGBSButtons = () => { // custom events applied for some buttons button.addEventListener('click', () => { if(message == '1' && messageType == 'user') { - // reset to defaults (factory) command + // reset to defaults (factory) button gbsAlert( 'L{RESET_BUTTON_JS_ALERT_MESSAGE}', '

    close
    L{JS_NO}
    ', @@ -1611,10 +1611,20 @@ const initGBSButtons = () => { ).catch(() => { }); } else if(message == 'a' && messageType == 'user') { - // restart device command - window.setTimeout(() => { - window.location.reload() - }, 5000) + // RESTART button + button.setAttribute('disabled', '') + action(message, button) + // restart device and reload page after countdown + let countdown = 10; + const buttonMessage = (val: string) => { + button.innerHTML = `
    L{PAGE_RELOAD_IN}
    ${val} L{SECONDS_SHORT}
    ` + } + window.setInterval(() => { + buttonMessage(countdown.toString()) + countdown--; + if(countdown == 0) + window.location.reload() + }, 1000) } else { // all other buttons action(message, button) diff --git a/public/src/style.css b/public/src/style.css index 5d32e824..b2f055d6 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -81,6 +81,10 @@ body { user-select: none; } +.gbs-text-center { + text-align: center; +} + /** main container */ .gbs-container { background-color: var(--color-mine-shaft); diff --git a/src/OSDManager.cpp b/src/OSDManager.cpp index 62391fb8..9d575ef7 100644 --- a/src/OSDManager.cpp +++ b/src/OSDManager.cpp @@ -55,6 +55,7 @@ bool osdScanlines(OSDMenuConfig &config) } GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); // saveUserPrefs(); + savePresetToFS(); slotFlush(); } config.barLength = 128; diff --git a/src/framesync.cpp b/src/framesync.cpp index 91f4dcbb..f638acb9 100644 --- a/src/framesync.cpp +++ b/src/framesync.cpp @@ -3,7 +3,7 @@ # File: framesync.cpp # # File Created: Sunday, 5th May 2024 12:52:08 pm # # Author: # -# Last Modified: Tuesday, 4th June 2024 6:12:08 pm # +# Last Modified: Tuesday, 18th June 2024 12:16:32 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -303,11 +303,12 @@ bool FrameSyncManager::runFrequency() return true; } - if (rto->outModeHdBypass) + // if (rto->outModeHdBypass) + if (uopt->resolutionID == OutputHdBypass) { - #ifdef FRAMESYNC_DEBUG - _DBGN(F("Skipping FrameSyncManager::runFrequency(), rto->outModeHdBypass")); - #endif + // #ifdef FRAMESYNC_DEBUG + // _DBGN(F("Skipping FrameSyncManager::runFrequency(), rto->outModeHdBypass")); + // #endif return true; } if (GBS::PLL648_CONTROL_01::read() != 0x75) diff --git a/src/main.cpp b/src/main.cpp index abc294c8..38c743be 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Sunday, 16th June 2024 2:21:46 am # +# Last Modified: Tuesday, 18th June 2024 12:42:27 am # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -115,7 +115,7 @@ void setup() rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; rto->deinterlaceAutoEnabled = true; - rto->scanlinesEnabled = false; + // rto->scanlinesEnabled = false; rto->boardHasPower = true; rto->presetIsPalForce60 = false; rto->syncTypeCsync = false; @@ -127,7 +127,7 @@ void setup() rto->inputIsYPbPr = false; rto->videoStandardInput = 0; - rto->outModeHdBypass = false; + // rto->outModeHdBypass = false; // rto->videoIsFrozen = false; rto->printInfos = false; rto->sourceDisconnected = true; @@ -360,30 +360,6 @@ void loop() menuLoop(); wifiLoop(); - // Input signal detection - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { - if ((millis() - lastTimeSourceCheck) >= 500) { - if (checkBoardPower()) { - inputAndSyncDetect(); - } else { - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - rto->syncWatcherEnabled = false; - } - lastTimeSourceCheck = millis(); - - // vary SOG slicer level from 2 to 6 - uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); - if (currentSOG >= 3) { - rto->currentLevelSOG = currentSOG - 1; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); - } else { - rto->currentLevelSOG = 6; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); - } - } - } - // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false && rto->autoBestHtotalEnabled && rto->syncWatcherEnabled @@ -430,7 +406,7 @@ _DBGN(F("11")); } } - // information mode + // TODO heavy load for serial and WS. to reimplement if (rto->printInfos == true) { printInfo(); } @@ -533,10 +509,13 @@ _DBGN(F("73")); if (rto->extClockGenDetected && rto->videoStandardInput != 14) { // switch to ext clock - if (!rto->outModeHdBypass) { - if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // if (!rto->outModeHdBypass) { + if (uopt->resolutionID != OutputHdBypass) { + uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); + if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D - GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // GBS::GBS_PRESET_DISPLAY_CLOCK::write(pll648_value); + rto->presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -572,6 +551,30 @@ _DBGN(F("8")); _DBGN(F("9")); } + // Input signal detection + if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { + if ((millis() - lastTimeSourceCheck) >= 500) { + if (checkBoardPower()) { + inputAndSyncDetect(); + } else { + // rto->boardHasPower = false; + rto->continousStableCounter = 0; + rto->syncWatcherEnabled = false; + } + lastTimeSourceCheck = millis(); + + // vary SOG slicer level from 2 to 6 + uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); + if (currentSOG >= 3) { + rto->currentLevelSOG = currentSOG - 1; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } else { + rto->currentLevelSOG = 6; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } + } + } + // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues diff --git a/src/options.h b/src/options.h index 5a77eaa2..2916158f 100644 --- a/src/options.h +++ b/src/options.h @@ -193,12 +193,13 @@ struct runTimeOptions bool isInLowPowerMode; bool sourceDisconnected; /** - * @brief Video input ID (see: getVideoMode()): + * @brief This variable is used to store an active videoID (of the last detection). + * Video input ID (see: getVideoMode()): * 0 - unknown/none * 1 - NTSC-like <---------¬ - * 2 - PAL-like <------|----¬ - * 3 - 480p NTSC (edtv, 60Hz, progressive) <---------| |-- PAL - * 4 - 576p PAL (edtv, 50Hz, progressive) <------|---⨼ + * 2 - PAL-like <------|-----¬ + * 3 - 480p NTSC (edtv, 60Hz, progressive) <---------| |-- PAL + * 4 - 576p PAL (edtv, 50Hz, progressive) <------|----⨼ * 5 - hdtv 720p <---|--------¬ * 6 - ? (hdtv 1080i // 576p) <---|--------| * 7 - hdtv 1080p <---|--------| @@ -217,6 +218,7 @@ struct runTimeOptions uint8_t medResLineCount; // bool isCustomPreset; + uint8_t presetDisplayClock; uint32_t freqExtClockGen; uint16_t noSyncCounter; // is always at least 1 when checking value in syncwatcher uint8_t presetVlineShift; @@ -231,7 +233,7 @@ struct runTimeOptions bool clampPositionIsSet; bool coastPositionIsSet; bool phaseIsSet; - bool outModeHdBypass; + // bool outModeHdBypass; bool printInfos; bool allowUpdatesOTA; bool enableDebugPings; @@ -240,7 +242,7 @@ struct runTimeOptions bool forceRetime; bool motionAdaptiveDeinterlaceActive; bool deinterlaceAutoEnabled; - bool scanlinesEnabled; + // bool scanlinesEnabled; bool presetIsPalForce60; bool isValidForScalingRGBHV; bool useHdmiSyncFix; diff --git a/src/presets.cpp b/src/presets.cpp index 92b1c146..68db3f59 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Sunday, 16th June 2024 2:26:12 am # +# Last Modified: Tuesday, 18th June 2024 12:42:27 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -41,11 +41,12 @@ void setResetParameters() { // TODO: do we reset resolution here? rto->videoStandardInput = 0; + rto->presetDisplayClock = 0; // rto->videoIsFrozen = false; rto->applyPresetDoneStage = 0; rto->presetVlineShift = 0; rto->sourceDisconnected = true; - rto->outModeHdBypass = 0; + // rto->outModeHdBypass = 0; rto->clampPositionIsSet = 0; rto->coastPositionIsSet = 0; rto->phaseIsSet = 0; @@ -57,7 +58,7 @@ void setResetParameters() rto->failRetryAttempts = 0; rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; - rto->scanlinesEnabled = false; + // rto->scanlinesEnabled = false; rto->syncTypeCsync = false; rto->isValidForScalingRGBHV = false; rto->medResLineCount = 0x33; // 51*8=408 @@ -79,10 +80,10 @@ void setResetParameters() GBS::ADC_UNUSED_65::write(0); GBS::ADC_UNUSED_66::write(0); GBS::ADC_UNUSED_67::write(0); - GBS::GBS_PRESET_CUSTOM::write(0); + // GBS::GBS_PRESET_CUSTOM::write(0); GBS::GBS_PRESET_ID::write(0); - GBS::GBS_OPTION_SCALING_RGBHV::write(0); - GBS::GBS_OPTION_PALFORCED60_ENABLED::write(0); + // GBS::GBS_OPTION_SCALING_RGBHV::write(0); + // GBS::GBS_OPTION_PALFORCED60_ENABLED::write(0); // set minimum IF parameters GBS::IF_VS_SEL::write(1); @@ -255,10 +256,12 @@ void doPostPresetLoadSteps() GBS::SP_H_PROTECT::write(0); GBS::SP_COAST_INV_REG::write(0); // just in case - if (!rto->outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) + // if (!rto->outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) + // if (!rto->outModeHdBypass && !uopt->preferScalingRgbhv) + if (uopt->resolutionID != OutputHdBypass && !uopt->preferScalingRgbhv) { // setOutputHdBypassMode has it's own and needs to update later - updateSpDynamic(false); // remember: rto->videoStandardInput for RGB(C/HV) in scaling is 1, 2 or 3 here + updateStopPositionDynamic(false); // remember: rto->videoStandardInput for RGB(C/HV) in scaling is 1, 2 or 3 here } GBS::SP_NO_CLAMP_REG::write(1); // (keep) clamp disabled, to be enabled when position determined @@ -280,7 +283,8 @@ void doPostPresetLoadSteps() applyRGBPatches(); } - if (rto->outModeHdBypass) + // if (rto->outModeHdBypass) + if (uopt->resolutionID == OutputHdBypass) { GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP rto->autoBestHtotalEnabled = false; @@ -319,7 +323,7 @@ void doPostPresetLoadSteps() rto->continousStableCounter = 0; rto->noSyncCounter = 0; rto->motionAdaptiveDeinterlaceActive = false; - rto->scanlinesEnabled = false; + // rto->scanlinesEnabled = false; rto->failRetryAttempts = 0; // rto->videoIsFrozen = true; // ensures unfreeze rto->sourceDisconnected = false; // this must be true if we reached here (no syncwatcher operation) @@ -700,11 +704,14 @@ void doPostPresetLoadSteps() } // always start with internal clock active first - if (GBS::PLL648_CONTROL_01::read() == 0x75 && GBS::GBS_PRESET_DISPLAY_CLOCK::read() != 0) + // if (GBS::PLL648_CONTROL_01::read() == 0x75 && GBS::GBS_PRESET_DISPLAY_CLOCK::read() != 0) + if (GBS::PLL648_CONTROL_01::read() == 0x75 && rto->presetDisplayClock != 0) { - GBS::PLL648_CONTROL_01::write(GBS::GBS_PRESET_DISPLAY_CLOCK::read()); + // GBS::PLL648_CONTROL_01::write(GBS::GBS_PRESET_DISPLAY_CLOCK::read()); + GBS::PLL648_CONTROL_01::write(rto->presetDisplayClock); } - else if (GBS::GBS_PRESET_DISPLAY_CLOCK::read() == 0) + // else if (GBS::GBS_PRESET_DISPLAY_CLOCK::read() == 0) + else if (rto->presetDisplayClock == 0) { _WSN(F("no stored display clock to use!")); } @@ -712,7 +719,8 @@ void doPostPresetLoadSteps() if (rto->presetIsPalForce60) { - if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() != 1) + // if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() != 1) + if (!uopt->PalForce60) { _WSN(F("pal forced 60hz: apply vshift")); uint16_t vshift = 56; // default shift @@ -726,7 +734,9 @@ void doPostPresetLoadSteps() GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + vshift); } GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); - GBS::GBS_OPTION_PALFORCED60_ENABLED::write(1); + // TODO enabling uopt->PalForce60 ? + uopt->PalForce60 = true; + // GBS::GBS_OPTION_PALFORCED60_ENABLED::write(1); } } @@ -842,8 +852,10 @@ void doPostPresetLoadSteps() GBS::VDS_SYNC_EN::write(0); GBS::VDS_FLOCK_EN::write(0); - if (!rto->outModeHdBypass && rto->autoBestHtotalEnabled && - GBS::GBS_OPTION_SCALING_RGBHV::read() == 0 && !avoidAutoBest && + // if (!rto->outModeHdBypass && rto->autoBestHtotalEnabled && + if (uopt->resolutionID != OutputHdBypass && rto->autoBestHtotalEnabled && + // GBS::GBS_OPTION_SCALING_RGBHV::read() == 0 && !avoidAutoBest && + !uopt->preferScalingRgbhv && !avoidAutoBest && (rto->videoStandardInput >= 1 && rto->videoStandardInput <= 4)) { // autobesthtotal @@ -921,7 +933,8 @@ void doPostPresetLoadSteps() // late adjustments that require some delay time first if (!rto->isCustomPreset) { - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + // if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + if (videoStandardInputIsPalNtscSd() && uopt->resolutionID != OutputHdBypass) { // SNES has less total lines and a slight offset (only relevant in 60Hz) if (GBS::VPERIOD_IF::read() == 523) @@ -979,7 +992,8 @@ void doPostPresetLoadSteps() // 4_12 should be set by preset } - if (!rto->outModeHdBypass) + // if (!rto->outModeHdBypass) + if (uopt->resolutionID != OutputHdBypass) { ResetSDRAM(); } @@ -1024,7 +1038,8 @@ void doPostPresetLoadSteps() rto->coastPositionIsSet = false; // re-arm these rto->clampPositionIsSet = false; - if (rto->outModeHdBypass) + // if (rto->outModeHdBypass) + if (uopt->resolutionID == OutputHdBypass) { GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status @@ -1034,25 +1049,25 @@ void doPostPresetLoadSteps() return; // to setOutputHdBypassMode(); } - if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) + // if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) + if (uopt->preferScalingRgbhv) { rto->videoStandardInput = 14; - } - - if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) + } else + // if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) { unsigned long timeout = millis(); while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { delay(4); // wifiLoop(0); - updateSpDynamic(false); + updateStopPositionDynamic(false); } while ((getVideoMode() == 0) && (millis() - timeout < 1505)) { delay(4); // wifiLoop(0); - updateSpDynamic(false); + updateStopPositionDynamic(false); } timeout = millis() - timeout; @@ -1080,7 +1095,7 @@ void doPostPresetLoadSteps() } } - updateSpDynamic(false); + updateStopPositionDynamic(false); if (!rto->syncWatcherEnabled) { @@ -1252,7 +1267,8 @@ void applyPresets(uint8_t videoMode) } } - if (rto->outModeHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) + // if (rto->outModeHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) + if (uopt->resolutionID == OutputHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) { waitExtra = 1; if (videoMode <= 4 || videoMode == 14 || videoMode == 8 || videoMode == 9) @@ -1263,7 +1279,7 @@ void applyPresets(uint8_t videoMode) } } rto->presetIsPalForce60 = 0; // the default - rto->outModeHdBypass = 0; // the default at this stage + // rto->outModeHdBypass = 0; // the default at this stage // in case it is set; will get set appropriately later in doPostPresetLoadSteps() // GBS::GBS_PRESET_CUSTOM::write(0); @@ -1813,10 +1829,11 @@ void savePresetToFS() // GBS::GBS_PRESET_CUSTOM::write(1); // use one reserved bit to mark this as a custom preset // TODO don't store scanlines - WHY? - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - { - disableScanlines(); - } + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + // if (uopt->wantScanlines) + // { + // disableScanlines(); + // } if (!rto->extClockGenDetected) { diff --git a/src/tv5725.h b/src/tv5725.h index b6881fca..2105e941 100644 --- a/src/tv5725.h +++ b/src/tv5725.h @@ -30,321 +30,666 @@ class TV5725 : public tw::SegmentedSlave using UReg = Register; public: - // STATUS Registers - // Arbitary names for STATUS_IF register - typedef UReg<0x00, 0x00, 0, 8> STATUS_00; // whole register for convenience - typedef UReg<0x00, 0x00, 0, 1> STATUS_IF_VT_OK; - typedef UReg<0x00, 0x00, 1, 1> STATUS_IF_HT_OK; - typedef UReg<0x00, 0x00, 2, 1> STATUS_IF_HVT_OK; - typedef UReg<0x00, 0x00, 3, 1> STATUS_IF_INP_NTSC_INT; - typedef UReg<0x00, 0x00, 4, 1> STATUS_IF_INP_NTSC_PRG; - typedef UReg<0x00, 0x00, 5, 1> STATUS_IF_INP_PAL_INT; - typedef UReg<0x00, 0x00, 6, 1> STATUS_IF_INP_PAL_PRG; - typedef UReg<0x00, 0x00, 7, 1> STATUS_IF_INP_SD; - typedef UReg<0x00, 0x01, 0, 1> STATUS_IF_INP_VGA60; - typedef UReg<0x00, 0x01, 1, 1> STATUS_IF_INP_VGA75; - typedef UReg<0x00, 0x01, 2, 1> STATUS_IF_INP_VGA86; - typedef UReg<0x00, 0x01, 3, 1> STATUS_IF_INP_VGA; - typedef UReg<0x00, 0x01, 4, 1> STATUS_IF_INP_SVGA60; - typedef UReg<0x00, 0x01, 5, 1> STATUS_IF_INP_SVGA75; - typedef UReg<0x00, 0x01, 6, 1> STATUS_IF_INP_SVGA85; - typedef UReg<0x00, 0x01, 7, 1> STATUS_IF_INP_SVGA; - typedef UReg<0x00, 0x02, 0, 1> STATUS_IF_INP_XGA60; - typedef UReg<0x00, 0x02, 1, 1> STATUS_IF_INP_XGA70; - typedef UReg<0x00, 0x02, 2, 1> STATUS_IF_INP_XGA75; - typedef UReg<0x00, 0x02, 3, 1> STATUS_IF_INP_XGA85; - typedef UReg<0x00, 0x02, 4, 1> STATUS_IF_INP_XGA; - typedef UReg<0x00, 0x02, 5, 1> STATUS_IF_INP_SXGA60; - typedef UReg<0x00, 0x02, 6, 1> STATUS_IF_INP_SXGA75; - typedef UReg<0x00, 0x02, 7, 1> STATUS_IF_INP_SXGA85; - typedef UReg<0x00, 0x03, 0, 8> STATUS_03; // whole register for convenience - typedef UReg<0x00, 0x03, 0, 1> STATUS_IF_INP_SXGA; - typedef UReg<0x00, 0x03, 1, 1> STATUS_IF_INP_PC; - typedef UReg<0x00, 0x03, 2, 1> STATUS_IF_INP_720P50; - typedef UReg<0x00, 0x03, 3, 1> STATUS_IF_INP_720P60; - typedef UReg<0x00, 0x03, 4, 1> STATUS_IF_INP_720; - typedef UReg<0x00, 0x03, 5, 1> STATUS_IF_INP_2200_1125I; - typedef UReg<0x00, 0x03, 6, 1> STATUS_IF_INP_2376_1250I; - typedef UReg<0x00, 0x03, 7, 1> STATUS_IF_INP_2640_1125I; - typedef UReg<0x00, 0x04, 0, 8> STATUS_04; // whole register for convenience - typedef UReg<0x00, 0x04, 0, 1> STATUS_IF_INP_1080I; - typedef UReg<0x00, 0x04, 1, 1> STATUS_IF_INP_2200_1125P; - typedef UReg<0x00, 0x04, 2, 1> STATUS_IF_INP_2376_1250P; - typedef UReg<0x00, 0x04, 3, 1> STATUS_IF_INP_2640_1125P; - typedef UReg<0x00, 0x04, 4, 1> STATUS_IF_INP_1808P; - typedef UReg<0x00, 0x04, 5, 1> STATUS_IF_INP_HD; - typedef UReg<0x00, 0x04, 6, 1> STATUS_IF_INP_INT; - typedef UReg<0x00, 0x04, 7, 1> STATUS_IF_INP_PRG; - typedef UReg<0x00, 0x05, 0, 8> STATUS_05; // whole register for convenience - typedef UReg<0x00, 0x05, 0, 1> STATUS_IF_INP_USER; - typedef UReg<0x00, 0x05, 1, 1> STATUS_IF_NO_SYNC; - typedef UReg<0x00, 0x05, 2, 1> STATUS_IF_HT_BAD; - typedef UReg<0x00, 0x05, 3, 1> STATUS_IF_VT_BAD; - typedef UReg<0x00, 0x05, 4, 1> STATUS_IF_INP_SW; - - typedef UReg<0x00, 0x06, 0, 9> HPERIOD_IF; - typedef UReg<0x00, 0x07, 1, 11> VPERIOD_IF; - - typedef UReg<0x00, 0x09, 6, 1> STATUS_MISC_PLL648_LOCK; - typedef UReg<0x00, 0x09, 7, 1> STATUS_MISC_PLLAD_LOCK; - typedef UReg<0x00, 0x0A, 0, 1> STATUS_MISC_PIP_EN_V; - typedef UReg<0x00, 0x0A, 1, 1> STATUS_MISC_PIP_EN_H; - typedef UReg<0x00, 0x0A, 4, 1> STATUS_MISC_VBLK; - typedef UReg<0x00, 0x0A, 5, 1> STATUS_MISC_HBLK; - typedef UReg<0x00, 0x0A, 6, 1> STATUS_MISC_VSYNC; - typedef UReg<0x00, 0x0A, 7, 1> STATUS_MISC_HSYNC; + // + // STATUS Registers (all registers RO) + // + typedef UReg<0x00, 0x00, 0, 8> STATUS_00; // INPUT MODE STATUS 00 + typedef UReg<0x00, 0x00, 0, 1> STATUS_IF_VT_OK; // Vertical stable indicator (When =1, means input vertical timing is stable) + typedef UReg<0x00, 0x00, 1, 1> STATUS_IF_HT_OK; // Horizontal stable indicator (When =1, means input horizontal timing is table) + typedef UReg<0x00, 0x00, 2, 1> STATUS_IF_HVT_OK; // H & V stable indicator (When =1, means input H/V timing are both stable) + typedef UReg<0x00, 0x00, 3, 1> STATUS_IF_INP_NTSC_INT; // NTSC interlace indicator (When =1, means input is NTSC interlace (480i) source) + typedef UReg<0x00, 0x00, 4, 1> STATUS_IF_INP_NTSC_PRG; // NTSC progressive indicator (When =1, means input is NTSC progressive (480P) source) + typedef UReg<0x00, 0x00, 5, 1> STATUS_IF_INP_PAL_INT; // PAL interlace indicator (When =1, means input is PAL interlace (576i) source) + typedef UReg<0x00, 0x00, 6, 1> STATUS_IF_INP_PAL_PRG; // PAL progressive indicator (When =1, means input is PAL progressive (576P) source) + typedef UReg<0x00, 0x00, 7, 1> STATUS_IF_INP_SD; // SD mode indicator (When =1, means input is SD mode (480i, 480P, 576i, 576P)) + typedef UReg<0x00, 0x01, 0, 1> STATUS_IF_INP_VGA60; // VGA 60Hz mode (When =1, means input is VGA (640x480) 60Hz mode) + typedef UReg<0x00, 0x01, 1, 1> STATUS_IF_INP_VGA75; // VGA 75Hz mode (When =1, means input is VGA (640x480) 75Hz mode) + typedef UReg<0x00, 0x01, 2, 1> STATUS_IF_INP_VGA86; // VGA 85 Hz mode (When =1, means input is VGA (640x480) 85Hz mode) + typedef UReg<0x00, 0x01, 3, 1> STATUS_IF_INP_VGA; // VGA mode indicator (When =1, means input is VGA (640x480) source, include 60Hz/75Hz/85Hz) + typedef UReg<0x00, 0x01, 4, 1> STATUS_IF_INP_SVGA60; // SVGA 60Hz mode (When =1, means input is SVGA (800x600) 60Hz mode) + typedef UReg<0x00, 0x01, 5, 1> STATUS_IF_INP_SVGA75; // SVGA 75Hz mode (When =1, means input is SVGA (800x600) 75Hz mode) + typedef UReg<0x00, 0x01, 6, 1> STATUS_IF_INP_SVGA85; // SVGA 85Hz mode (When =1, means input is SVGA (800x600) 85Hz mode) + typedef UReg<0x00, 0x01, 7, 1> STATUS_IF_INP_SVGA; // SVGA mode indicator (When =1, means input is SVGA (800x600) source, include 60Hz/75Hz/85Hz) + typedef UReg<0x00, 0x02, 0, 1> STATUS_IF_INP_XGA60; // XGA 60Hz mode (When =1, means input is XGA (1024x768) 60Hz mode) + typedef UReg<0x00, 0x02, 1, 1> STATUS_IF_INP_XGA70; // XGA 70Hz mode (When =1, means input is XGA (1024x768) 70Hz mode) + typedef UReg<0x00, 0x02, 2, 1> STATUS_IF_INP_XGA75; // XGA 75Hz mode (When =1, means input is XGA (1024x768) 75Hz mode) + typedef UReg<0x00, 0x02, 3, 1> STATUS_IF_INP_XGA85; // XGA 85Hz mode (When =1, means input is XGA (1024x768) 85Hz mode) + typedef UReg<0x00, 0x02, 4, 1> STATUS_IF_INP_XGA; // XGA mode indicator (When =1, means input is XGA (1024x768) source, include 60/70/75/85Hz) + typedef UReg<0x00, 0x02, 5, 1> STATUS_IF_INP_SXGA60; // SXGA 60Hz mode (When =1, means input is SXGA (1280x1024) 60Hz mode) + typedef UReg<0x00, 0x02, 6, 1> STATUS_IF_INP_SXGA75; // SXGA 75Hz mode (When =1, means input is SXGA (1280x1024) 75Hz mode) + typedef UReg<0x00, 0x02, 7, 1> STATUS_IF_INP_SXGA85; // SXGA 85Hz mode (When =1, means input is SXGA (1280x1024) 85Hz mode) + typedef UReg<0x00, 0x03, 0, 8> STATUS_03; // INPUT MODE STATUS 03 + typedef UReg<0x00, 0x03, 0, 1> STATUS_IF_INP_SXGA; // SXGA mode indicator (When =1, means input is SXGA (1280x1024) mode, include 60/75/85Hz) + typedef UReg<0x00, 0x03, 1, 1> STATUS_IF_INP_PC; // Graphic mode indicator (When =1, means input is graphic mode input, include VGA/SVGA/XGA/SXGA) + typedef UReg<0x00, 0x03, 2, 1> STATUS_IF_INP_720P50; // HD720P 50Hz mode (When =1, means input is HD720P (1280x720) 50Hz mode) + typedef UReg<0x00, 0x03, 3, 1> STATUS_IF_INP_720P60; // HD720P 60Hz mode (When =1, means input is HD720P (1280x720) 60Hz mode) + typedef UReg<0x00, 0x03, 4, 1> STATUS_IF_INP_720; // HD720P mode indicator (When =1, means input is HD720P source, include 50Hz/60Hz) + typedef UReg<0x00, 0x03, 5, 1> STATUS_IF_INP_2200_1125I; // HD2200_1125 interlace (When =1, means input is 2200x1125i mode) + typedef UReg<0x00, 0x03, 6, 1> STATUS_IF_INP_2376_1250I; // HD2376_1250 interlace (When =1, means input is 2376x1250i mode) + typedef UReg<0x00, 0x03, 7, 1> STATUS_IF_INP_2640_1125I; // HD2640_1125 interlace (When =1, means input is 2640x1125i mode) + typedef UReg<0x00, 0x04, 0, 8> STATUS_04; // INPUT MODE STATUS 04 + typedef UReg<0x00, 0x04, 0, 1> STATUS_IF_INP_1080I; // HD1808i indicator (When =1, means input is HD1080i source, include 2200x1125i, 2376x1250i, 2640x1125i modes) + typedef UReg<0x00, 0x04, 1, 1> STATUS_IF_INP_2200_1125P; // HD2200_1125P (When =1, means input is HD 2200x1125P mode) + typedef UReg<0x00, 0x04, 2, 1> STATUS_IF_INP_2376_1250P; // HD2376_1250P (When =1, means input is HD 2376x1250P mode) + typedef UReg<0x00, 0x04, 3, 1> STATUS_IF_INP_2640_1125P; // HD2640_1125P (When =1, means input is HD 2640x1125P mode) + typedef UReg<0x00, 0x04, 4, 1> STATUS_IF_INP_1808P; // HD 1080P indicator (When =1, means input is 1080P source, include 2200x1250P, 2376x1125P) + typedef UReg<0x00, 0x04, 5, 1> STATUS_IF_INP_HD; // HD mode indicator (When =1, means input is HD source, include 720P, 1080i, 1080P) + typedef UReg<0x00, 0x04, 6, 1> STATUS_IF_INP_INT; // Interlace video indicator (When =1, means input is interlace video source, include 480i, 576i, 1080i) + typedef UReg<0x00, 0x04, 7, 1> STATUS_IF_INP_PRG; // Progressive video indicator (When =1, means input is progressive video source, include 480P , 1080P modes) + typedef UReg<0x00, 0x05, 0, 8> STATUS_05; // INPUT MODE STATUS 05 + typedef UReg<0x00, 0x05, 0, 1> STATUS_IF_INP_USER; // User define mode (When =1, means input is the mode which match user define resolution) + typedef UReg<0x00, 0x05, 1, 1> STATUS_IF_NO_SYNC; // No sync indicator (When =1, means input is not sync timing) + typedef UReg<0x00, 0x05, 2, 1> STATUS_IF_HT_BAD; // Horizontal unstable indicator (When =1, means input H sync is not stable) + typedef UReg<0x00, 0x05, 3, 1> STATUS_IF_VT_BAD; // Vertical unstable indicator (When =1, means input V sync is not stable) + typedef UReg<0x00, 0x05, 4, 1> STATUS_IF_INP_SW; // Mode switch indicator (When =1, means input source switch the mode) + // 06_6:2 - reserved + + typedef UReg<0x00, 0x06, 0, 9> HPERIOD_IF; // Input source H total measurement result (The value = input source H total pixels / 4) + typedef UReg<0x00, 0x07, 1, 11> VPERIOD_IF; // Input source V total measurement result (The value = input source V total pixels / 4) + // 08_4:4 - reserved + // 09_0:6 - reserved + typedef UReg<0x00, 0x09, 6, 1> STATUS_MISC_PLL648_LOCK; // LOCK indicator from PLL648 + typedef UReg<0x00, 0x09, 7, 1> STATUS_MISC_PLLAD_LOCK; // LOCK indicator from PLLAD + typedef UReg<0x00, 0x0A, 0, 1> STATUS_MISC_PIP_EN_V; // PIP enable signal in Vertical (When =1, means sub picture’s vertical period in PIP mode) + typedef UReg<0x00, 0x0A, 1, 1> STATUS_MISC_PIP_EN_H; // PIP enable signal in Horizontal (When =1, means sub picture’s horizontal period in PIP mode) + // 0A_2:2 - reserved + typedef UReg<0x00, 0x0A, 4, 1> STATUS_MISC_VBLK; // Display output Vertical Blank (When =1, means in display vertical blanking) + typedef UReg<0x00, 0x0A, 5, 1> STATUS_MISC_HBLK; // Display output Horizontal Blank (When =1, means in display horizontal blanking) + typedef UReg<0x00, 0x0A, 6, 1> STATUS_MISC_VSYNC; // Display output Vertical Sync (When =1, means in display vertical sync (the output sync is high active)) + typedef UReg<0x00, 0x0A, 7, 1> STATUS_MISC_HSYNC; // Display output Horizontal Sync (When =1, means in display horizontal sync (the output sync is high active)) typedef UReg<0x00, 0x0B, 0, 8> CHIP_ID_FOUNDRY; typedef UReg<0x00, 0x0C, 0, 8> CHIP_ID_PRODUCT; typedef UReg<0x00, 0x0D, 0, 8> CHIP_ID_REVISION; - typedef UReg<0x00, 0x0E, 0, 1> STATUS_GPIO_GPIO; - typedef UReg<0x00, 0x0E, 1, 1> STATUS_GPIO_HALF; - typedef UReg<0x00, 0x0E, 2, 1> STATUS_GPIO_SCLSA; - typedef UReg<0x00, 0x0E, 3, 1> STATUS_GPIO_MBA; - typedef UReg<0x00, 0x0E, 4, 1> STATUS_GPIO_MCS1; - typedef UReg<0x00, 0x0E, 5, 1> STATUS_GPIO_HBOUT; - typedef UReg<0x00, 0x0E, 6, 1> STATUS_GPIO_VBOUT; - typedef UReg<0x00, 0x0E, 7, 1> STATUS_GPIO_CLKOUT; - - typedef UReg<0x00, 0x0F, 0, 8> STATUS_0F; // whole register for convenience - typedef UReg<0x00, 0x0F, 0, 1> STATUS_INT_SOG_BAD; - typedef UReg<0x00, 0x0F, 1, 1> STATUS_INT_SOG_SW; - typedef UReg<0x00, 0x0F, 2, 1> STATUS_INT_SOG_OK; - typedef UReg<0x00, 0x0F, 3, 1> STATUS_INT_INP_SW; - typedef UReg<0x00, 0x0F, 4, 1> STATUS_INT_INP_NO_SYNC; - typedef UReg<0x00, 0x0F, 5, 1> STATUS_INT_INP_HSYNC; - typedef UReg<0x00, 0x0F, 6, 1> STATUS_INT_INP_VSYNC; - typedef UReg<0x00, 0x0F, 7, 1> STATUS_INT_INP_CSYNC; //Needs confirmation - - typedef UReg<0x00, 0x10, 0, 4> STATUS_VDS_FR_NUM; - typedef UReg<0x00, 0x10, 4, 1> STATUS_VDS_OUT_VSYNC; - typedef UReg<0x00, 0x10, 5, 1> STATUS_VDS_OUT_HSYNC; - typedef UReg<0x00, 0x11, 0, 1> STATUS_VDS_FIELD; - typedef UReg<0x00, 0x11, 1, 1> STATUS_VDS_OUT_BLANK; - typedef UReg<0x00, 0x11, 4, 11> STATUS_VDS_VERT_COUNT; - - typedef UReg<0x00, 0x13, 0, 1> STATUS_MEM_FF_WFF_FIFO_FULL; - typedef UReg<0x00, 0x13, 1, 1> STATUS_MEM_FF_WFF_FIFO_EMPTY; - typedef UReg<0x00, 0x13, 2, 1> STATUS_MEM_FF_RFF_FIFO_FULL; - typedef UReg<0x00, 0x13, 3, 1> STATUS_MEM_FF_RFF_FIFO_EMPTY; - typedef UReg<0x00, 0x13, 4, 1> STATUS_MEM_FF_CAP_FIFO_FULL; - typedef UReg<0x00, 0x13, 5, 1> STATUS_MEM_FF_CAP_FIFO_EMPTY; - typedef UReg<0x00, 0x13, 6, 1> STATUS_MEM_FF_PLY_FIFO_FULL; - typedef UReg<0x00, 0x13, 7, 1> STATUS_MEM_FF_PLY_FIFO_EMPTY; - typedef UReg<0x00, 0x14, 0, 1> STATUS_MEM_FF_EXT_FIN; - - typedef UReg<0x00, 0x15, 7, 1> STATUS_DEINT_PULLDN; - - typedef UReg<0x00, 0x16, 0, 8> STATUS_16; // whole register for convenience - typedef UReg<0x00, 0x16, 0, 1> STATUS_SYNC_PROC_HSPOL; - typedef UReg<0x00, 0x16, 1, 1> STATUS_SYNC_PROC_HSACT; - typedef UReg<0x00, 0x16, 2, 1> STATUS_SYNC_PROC_VSPOL; - typedef UReg<0x00, 0x16, 3, 1> STATUS_SYNC_PROC_VSACT; - typedef UReg<0x00, 0x17, 0, 12> STATUS_SYNC_PROC_HTOTAL; - typedef UReg<0x00, 0x19, 0, 12> STATUS_SYNC_PROC_HLOW_LEN; - typedef UReg<0x00, 0x1B, 0, 11> STATUS_SYNC_PROC_VTOTAL; - typedef UReg<0x00, 0x1F, 0, 8> TEST_BUS_1F; - typedef UReg<0x00, 0x20, 0, 16> TEST_FF_STATUS; - typedef UReg<0x00, 0x23, 0, 8> TEST_BUS_23; - typedef UReg<0x00, 0x2E, 0, 16> TEST_BUS; - typedef UReg<0x00, 0x2E, 0, 8> TEST_BUS_2E; - typedef UReg<0x00, 0x2F, 0, 8> TEST_BUS_2F; - - // Miscellaneous Registers - typedef UReg<0x00, 0x40, 0, 1> PLL_CKIS; - typedef UReg<0x00, 0x40, 1, 1> PLL_DIVBY2Z; - typedef UReg<0x00, 0x40, 2, 1> PLL_IS; - typedef UReg<0x00, 0x40, 3, 1> PLL_ADS; - typedef UReg<0x00, 0x40, 4, 3> PLL_MS; - typedef UReg<0x00, 0x41, 0, 8> PLL648_CONTROL_01; - typedef UReg<0x00, 0x43, 0, 8> PLL648_CONTROL_03; - typedef UReg<0x00, 0x43, 0, 2> PLL_R; - typedef UReg<0x00, 0x43, 2, 2> PLL_S; - typedef UReg<0x00, 0x43, 4, 1> PLL_LEN; - typedef UReg<0x00, 0x43, 5, 1> PLL_VCORST; - typedef UReg<0x00, 0x44, 0, 1> DAC_RGBS_PWDNZ; - typedef UReg<0x00, 0x44, 2, 1> DAC_RGBS_R0ENZ; - typedef UReg<0x00, 0x44, 5, 1> DAC_RGBS_G0ENZ; - typedef UReg<0x00, 0x45, 0, 1> DAC_RGBS_B0ENZ; - typedef UReg<0x00, 0x45, 2, 1> DAC_RGBS_SPD; - typedef UReg<0x00, 0x45, 3, 1> DAC_RGBS_S0ENZ; - typedef UReg<0x00, 0x45, 4, 1> DAC_RGBS_S1EN; - typedef UReg<0x00, 0x46, 0, 8> RESET_CONTROL_0x46; // fake name - typedef UReg<0x00, 0x46, 0, 1> SFTRST_IF_RSTZ; - typedef UReg<0x00, 0x46, 1, 1> SFTRST_DEINT_RSTZ; - typedef UReg<0x00, 0x46, 2, 1> SFTRST_MEM_FF_RSTZ; - typedef UReg<0x00, 0x46, 4, 1> SFTRST_FIFO_RSTZ; - typedef UReg<0x00, 0x46, 6, 1> SFTRST_VDS_RSTZ; - typedef UReg<0x00, 0x47, 0, 8> RESET_CONTROL_0x47; // fake name - typedef UReg<0x00, 0x47, 0, 1> SFTRST_DEC_RSTZ; - typedef UReg<0x00, 0x47, 1, 1> SFTRST_MODE_RSTZ; - typedef UReg<0x00, 0x47, 2, 1> SFTRST_SYNC_RSTZ; - typedef UReg<0x00, 0x47, 3, 1> SFTRST_HDBYPS_RSTZ; - typedef UReg<0x00, 0x47, 4, 1> SFTRST_INT_RSTZ; - typedef UReg<0x00, 0x48, 0, 8> PAD_CONTROL_00_0x48; - typedef UReg<0x00, 0x48, 0, 1> PAD_BOUT_EN; // aka debug pin - typedef UReg<0x00, 0x48, 6, 1> PAD_SYNC1_IN_ENZ; - typedef UReg<0x00, 0x48, 7, 1> PAD_SYNC2_IN_ENZ; - typedef UReg<0x00, 0x49, 0, 8> PAD_CONTROL_01_0x49; // fake name - typedef UReg<0x00, 0x49, 0, 1> PAD_CKIN_ENZ; - typedef UReg<0x00, 0x49, 1, 1> PAD_CKOUT_ENZ; - typedef UReg<0x00, 0x49, 2, 1> PAD_SYNC_OUT_ENZ; - typedef UReg<0x00, 0x49, 4, 1> PAD_TRI_ENZ; - typedef UReg<0x00, 0x4A, 0, 3> PAD_OSC_CNTRL; - typedef UReg<0x00, 0x4B, 1, 1> DAC_RGBS_BYPS2DAC; - typedef UReg<0x00, 0x4B, 2, 1> DAC_RGBS_ADC2DAC; - typedef UReg<0x00, 0x4D, 0, 5> TEST_BUS_SEL; - typedef UReg<0x00, 0x4D, 5, 1> TEST_BUS_EN; - typedef UReg<0x00, 0x4F, 5, 1> OUT_SYNC_CNTRL; - typedef UReg<0x00, 0x4F, 6, 2> OUT_SYNC_SEL; - - typedef UReg<0x00, 0x52, 0, 8> GPIO_CONTROL_00; - typedef UReg<0x00, 0x53, 0, 8> GPIO_CONTROL_01; - typedef UReg<0x00, 0x58, 0, 8> INTERRUPT_CONTROL_00; - typedef UReg<0x00, 0x58, 0, 1> INT_CONTROL_RST_SOGBAD; - typedef UReg<0x00, 0x58, 1, 1> INT_CONTROL_RST_SOGSWITCH; - typedef UReg<0x00, 0x58, 4, 1> INT_CONTROL_RST_NOHSYNC; - typedef UReg<0x00, 0x59, 0, 8> INTERRUPT_CONTROL_01; - - // IF Registers - typedef UReg<0x01, 0x00, 0, 1> IF_IN_DREG_BYPS; - typedef UReg<0x01, 0x00, 1, 1> IF_MATRIX_BYPS; - typedef UReg<0x01, 0x00, 2, 1> IF_UV_REVERT; - typedef UReg<0x01, 0x00, 3, 1> IF_SEL_656; - typedef UReg<0x01, 0x00, 4, 1> IF_SEL16BIT; - typedef UReg<0x01, 0x00, 5, 1> IF_VS_SEL; - typedef UReg<0x01, 0x00, 6, 1> IF_PRGRSV_CNTRL; - typedef UReg<0x01, 0x00, 7, 1> IF_HS_FLIP; - typedef UReg<0x01, 0x01, 0, 1> IF_VS_FLIP; - typedef UReg<0x01, 0x01, 7, 1> IF_SEL24BIT; - typedef UReg<0x01, 0x02, 0, 8> INPUT_FORMATTER_02; // convenience - typedef UReg<0x01, 0x02, 0, 1> IF_SEL_WEN; - typedef UReg<0x01, 0x02, 1, 1> IF_HS_SEL_LPF; - typedef UReg<0x01, 0x02, 2, 1> IF_HS_INT_LPF_BYPS; - typedef UReg<0x01, 0x02, 3, 1> IF_HS_PSHIFT_BYPS; - typedef UReg<0x01, 0x02, 4, 1> IF_HS_TAP11_BYPS; - typedef UReg<0x01, 0x02, 5, 2> IF_HS_Y_PDELAY; - typedef UReg<0x01, 0x0b, 4, 2> IF_HS_DEC_FACTOR; - typedef UReg<0x01, 0x0b, 6, 1> IF_SEL_HSCALE; - typedef UReg<0x01, 0x0b, 7, 1> IF_LD_SEL_PROV; - typedef UReg<0x01, 0x0c, 0, 1> IF_LD_RAM_BYPS; - typedef UReg<0x01, 0x0c, 1, 4> IF_LD_ST; - typedef UReg<0x01, 0x0c, 5, 11> IF_INI_ST; - typedef UReg<0x01, 0x0e, 0, 11> IF_HSYNC_RST; - typedef UReg<0x01, 0x10, 0, 11> IF_HB_ST; - typedef UReg<0x01, 0x12, 0, 11> IF_HB_SP; - typedef UReg<0x01, 0x16, 0, 11> IF_HB_SP1; - typedef UReg<0x01, 0x18, 0, 11> IF_HB_ST2; - typedef UReg<0x01, 0x1a, 0, 11> IF_HB_SP2; - typedef UReg<0x01, 0x1c, 0, 11> IF_VB_ST; - typedef UReg<0x01, 0x1e, 0, 11> IF_VB_SP; - typedef UReg<0x01, 0x20, 0, 12> IF_LINE_ST; - typedef UReg<0x01, 0x22, 0, 12> IF_LINE_SP; - typedef UReg<0x01, 0x24, 0, 12> IF_HBIN_ST; - typedef UReg<0x01, 0x26, 0, 12> IF_HBIN_SP; - typedef UReg<0x01, 0x28, 1, 1> IF_LD_WRST_SEL; - typedef UReg<0x01, 0x28, 2, 1> IF_SEL_ADC_SYNC; - typedef UReg<0x01, 0x28, 3, 1> IF_TEST_EN; - typedef UReg<0x01, 0x28, 4, 4> IF_TEST_SEL; - typedef UReg<0x01, 0x29, 0, 1> IF_AUTO_OFST_EN; - typedef UReg<0x01, 0x29, 1, 1> IF_AUTO_OFST_PRD; - typedef UReg<0x01, 0x2A, 0, 4> IF_AUTO_OFST_U_RANGE; - typedef UReg<0x01, 0x2A, 4, 4> IF_AUTO_OFST_V_RANGE; + typedef UReg<0x00, 0x0E, 0, 1> STATUS_GPIO_GPIO; // GPIO bit0 (GPIO pin76) status + typedef UReg<0x00, 0x0E, 1, 1> STATUS_GPIO_HALF; // GPIO bit1 (HALF pin77) status + typedef UReg<0x00, 0x0E, 2, 1> STATUS_GPIO_SCLSA; // GPIO bit2 (SCLSA pin43) status + typedef UReg<0x00, 0x0E, 3, 1> STATUS_GPIO_MBA; // GPIO bit3 (MBA pin107) status + typedef UReg<0x00, 0x0E, 4, 1> STATUS_GPIO_MCS1; // GPIO bit4 (MCS1 pin109) status + typedef UReg<0x00, 0x0E, 5, 1> STATUS_GPIO_HBOUT; // GPIO bit5 (HBOUT pin6) status + typedef UReg<0x00, 0x0E, 6, 1> STATUS_GPIO_VBOUT; // GPIO bit6 (VBOUT pin7) status + typedef UReg<0x00, 0x0E, 7, 1> STATUS_GPIO_CLKOUT; // GPIO bit7 (CLKOUT pin4) status + + typedef UReg<0x00, 0x0F, 0, 8> STATUS_0F; // INTERRUPT STATUS 00 + typedef UReg<0x00, 0x0F, 0, 1> STATUS_INT_SOG_BAD; // Interrupt status bit0, SOG unstable (When =1, means input SOG source is unstable) + typedef UReg<0x00, 0x0F, 1, 1> STATUS_INT_SOG_SW; // Interrupt status bit1, SOG switch (When =1, means input SOG source switch the mode) + typedef UReg<0x00, 0x0F, 2, 1> STATUS_INT_SOG_OK; // Interrupt status bit2, SOG stable (When =1, means input SOG source is stable) + typedef UReg<0x00, 0x0F, 3, 1> STATUS_INT_INP_SW; // Interrupt status bit3, mode switch (When =1, means input source switch the mode) + typedef UReg<0x00, 0x0F, 4, 1> STATUS_INT_INP_NO_SYNC; // Interrupt status bit4, no sync (When =1, means input source is not H-sync input.) + typedef UReg<0x00, 0x0F, 5, 1> STATUS_INT_INP_HSYNC; // Interrupt status bit5, H-sync status (When =1, means input H-sync status is changed between stable and unstable) + typedef UReg<0x00, 0x0F, 6, 1> STATUS_INT_INP_VSYNC; // Interrupt status bi6, V-sync status (When =1, means input V-sync status is changed between stable and unstable) + typedef UReg<0x00, 0x0F, 7, 1> STATUS_INT_INP_CSYNC; // Interrupt status bit7, H-sync status (When =1, means input H-sync status is changed between stable and unstable) + + typedef UReg<0x00, 0x10, 0, 4> STATUS_VDS_FR_NUM; // Frame number + typedef UReg<0x00, 0x10, 4, 1> STATUS_VDS_OUT_VSYNC; // Output Vertical Sync + typedef UReg<0x00, 0x10, 5, 1> STATUS_VDS_OUT_HSYNC; // Output Horizontal Sync + // 10_6:2 - reserved + typedef UReg<0x00, 0x11, 0, 1> STATUS_VDS_FIELD; // Field Index (When =0, in display top field; When =1, in display bottom field) + typedef UReg<0x00, 0x11, 1, 1> STATUS_VDS_OUT_BLANK; // Composite Blanking (When =0, in display active period; When =1, in display blanking period) + // 11_2:2 - reserved + typedef UReg<0x00, 0x11, 4, 11> STATUS_VDS_VERT_COUNT; // Vertical counter bit [3:0] (Vertical counter value, indicate the line number in display) + // 12_7:1 - reserved + typedef UReg<0x00, 0x13, 0, 1> STATUS_MEM_FF_WFF_FIFO_FULL; // WFF FIFO full indicator (When =1, means WFF FIFO is full) + typedef UReg<0x00, 0x13, 1, 1> STATUS_MEM_FF_WFF_FIFO_EMPTY; // WFF FIFO empty indicator (When =1, means WFF FIFO is empty) + typedef UReg<0x00, 0x13, 2, 1> STATUS_MEM_FF_RFF_FIFO_FULL; // RFF FIFO full indicator (When =1, means RFF FIFO is full) + typedef UReg<0x00, 0x13, 3, 1> STATUS_MEM_FF_RFF_FIFO_EMPTY; // RFF FIFO empty indicator (When =1, means RFF FIFO is empty) + typedef UReg<0x00, 0x13, 4, 1> STATUS_MEM_FF_CAP_FIFO_FULL; // Capture FIFO full indicator (When =1, means capture FIFO is full) + typedef UReg<0x00, 0x13, 5, 1> STATUS_MEM_FF_CAP_FIFO_EMPTY; // Capture FIFO empty indicator (When =1, means capture FIFO is empty) + typedef UReg<0x00, 0x13, 6, 1> STATUS_MEM_FF_PLY_FIFO_FULL; // Playback FIFO full indicator (When =1, means playback FIFO is full) + typedef UReg<0x00, 0x13, 7, 1> STATUS_MEM_FF_PLY_FIFO_EMPTY; // Playback FIFO empty indicator (When =1, means playback FIFO is empty) + typedef UReg<0x00, 0x14, 0, 1> STATUS_MEM_FF_EXT_FIN; // Memory control initial indicator (When =1, means external memory chip initial is finished) + // 14_1:6 - reserved + // 15_0:6 - reserved + typedef UReg<0x00, 0x15, 7, 1> STATUS_DEINT_PULLDN; // 3:2 pull-down indicator (When =1, means de-interlace is in 3:2 pull-down mode) + + typedef UReg<0x00, 0x16, 0, 8> STATUS_16; // SYNC PROC STATUS 00 + typedef UReg<0x00, 0x16, 0, 1> STATUS_SYNC_PROC_HSPOL; // HS polarity (When =0, means input H-sync is low active When =1, means input H-sync is high active) + typedef UReg<0x00, 0x16, 1, 1> STATUS_SYNC_PROC_HSACT; // HS active + typedef UReg<0x00, 0x16, 2, 1> STATUS_SYNC_PROC_VSPOL; // VS polarity (When =0, means input V-sync is low active When =1, means input V-sync is high active) + typedef UReg<0x00, 0x16, 3, 1> STATUS_SYNC_PROC_VSACT; // VS active + // 16_4:3 - reserved + typedef UReg<0x00, 0x17, 0, 12> STATUS_SYNC_PROC_HTOTAL; // H total value (Input source H-total value) + // 18_4:4 - reserved + typedef UReg<0x00, 0x19, 0, 12> STATUS_SYNC_PROC_HLOW_LEN; // H low pulse length value (Input H-sync low active pulse length (for H-sync polarity detection)) + // 1A_4:4 - reserved + typedef UReg<0x00, 0x1B, 0, 11> STATUS_SYNC_PROC_VTOTAL; // V total value (Input source V-total lines value) + // 1C_3:5 - reserved + // 1D_0:8 - reserved + // 1E_0:8 - reserved + typedef UReg<0x00, 0x1F, 0, 8> TEST_BUS_1F; // reserved (RO) + typedef UReg<0x00, 0x20, 0, 16> TEST_FF_STATUS; // reserved (RO) + typedef UReg<0x00, 0x22, 0, 8> CRC_REGOUT_RFF; // reserved (RO) + typedef UReg<0x00, 0x23, 0, 8> CRC_REGOUT_PB; // reserved (RO) + typedef UReg<0x00, 0x24, 0, 80> CRC_STATUS; // reserved (RO) + typedef UReg<0x00, 0x2E, 0, 16> TEST_BUS; // reserved (RO) + typedef UReg<0x00, 0x2E, 0, 8> TEST_BUS_2E; // reserved (RO) + typedef UReg<0x00, 0x2F, 0, 8> TEST_BUS_2F; // reserved (RO) + + // + // Miscellaneous Registers (all registers R/W) + // + typedef UReg<0x00, 0x40, 0, 1> PLL_CKIS; // CKIS, PLL source clock selection (When = 0, PLL use OSC clock When = 1, PLL use input clock) + typedef UReg<0x00, 0x40, 1, 1> PLL_DIVBY2Z; // DIVBY2Z, PLL source clock divide bypass (When = 0, PLL source clock divide by two When = 1, PLL source clock bypass divide) + typedef UReg<0x00, 0x40, 2, 1> PLL_IS; // IS, ICLK source selection (When = 0, ICLK use PLL clock When = 1, ICLK use input clock) + typedef UReg<0x00, 0x40, 3, 1> PLL_ADS; // ADS, input clock selection (When = 0, input clock is from PCLKIN(pin40) When = 1, input clock is from ADC) + typedef UReg<0x00, 0x40, 4, 3> PLL_MS; // MS[2:0], memory clock control + // When = 000, memory clock =108MHz + // When = 001, memory clock = 81MHz + // When = 010, memory clock from FBCLK (pin110) When = 011, memory clock = 162MHz + // When = 100, memory clock = 144MHz + // When = 101, memory clock = 185MHz + // When = 110, memory clock = 216MHz + // When = 111, memory clock = 129.6Mhz + typedef UReg<0x00, 0x41, 0, 8> PLL648_CONTROL_01; // See DEVELOPER_NOTES.md -> S0_41 + typedef UReg<0x00, 0x41, 0, 2> PLL_VS; // Display clock tuning register + typedef UReg<0x00, 0x41, 2, 2> PLL_VS2; // Display clock tuning register + typedef UReg<0x00, 0x41, 4, 2> PLL_VS4; // Display clock tuning register + typedef UReg<0x00, 0x41, 6, 1> PLL_2XV; // Display clock tuning register + typedef UReg<0x00, 0x41, 7, 1> PLL_4XV; // Display clock tuning register + // S0_42 - reserved + typedef UReg<0x00, 0x43, 0, 8> PLL648_CONTROL_03; // + typedef UReg<0x00, 0x43, 0, 2> PLL_R; // Skew control for testing + typedef UReg<0x00, 0x43, 2, 2> PLL_S; // Skew control for testing + typedef UReg<0x00, 0x43, 4, 1> PLL_LEN; // Lock Enable + typedef UReg<0x00, 0x43, 5, 1> PLL_VCORST; // VCO control voltage reset bit (When =1, reset VCO control voltage) + typedef UReg<0x00, 0x44, 0, 1> DAC_RGBS_PWDNZ; // DAC enable (When = 0, DAC (R,G,B,S) in power down mode When = 1, DAC (R,G,B,S) is enable) + typedef UReg<0x00, 0x44, 1, 1> DAC_RGBS_RPD; // RPD, RDAC power down control (When = 0, RDAC work normally; When = 1, RDAC is in power down mode) + typedef UReg<0x00, 0x44, 2, 1> DAC_RGBS_R0ENZ; // R0ENZ, DAC min output bypass (When = 0, RDAC output Min voltage; When = 1, RDAC output follow input R data) + typedef UReg<0x00, 0x44, 3, 1> DAC_RGBS_R1EN; // R1EN, RDAC max output control (When = 0, RDAC output follow input R data When = 1, RDAC output Max voltage) + typedef UReg<0x00, 0x44, 4, 1> DAC_RGBS_GPD; // GPD, GDAC power down control (When = 0, GDAC work normally; When = 1, GDAC is in power down mode) + typedef UReg<0x00, 0x44, 5, 1> DAC_RGBS_G0ENZ; // G0ENZ, GDAC min output bypass (When = 0, GDAC output Min voltage; When = 1, GDAC output follow input G data) + typedef UReg<0x00, 0x44, 6, 1> DAC_RGBS_G1EN; // R1EN, RDAC max output control (When = 0, RDAC output follow input R data When = 1, RDAC output Max voltage) + typedef UReg<0x00, 0x44, 7, 1> DAC_RGBS_BPD; // BPD, BDAC power down control (When = 0, BDAC work normally; When = 1, BDAC is in power down mode) + typedef UReg<0x00, 0x45, 0, 1> DAC_RGBS_B0ENZ; // B0ENZ, BDAC min output bypass (When = 0, BDAC output Min voltage; When = 1, BDAC output follow input B data) + typedef UReg<0x00, 0x45, 1, 1> DAC_RGBS_B1EN; // B1EN, BDAC max output control (When = 0, BDAC output follow input B data; When = 1, BDAC output Max voltage) + typedef UReg<0x00, 0x45, 2, 1> DAC_RGBS_SPD; // SPD, SDAC power down control (When = 0, GDAC work normally; When = 1, GDAC is in power down mode) + typedef UReg<0x00, 0x45, 3, 1> DAC_RGBS_S0ENZ; // S0ENZ, SDAC min output bypass (When = 0, SDAC output Min voltage; When = 1, SDAC output follow input S data) + typedef UReg<0x00, 0x45, 4, 1> DAC_RGBS_S1EN; // S1EN, SDAC max output control (When = 0, SDAC output follow input S data; When = 1, SDAC output Max voltage) + // S0_45_5:1 - reserverd + typedef UReg<0x00, 0x45, 6, 2> CKT_FF_CNTRL; // CKT used to control FIFO + typedef UReg<0x00, 0x46, 0, 8> RESET_CONTROL_0x46; // CONTROL 00 + typedef UReg<0x00, 0x46, 0, 1> SFTRST_IF_RSTZ; // Input formatter reset control (When = 0, input formatter is in reset status When = 1, input formatter work normally) + typedef UReg<0x00, 0x46, 1, 1> SFTRST_DEINT_RSTZ; // Deint_madpt3 reset control (When = 0, deint_madpt3 is in reset status; When = 1, deint_madpt3 work normally) + typedef UReg<0x00, 0x46, 2, 1> SFTRST_MEM_FF_RSTZ; // Mem_ff (wff/rff/playback/capture) reset control (When = 0, mem_ff is in reset status; When = 1, mem_ff work normally) + typedef UReg<0x00, 0x46, 3, 1> SFTRST_MEM_RSTZ; // Mem controller reset control (When = 0, mem controller is in reset status; When = 1, mem controller work normally) + typedef UReg<0x00, 0x46, 4, 1> SFTRST_FIFO_RSTZ; // FIFO reset control (When = 0, all FIFO (FF64/FF512) is in reset status; When = 1, all FIFO work normally) + typedef UReg<0x00, 0x46, 5, 1> SFTRST_OSD_RSTZ; // OSD reset control (When = 0, OSD generator is in reset status; When = 1, OSD generator work normally) + typedef UReg<0x00, 0x46, 6, 1> SFTRST_VDS_RSTZ; // Vds_proc reset control (When = 0, vds_proc is in reset status; When = 1, vds_proc work normally) + // 46_7:1 - reserved + typedef UReg<0x00, 0x47, 0, 8> RESET_CONTROL_0x47; // CONTROL 01 + typedef UReg<0x00, 0x47, 0, 1> SFTRST_DEC_RSTZ; // Decimation reset control (When = 0, decimation is in reset status; When = 1, decimation work normally) + typedef UReg<0x00, 0x47, 1, 1> SFTRST_MODE_RSTZ; // Mode detection reset control (When = 0, mode detection is in reset status When = 1, mode detection work normally) + typedef UReg<0x00, 0x47, 2, 1> SFTRST_SYNC_RSTZ; // Sync procesor reset control (When = 0, sync processor is in reset status When = 1, sync processor work normally) + typedef UReg<0x00, 0x47, 3, 1> SFTRST_HDBYPS_RSTZ; // HD bypass channel reset control (When = 0, HD bypass is in reset status; When = 1, HD bypasswork normally) + typedef UReg<0x00, 0x47, 4, 1> SFTRST_INT_RSTZ; // Interrupt generator reset control (When = 0, interrupt generator is in reset status; When = 1, interrupt generator work normally) + // 47_5:3 - reserved + typedef UReg<0x00, 0x48, 0, 8> PAD_CONTROL_00_0x48; // CONTROL 00 + typedef UReg<0x00, 0x48, 0, 1> PAD_BOUT_EN; // VB_[7:0] output control aka debug pin (When = 0, disable VB_[7:0] (test_out_[7:0]) output; When = 1, enable VB_[7:0] (test_out_[7:0]) output) + typedef UReg<0x00, 0x48, 1, 1> PAD_BIN_ENZ; // VB_[7:0] input control (When = 0, enable VB_[7:0] input; When = 1, disable VB_[7:0] input) + typedef UReg<0x00, 0x48, 2, 1> PAD_ROUT_EN; // VR_[7:0] output control (When = 0, disable VR_[7:0] (test_out_[15:8]) output; When = 1, enable VR_[7:0] (test_out_[15:8]) output) + typedef UReg<0x00, 0x48, 3, 1> PAD_RIN_ENZ; // VR_[7:0] input control (When = 0, enable VR_[7:0] input; When = 1, disable VR_[7:0] input) + typedef UReg<0x00, 0x48, 4, 1> PAD_GOUT_EN; // VG_[7:0] output control (When = 0, disable VG_[7:0] (test_out_[23:16]) output; When = 1, enable VG_[7:0] (test_out_[23:16]) output) + typedef UReg<0x00, 0x48, 5, 1> PAD_GIN_ENZ; // VG_[7:0] input control (When = 0, enable VG_[7:0] input; When = 1, disable VG_[7:0] input) + typedef UReg<0x00, 0x48, 6, 1> PAD_SYNC1_IN_ENZ; // H/V sync1 input control (When = 0, enable H/V sync1 input filter; When = 1, disable H/V sync1 input filter) + typedef UReg<0x00, 0x48, 7, 1> PAD_SYNC2_IN_ENZ; // H/V sync2 input control (When = 0, enable H/V sync2 input filter; When = 1, disable H/V sync2 input filter) + typedef UReg<0x00, 0x49, 0, 8> PAD_CONTROL_01_0x49; // CONTROL 01 + typedef UReg<0x00, 0x49, 0, 1> PAD_CKIN_ENZ; // PCLKIN control (When = 0, PCLKIN input enable When = 1, PCLKIN input disable) + typedef UReg<0x00, 0x49, 1, 1> PAD_CKOUT_ENZ; // CLKOUT control (When = 0, CLKOUT output enable When = 1, CLKOUT output disable) + typedef UReg<0x00, 0x49, 2, 1> PAD_SYNC_OUT_ENZ; // HSOUT/VSOUT control (When = 0, HSOUT/VSOUT output enable When = 1, HSOUT/VSOUT output disable) + typedef UReg<0x00, 0x49, 3, 1> PAD_BLK_OUT_ENZ; // HBOUT/VBOUT control (When = 0, HBOUT/VBOUT output enable When = 1, HBOUT/VBOUT output disable) + typedef UReg<0x00, 0x49, 4, 1> PAD_TRI_ENZ; // Tri-state gate control (When = 0, enable output pad’s tri-state gate When = 1, disable output pad’s tri-state gate) + typedef UReg<0x00, 0x49, 5, 1> PAD_PLDN_ENZ; // Pull-down control (When = 0, enable pad’s pull-down transistor; When = 1, disable pad’s pull-down transistor) + typedef UReg<0x00, 0x49, 6, 1> PAD_PLUP_ENZ; // Pull-up control (When = 0, enable pad’s pull-up transistor; When = 1, disable pad’s pull-up transistor) + // 49_7:1 - reserved + typedef UReg<0x00, 0x4A, 0, 3> PAD_OSC_CNTRL; // OSC pad C2/C1/C0 control + typedef UReg<0x00, 0x4A, 3, 1> PAD_XTOUT_TTL; // OSC pad output control (When = 0, enable OSC pad output by schmitt When = 1, enable OSC pad output by TTL) + typedef UReg<0x00, 0x4B, 0, 1> DAC_RGBS_BYPS_IREG; // DAC input DFF control (When = 0, DAC input DFF is falling edge D-flipflop When = 1, bypass falling edge D-flipflop) + typedef UReg<0x00, 0x4B, 1, 1> DAC_RGBS_BYPS2DAC; // HD bypass to DAC control (When = 0, disable HD bypass channel to DAC; When = 1, enable HD bypass channel to DAC directly) + typedef UReg<0x00, 0x4B, 2, 1> DAC_RGBS_ADC2DAC; // ADC to DAC control (When = 0, disable ADC (with decimation) to DAC; When = 1, enable ADC (with decimation) to DAC directly) + typedef UReg<0x00, 0x4D, 0, 5> TEST_BUS_SEL; // Test bus selection + typedef UReg<0x00, 0x4D, 5, 1> TEST_BUS_EN; // Test bus enable (When = 0, disable test bus output; When = 1, test bus output to VR_[7:0], VB_[7:0] (test_out_[15:0])) + // 4D_6:2 - reserved + typedef UReg<0x00, 0x4E, 0, 1> DIGOUT_BYPS2PAD; // HD bypass channel to digital output control (When = 0, disable HD bypass to digital output; When = 1, enable HD bypass to digital output (VG_[7:0], VR_[7:0], VB_[7:0])) + typedef UReg<0x00, 0x4E, 1, 1> DIGOUT_ADC2PAD; // ADC to digital output control (When = 0, disable ADC to digital output; When = 1, enable ADC (with decimation) to digital output (VG, VR, VB)) + // 4E_2:6 - reserved + typedef UReg<0x00, 0x4F, 0, 1> DAC_RGBS_V4CLK_INVT; // V4CLK invert control () + typedef UReg<0x00, 0x4F, 1, 1> OUT_CLK_PHASE_CNTRL; // CLKOUT invert control () + typedef UReg<0x00, 0x4F, 2, 1> OUT_CLK_EN; // CLKOUT selection control () + typedef UReg<0x00, 0x4F, 3, 2> CLKOUT_EN; // CLKOUT enable control () + typedef UReg<0x00, 0x4F, 5, 1> OUT_SYNC_CNTRL; // H/V sync output enable () + typedef UReg<0x00, 0x4F, 6, 2> OUT_SYNC_SEL; // H/V sync output selection control + // When = 00, H/V sync output are from vds_proc + // When = 01, H/V sync output are from HD bypass + // When = 10, H/V sync output are from sync processor + // When = 11, reserved + typedef UReg<0x00, 0x50, 0, 1> OUT_BLANK_SEL_0; // HBOUT/VBUT selection control (When = 0, VBOUT output Vertical Blank; When = 1, VBOUT output composite Display Enable) + typedef UReg<0x00, 0x50, 1, 1> OUT_BLANK_SEL_1; // HBOUT/VBOUT selection control (When = 0, HBOUT/VBOUT is from vds_proc When = 1, HBOUT/VBOUT is from HD bypass) + // 50_2:2 - reserved + typedef UReg<0x00, 0x50, 4, 1> IN_BLANK_SEL; // Input blank selection (When = 0, disable input composite Display Enable When = 1, enable input composite Display Enable) + typedef UReg<0x00, 0x50, 5, 1> IN_BLANK_IREG_BYPS; // Input blank IREG bypas (When = 0, input composite Display Enable latched by falling edge DFF When = 1, bypass falling edge DFF) + // 50_6:2 - reserved + // 51_0:8 - not described + + typedef UReg<0x00, 0x52, 0, 8> GPIO_CONTROL_00; // CONTROL 00 + typedef UReg<0x00, 0x52, 0, 1> GPIO_SEL_0; // GPIO bit0 selection (When = 0, GPIO (pin76) is used as INTZ output When = 1, GPIO (pin76) is used as GPIO bit0) + typedef UReg<0x00, 0x52, 1, 1> GPIO_SEL_1; // GPIO bit1 selection (When = 0, HALF (pin77) is used as half tone input When = 1, HALF (pin77) is used as GPIO bit1) + typedef UReg<0x00, 0x52, 2, 1> GPIO_SEL_2; // GPIO bit2 selection (When = 0, SCLSA (pin43) is used as two wire serial bus slave address selection When = 1, SCLSA (pin43) is used as GPIO bit2) + typedef UReg<0x00, 0x52, 3, 1> GPIO_SEL_3; // GPIO bit3 selection (When = 0, MBA (pin107) is used as external memory BA When = 1, MBA (pin107) is used as GPIO bit3) + typedef UReg<0x00, 0x52, 4, 1> GPIO_SEL_4; // GPIO bit4 selection (When = 0, MCS1 (pin109) is used as external memory CS1 When = 1, MCS1 (pin109) is used as GPIO bit4) + typedef UReg<0x00, 0x52, 5, 1> GPIO_SEL_5; // GPIO bit5 selection (When = 0, HBOUT (pin6) is used as H-blank output When = 1, HBOUT (pin6) is used as GPIO bit5) + typedef UReg<0x00, 0x52, 6, 1> GPIO_SEL_6; // GPIO bit6 selection (When = 0, VBOUT (pin7) is used as V-blank output When = 1, VBOUT (pin7) is used as GPIO bit6) + typedef UReg<0x00, 0x52, 7, 1> GPIO_SEL_7; // GPIO bit7 selection (When = 0, CLKOUT (pin4) is used as clock output When = 1, CLKOUT (pin4) is used as GPIO bit7) + typedef UReg<0x00, 0x53, 0, 8> GPIO_CONTROL_01; // CONTROL 01 + typedef UReg<0x00, 0x53, 0, 1> GPIO_EN_0; // GPIO bit0 output enable (When = 0, GPIO bit0 output disable When = 1, GPIO bit0 output enable) + typedef UReg<0x00, 0x53, 1, 1> GPIO_EN_1; // GPIO bit1 output enable (When = 0, GPIO bit1 output disable When = 1, GPIO bit1 output enable) + typedef UReg<0x00, 0x53, 2, 1> GPIO_EN_2; // GPIO bit2 output enable (When = 0, GPIO bit2 output disable When = 1, GPIO bit2 output enable) + typedef UReg<0x00, 0x53, 3, 1> GPIO_EN_3; // GPIO bit3 output enable (When = 0, GPIO bit3 output disable When = 1, GPIO bit3 output enable) + typedef UReg<0x00, 0x53, 4, 1> GPIO_EN_4; // GPIO bit4 output enable (When = 0, GPIO bit4 output disable When = 1, GPIO bit4 output enable) + typedef UReg<0x00, 0x53, 5, 1> GPIO_EN_5; // GPIO bit5 output enable (When = 0, GPIO bit5 output disable When = 1, GPIO bit5 output enable) + typedef UReg<0x00, 0x53, 6, 1> GPIO_EN_6; // GPIO bit6 output enable (When = 0, GPIO bit6 output disable When = 1, GPIO bit6 output enable) + typedef UReg<0x00, 0x53, 7, 1> GPIO_EN_7; // GPIO bit7 output enable (When = 0, GPIO bit7 output disable When = 1, GPIO bit7 output enable) + typedef UReg<0x00, 0x54, 0, 8> GPIO_CONTROL_02; // CONTROL 02 + typedef UReg<0x00, 0x54, 0, 1> GPIO_VAL_0; // GPIO bit0 output value + typedef UReg<0x00, 0x54, 1, 1> GPIO_VAL_1; // GPIO bit1 output value + typedef UReg<0x00, 0x54, 2, 1> GPIO_VAL_2; // GPIO bit2 output value + typedef UReg<0x00, 0x54, 3, 1> GPIO_VAL_3; // GPIO bit3 output value + typedef UReg<0x00, 0x54, 4, 1> GPIO_VAL_4; // GPIO bit4 output value + typedef UReg<0x00, 0x54, 5, 1> GPIO_VAL_5; // GPIO bit5 output value + typedef UReg<0x00, 0x54, 6, 1> GPIO_VAL_6; // GPIO bit6 output value + typedef UReg<0x00, 0x54, 7, 1> GPIO_VAL_7; // GPIO bit7 output value + // 55 - not described + typedef UReg<0x00, 0x57, 7, 1> INVT_RING_EN; // Enable invert ring (When = 0, disable invert ring; When = 1, enable invert ring for processing test) + typedef UReg<0x00, 0x58, 0, 8> INTERRUPT_CONTROL_00; // CONTROL 00 + typedef UReg<0x00, 0x58, 0, 1> INT_CONTROL_RST_SOGBAD; // Interrupt bit0 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 1, 1> INT_CONTROL_RST_SOGSWITCH; // Interrupt bit1 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 2, 1> INT_RST_2; // Interrupt bit2 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 3, 1> INT_RST_3; // Interrupt bit3 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 4, 1> INT_CONTROL_RST_NOHSYNC; // Interrupt bit4 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 5, 1> INT_RST_5; // Interrupt bit5 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 6, 1> INT_RST_6; // Interrupt bit6 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x58, 7, 1> INT_RST_7; // Interrupt bit7 reset control (When = 1, interrupt bit status will be reset to zero) + typedef UReg<0x00, 0x59, 0, 8> INTERRUPT_CONTROL_01; // CONTROL 01 + typedef UReg<0x00, 0x59, 0, 1> INT_ENABLE0; // Interrupt bit0 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 1, 1> INT_ENABLE1; // Interrupt bit1 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 2, 1> INT_ENABLE2; // Interrupt bit2 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 3, 1> INT_ENABLE3; // Interrupt bit3 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 4, 1> INT_ENABLE4; // Interrupt bit4 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 5, 1> INT_ENABLE5; // Interrupt bit5 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 6, 1> INT_ENABLE6; // Interrupt bit6 enable (When = 1, enable interrupt bit generator) + typedef UReg<0x00, 0x59, 7, 1> INT_ENABLE7; // Interrupt bit7 enable (When = 1, enable interrupt bit generator) + + // + // Input Formatter Registers (all registers R/W) + // + typedef UReg<0x01, 0x00, 0, 1> IF_IN_DREG_BYPS; // Input pipe by pass (Use the falling or rising edge of clock to get the input data. 0: Clock input data on the falling edge of ICLK.; 1: Clock input date on the rising edge of ICLK.) + typedef UReg<0x01, 0x00, 1, 1> IF_MATRIX_BYPS; // Rgb2yuv matrix bypass (If source is yuv24bit, bypass the rgb2yuv matrix. 0:source is 24bit RGB. Do rgb2yuv; 1: data bypass) + typedef UReg<0x01, 0x00, 2, 1> IF_UV_REVERT; // 8bit to 16bit convert Y/UV flip control (If input is 8bit data, when it convert to 16bit, this bit control Y and UV order: 0: Keep the designed order; 1: Flip the Y and UV order) + typedef UReg<0x01, 0x00, 3, 1> IF_SEL_656; // Select CCIR656 data (If input data is 8bit CCIR656 mode, choose the 656 data path. 0: input is CCIR 601 mode. Choose the CCIR601mode timing. 1: input is CCIR 656 mode. Choose the CCIR656 mode timing) + typedef UReg<0x01, 0x00, 4, 1> IF_SEL16BIT; // Select 16bit data (If source data is 16bit. Choose the 16bits data path. Use in conjunction with register sel_24bit to choose the input data format.) + typedef UReg<0x01, 0x00, 5, 1> IF_VS_SEL; // Vertical sync select (Choose the periodical or virtual vertical timing. 0: choose the VCR mode timing generation. 1: choose the normal mode timing generation) (see: DEVELOPER_NOTES.md -> S1_00) + typedef UReg<0x01, 0x00, 6, 1> IF_PRGRSV_CNTRL; // Select progressive data (Progressive mode. Choose the progressive data. 0: source is interlaced; 1: source is progressive) + typedef UReg<0x01, 0x00, 7, 1> IF_HS_FLIP; // Horizontal sync flip control (Control the horizontal sync output from CCIR process 0: keep the original horizontal sync; 1: flip horizontal sync.) + typedef UReg<0x01, 0x01, 0, 1> IF_VS_FLIP; // Vertical sync flip control (Control the vertical sync output from CCIR process 0: keep original vertical sync; 1: flip vertical sync.) + typedef UReg<0x01, 0x01, 1, 1> IF_UV_FLIP; // YUV 422to444 UV flip control (Control the U and V order in yuv422to444 conversion. 0: keep original U and V order; 1: exchange the U and V order) + typedef UReg<0x01, 0x01, 2, 1> IF_U_DELAY; // U data select in YUV 422to444 conversion (Select original U data or 1-clock delayed U data, so that it can align with V data. 0: select original U data after dmux; 1: select 1-clock delayed U data after dmux) + typedef UReg<0x01, 0x01, 3, 1> IF_V_DELAY; // V data select in YUV 422to444 conversion (Select original V data or 1-clock delayed V data, so that it can align with U data. 0: select original V data after dmux; 1: select 1-clock delayed V data after dmux) + typedef UReg<0x01, 0x01, 4, 1> IF_TAP6_BYPS; // Tap6 interpolator bypass control in YUV 422to444 conversion (Select the data if pass the tap6 interpolator or not. 0: the data will pass the tap6 interpolator; 1: the data will not pass the tap6 interpolator) + typedef UReg<0x01, 0x01, 5, 2> IF_Y_DELAY; // Y data pipes control in YUV422to444 conversion (Control the Y data pipe delay, so that it can align with U and V. see: DEVELOPER_NOTES.md -> S01_01) + typedef UReg<0x01, 0x01, 7, 1> IF_SEL24BIT; // Select 24bit data (If input source is 24bit data, choose the 24bit data path.) + typedef UReg<0x01, 0x02, 0, 8> INPUT_FORMATTER_02; // INPUT_FORMATTER 02 + typedef UReg<0x01, 0x02, 0, 1> IF_SEL_WEN; // Select the write enable for line double (If the input is HD source, this bit will be set to 1. 0: if the source is SD data; 1: if the source is HD data) + typedef UReg<0x01, 0x02, 1, 1> IF_HS_SEL_LPF; // Low pass filter or interpolator selection (The low pass filter and interpolator data path is combined together. 0: select interpolator data path; 1: select low pass filter data path) + typedef UReg<0x01, 0x02, 2, 1> IF_HS_INT_LPF_BYPS; // Combined INT and LPF data path bypass control (If the data can’t do horizontal scaling-down, bypass the INT/LPF data path. 0: select the INT/LPF data path; 1: bypass the INT/LPF data path) + typedef UReg<0x01, 0x02, 3, 1> IF_HS_PSHIFT_BYPS; // Phase adjustment bypass control (If the data can’t do phase adjustment, this bit should be set to 1. 0: select phase adjustment data path; 1: bypass phase adjustment) + typedef UReg<0x01, 0x02, 4, 1> IF_HS_TAP11_BYPS; // Tap11 LPF bypass control in YUV444to422 conversion (Select the data if pass the tap11 LPF or not. 0: the data will pass the tap11 low pass filter; 1: the data will not pass the tap11 low pass filter) + typedef UReg<0x01, 0x02, 5, 2> IF_HS_Y_PDELAY; // Y data pipes control in YUV444to422 conversion - Control the Y data pipe delay, so that it can align with UV. (see: DEVELOPER_NOTE.md -> S1_02) + typedef UReg<0x01, 0x02, 7, 1> IF_HS_UV_SIGN2UNSIGN; // UV data select (If UV is signed, select the unsigned UV data 0: select the original UV; 1: select the UV after sign processing) + typedef UReg<0x01, 0x03, 0, 8> IF_HS_RATE_SEG0; // Horizontal non-linear scaling-down 1st segment DDA increment [11:4] (total 12 bits) + // The entire segment share the lowest 4bit, that is to say, the whole scale ration is + // hscale = {hscale0, hscale_low}. Assume the scaling ratio is n/m, then the value should be 4095x(m-n)/n + typedef UReg<0x01, 0x04, 0, 8> IF_HS_RATE_SEG1; // Horizontal non-linear scaling-down 2nd segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x05, 0, 8> IF_HS_RATE_SEG2; // Horizontal non-linear scaling-down 3rd segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x06, 0, 8> IF_HS_RATE_SEG3; // Horizontal non-linear scaling-down 4th segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x07, 0, 8> IF_HS_RATE_SEG4; // Horizontal non-linear scaling-down 5th segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x08, 0, 8> IF_HS_RATE_SEG5; // Horizontal non-linear scaling-down 6th segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x09, 0, 8> IF_HS_RATE_SEG6; // Horizontal non-linear scaling-down 7th segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x0A, 0, 8> IF_HS_RATE_SEG7; // Horizontal non-linear scaling-down 8th segment DDA increment [11:4] (total 12 bits) + typedef UReg<0x01, 0x0B, 0, 4> IF_HS_RATE_LOW; // Horizontal non-linear scaling-down DDA increment shared lowest 4 bits [3:0] (total 12 bits) + typedef UReg<0x01, 0x0B, 4, 2> IF_HS_DEC_FACTOR; // Horizontal non-linear scaling-down factor select + // If the scaling ratio is less than 1⁄2, use it and DDA to generate the we and phase + // 00: scaling-ratio is more than 1⁄2 + // 01: scaling-ratio is less than 1⁄2 + // 10: scaling-ratio is less than 1⁄4 + typedef UReg<0x01, 0x0B, 6, 1> IF_SEL_HSCALE; // Select the data path after horizontal scaling-down + // If the data have do scaling-down, this bit should be open. + // 0: select the data and write enable from CCIR to line double. + // 1: select the scaling-down data and write enable to line double) + typedef UReg<0x01, 0x0B, 7, 1> IF_LD_SEL_PROV; // Line double read reset select + // If source is progressive data, choose the related progressive timing as read reset timing. + // 0: select read reset timing of interlace data. + // 1: select read reset timing of progressive data + typedef UReg<0x01, 0x0c, 0, 1> IF_LD_RAM_BYPS; // Line double bypass control + // If the interlace data can’t do line double, if the progressive data can’t do scaling- down, line double FIFO should be bypass. + // 0: select interlace line double data from FIFO. + // 1: bypass line double FIFO + typedef UReg<0x01, 0x0c, 1, 4> IF_LD_ST; // Line double write reset generation start position (If the internal counter equals the defined value the write reset will be high pulse.) + typedef UReg<0x01, 0x0c, 5, 11> IF_INI_ST; // Initial position (Start position indicator of vertical blanking. For the internal line_counter, the detail pixel’s shift that the line_counter count compare to the horizontal sync) + typedef UReg<0x01, 0x0e, 0, 11> IF_HSYNC_RST; // Total pixel number per line (Use to generate progressive timing if input is interlace data [10:0]) + + typedef UReg<0x01, 0x10, 0, 11> IF_HB_ST; // Horizontal blanking (set 0) start position [10:0]. + typedef UReg<0x01, 0x12, 0, 11> IF_HB_SP; // Horizontal blanking (set 0) stop position [10:0] + typedef UReg<0x01, 0x14, 0, 11> IF_HB_ST1; // Horizontal blanking (set 1) start position [10:0] + typedef UReg<0x01, 0x16, 0, 11> IF_HB_SP1; // Horizontal blanking (set 1) stop position [10:0] + typedef UReg<0x01, 0x18, 0, 11> IF_HB_ST2; // Horizontal blanking (set 2) start position [10:0]. + typedef UReg<0x01, 0x1a, 0, 11> IF_HB_SP2; // Horizontal blanking (set 2) stop position [10:0] + typedef UReg<0x01, 0x1c, 0, 11> IF_VB_ST; // Vertical blanking start position [10:0]. + typedef UReg<0x01, 0x1e, 0, 11> IF_VB_SP; // Vertical blanking stop position [10:0]. + typedef UReg<0x01, 0x20, 0, 12> IF_LINE_ST; // Progressive line start position. + typedef UReg<0x01, 0x22, 0, 12> IF_LINE_SP; // Progressive line stop position. + typedef UReg<0x01, 0x24, 0, 12> IF_HBIN_ST; // Horizontal blank for scale down line reset start position [11:0] + typedef UReg<0x01, 0x26, 0, 12> IF_HBIN_SP; // Horizontal blank for scale down line reset stop position [11:0] + typedef UReg<0x01, 0x28, 1, 1> IF_LD_WRST_SEL; // Select hbin/line write reset (0 - select line generated write reset, 1 - select hbin generated write reset) + typedef UReg<0x01, 0x28, 2, 1> IF_SEL_ADC_SYNC; // Select ADC sync to data path + typedef UReg<0x01, 0x28, 3, 1> IF_TEST_EN; // IF test bus control enable - Enable test signal. + typedef UReg<0x01, 0x28, 4, 4> IF_TEST_SEL; // Test signals select bits - Select which signal to the test bus. + typedef UReg<0x01, 0x29, 0, 1> IF_AUTO_OFST_EN; // Auto offset adjustment enable (1 - enable, 0 - disable) + typedef UReg<0x01, 0x29, 1, 1> IF_AUTO_OFST_PRD; // Auto offset adjustment period control (1 - by frame, 0 - by line) + typedef UReg<0x01, 0x2A, 0, 4> IF_AUTO_OFST_U_RANGE; // U channel offset detection range + typedef UReg<0x01, 0x2A, 4, 4> IF_AUTO_OFST_V_RANGE; // V channel offset detection range + // 01_2B:2F - not described registers typedef UReg<0x01, 0x2B, 0, 7> GBS_PRESET_ID; - typedef UReg<0x01, 0x2B, 7, 1> GBS_PRESET_CUSTOM; - typedef UReg<0x01, 0x2C, 0, 1> GBS_OPTION_SCANLINES_ENABLED; - typedef UReg<0x01, 0x2C, 1, 1> GBS_OPTION_SCALING_RGBHV; - typedef UReg<0x01, 0x2C, 2, 1> GBS_OPTION_PALFORCED60_ENABLED; - typedef UReg<0x01, 0x2C, 3, 1> GBS_RUNTIME_UNUSED_BIT; - typedef UReg<0x01, 0x2C, 4, 1> GBS_RUNTIME_FTL_ADJUSTED; - typedef UReg<0x01, 0x2D, 0, 8> GBS_PRESET_DISPLAY_CLOCK; - - // HDBypass - typedef UReg<0x01, 0x30, 1, 1> HD_MATRIX_BYPS; - typedef UReg<0x01, 0x30, 2, 1> HD_DYN_BYPS; - typedef UReg<0x01, 0x30, 3, 1> HD_SEL_BLK_IN; - typedef UReg<0x01, 0x32, 0, 8> HD_Y_OFFSET; - typedef UReg<0x01, 0x34, 0, 8> HD_U_OFFSET; - typedef UReg<0x01, 0x36, 0, 8> HD_V_OFFSET; - typedef UReg<0x01, 0x37, 0, 11> HD_HSYNC_RST; - typedef UReg<0x01, 0x39, 0, 11> HD_INI_ST; - typedef UReg<0x01, 0x3B, 0, 12> HD_HB_ST; - typedef UReg<0x01, 0x3D, 0, 12> HD_HB_SP; - typedef UReg<0x01, 0x3F, 0, 12> HD_HS_ST; - typedef UReg<0x01, 0x41, 0, 12> HD_HS_SP; - typedef UReg<0x01, 0x43, 0, 12> HD_VB_ST; - typedef UReg<0x01, 0x45, 0, 12> HD_VB_SP; - typedef UReg<0x01, 0x47, 0, 12> HD_VS_ST; - typedef UReg<0x01, 0x49, 0, 12> HD_VS_SP; - typedef UReg<0x01, 0x53, 0, 8> HD_BLK_GY_DATA; - typedef UReg<0x01, 0x54, 0, 8> HD_BLK_BU_DATA; - typedef UReg<0x01, 0x55, 0, 8> HD_BLK_RV_DATA; - - // Mode Detect - typedef UReg<0x01, 0x60, 0, 5> MD_HPERIOD_LOCK_VALUE; - typedef UReg<0x01, 0x60, 5, 3> MD_HPERIOD_UNLOCK_VALUE; - typedef UReg<0x01, 0x61, 0, 5> MD_VPERIOD_LOCK_VALUE; - typedef UReg<0x01, 0x61, 5, 3> MD_VPERIOD_UNLOCK_VALUE; - typedef UReg<0x01, 0x63, 6, 1> MD_HS_FLIP; - typedef UReg<0x01, 0x63, 7, 1> MD_VS_FLIP; - typedef UReg<0x01, 0x65, 0, 7> MD_VGA_CNTRL; - typedef UReg<0x01, 0x65, 7, 1> MD_SEL_VGA60; - typedef UReg<0x01, 0x66, 0, 8> MD_VGA_75HZ_CNTRL; - typedef UReg<0x01, 0x67, 0, 8> MD_VGA_85HZ_CNTRL; - typedef UReg<0x01, 0x6A, 0, 8> MD_SVGA_60HZ_CNTRL; - typedef UReg<0x01, 0x6B, 0, 8> MD_SVGA_75HZ_CNTRL; - typedef UReg<0x01, 0x6C, 0, 8> MD_SVGA_85HZ_CNTRL; - typedef UReg<0x01, 0x6E, 0, 8> MD_XGA_60HZ_CNTRL; - typedef UReg<0x01, 0x6F, 0, 7> MD_XGA_70HZ_CNTRL; - typedef UReg<0x01, 0x70, 0, 7> MD_XGA_75HZ_CNTRL; - typedef UReg<0x01, 0x71, 0, 7> MD_XGA_85HZ_CNTRL; - typedef UReg<0x01, 0x73, 0, 7> MD_SXGA_60HZ_CNTRL; - typedef UReg<0x01, 0x74, 0, 7> MD_SXGA_75HZ_CNTRL; - typedef UReg<0x01, 0x75, 0, 7> MD_SXGA_85HZ_CNTRL; - typedef UReg<0x01, 0x7F, 0, 7> MD_HD1250P_CNTRL; // changed to meaning 24khz + // ! @sk: supressed for now + // typedef UReg<0x01, 0x2B, 7, 1> GBS_PRESET_CUSTOM; + // typedef UReg<0x01, 0x2C, 0, 1> GBS_OPTION_SCANLINES_ENABLED; + // typedef UReg<0x01, 0x2C, 1, 1> GBS_OPTION_SCALING_RGBHV; + // typedef UReg<0x01, 0x2C, 2, 1> GBS_OPTION_PALFORCED60_ENABLED; + // typedef UReg<0x01, 0x2C, 3, 1> GBS_RUNTIME_UNUSED_BIT; + // typedef UReg<0x01, 0x2C, 4, 1> GBS_RUNTIME_FTL_ADJUSTED; + // typedef UReg<0x01, 0x2D, 0, 8> GBS_PRESET_DISPLAY_CLOCK; + + // + // HDBypass (all registers R/W) + // + typedef UReg<0x01, 0x30, 1, 1> HD_MATRIX_BYPS; // Available only when input source is YUV source + typedef UReg<0x01, 0x30, 2, 1> HD_DYN_BYPS; // If the input is YUV data, it must do dynamic range. + typedef UReg<0x01, 0x30, 3, 1> HD_SEL_BLK_IN; // Choose the input blank or generated blank use sync. + typedef UReg<0x01, 0x31, 0, 8> HD_Y_GAIN; // The gain value of Y dynamic range. + typedef UReg<0x01, 0x32, 0, 8> HD_Y_OFFSET; // The offset value of Y dynamic range. + typedef UReg<0x01, 0x33, 0, 8> HD_U_GAIN; // The gain value of U dynamic range. + typedef UReg<0x01, 0x34, 0, 8> HD_U_OFFSET; // The offset value of U dynamic range. + typedef UReg<0x01, 0x35, 0, 8> HD_V_GAIN; // The gain value of V dynamic range. + typedef UReg<0x01, 0x36, 0, 8> HD_V_OFFSET; // The offset value of V dynamic range. + typedef UReg<0x01, 0x37, 0, 11> HD_HSYNC_RST; // Horizontal counter reset value [10:0]. + typedef UReg<0x01, 0x39, 0, 11> HD_INI_ST; // Vertical counter write enable, adjust the distance between hblank and vblank [10:0]. + typedef UReg<0x01, 0x3B, 0, 12> HD_HB_ST; // Generate horizontal blank to select programmed data [11:0] + typedef UReg<0x01, 0x3D, 0, 12> HD_HB_SP; // Generate horizontal blank to select programmed data [11:0]. + typedef UReg<0x01, 0x3F, 0, 12> HD_HS_ST; // Output sync to DAC start position [11:0] + typedef UReg<0x01, 0x41, 0, 12> HD_HS_SP; // Output sync to DAC stop position [11:0] + typedef UReg<0x01, 0x43, 0, 12> HD_VB_ST; // Generate blank to select program data in blank [11:0] + typedef UReg<0x01, 0x45, 0, 12> HD_VB_SP; // Generate blank to select program data in blank [11:0] + typedef UReg<0x01, 0x47, 0, 12> HD_VS_ST; // Output vertical sync to DAC start position [11:0] + typedef UReg<0x01, 0x49, 0, 12> HD_VS_SP; // Output vertical sync to DAC stop position [11:0] + typedef UReg<0x01, 0x4B, 0, 12> HD_EXT_VB_ST; // Output vertical blank to DAC for DIV mode start position [11:0] + typedef UReg<0x01, 0x4D, 0, 12> HD_EXT_VB_SP; // Output vertical blank to DAC for DIV mode stop position [11:0] + typedef UReg<0x01, 0x4F, 0, 12> HD_EXT_HB_ST; // Output horizontal blank to DAC for DIV mode start position [11:0] + typedef UReg<0x01, 0x51, 0, 12> HD_EXT_HB_SP; // Output horizontal blank to DAC for DIV mode stop position [11:0] + typedef UReg<0x01, 0x53, 0, 8> HD_BLK_GY_DATA; // Force the blank of GY data to the defined programmed data + typedef UReg<0x01, 0x54, 0, 8> HD_BLK_BU_DATA; // Force the blank of BU data to the defined programmed data + typedef UReg<0x01, 0x55, 0, 8> HD_BLK_RV_DATA; // Force the blank of BU data to the defined programmed data + + // + // Mode Detect (all registers R/W) + // + typedef UReg<0x01, 0x60, 0, 5> MD_HPERIOD_LOCK_VALUE; // Mode Detect Horizontal Period Lock Value (If the continuous stabled line number is equal to the defined value, the horizontal stable indicator will be high) + typedef UReg<0x01, 0x60, 5, 3> MD_HPERIOD_UNLOCK_VALUE; // Mode Detect Horizontal Period Unlock Value (If the continuous unstable line number is equal to the defined value, the horizontal stable indicator will be low) + typedef UReg<0x01, 0x61, 0, 5> MD_VPERIOD_LOCK_VALUE; // Mode Detect Vertical Period Lock Value (If the continuous stabled frame number is equal to the defined value, the vertical stable indicator will be high) + typedef UReg<0x01, 0x61, 5, 3> MD_VPERIOD_UNLOCK_VALUE; // Mode Detect Vertical Period Unlock Value (If the continuous unstable frame number is equal to the defined value, the vertical stable indicator will be low) + typedef UReg<0x01, 0x62, 0, 6> MD_NTSC_INT_CNTRL; // NTSC Interlace Mode Detect Value (If the vertical period number is equal to the defined value, This mode is NTSC Interlace mode) + typedef UReg<0x01, 0x62, 6, 2> MD_WEN_CNTRL; // Horizontal Stable Estimation Error Range Control (The continuous line is stable in the defined error range. see: DEVELOPER_NOTES.md -> S1_62) + typedef UReg<0x01, 0x63, 0, 5> MD_PAL_INT_CNTRL; // PAL Interlace Mode Detect Value (If the vertical period number is equal to the defined value, This mode is PAL interlace mode) + typedef UReg<0x01, 0x63, 6, 1> MD_HS_FLIP; // Input Horizontal sync polarity Control (When set it to 1, the input horizontal sync will be inverted.) + typedef UReg<0x01, 0x63, 7, 1> MD_VS_FLIP; // Input Vertical sync polarity Control (When set it to 1, the input vertical sync will be inverted) + typedef UReg<0x01, 0x64, 0, 7> MD_NTSC_PRG_CNTRL; // NTSC Progressive Mode Detect Value (If the vertical period number is equal to the defined value, This mode is NTSC progressive mode or VGA 60HZ mode) + // 64_7:1 - reserved + typedef UReg<0x01, 0x65, 0, 7> MD_VGA_CNTRL; // VGA Mode Vertical Detect Value (If the vertical period number is equal to the defined value, this mode is VGA mode, except VGA 60HZ mode) + typedef UReg<0x01, 0x65, 7, 1> MD_SEL_VGA60; // Select VGA 60HZ mode: Program this bit to distinguish between VGA 60Hz mode and NTSC progressive mode; + // When set to 1, select VGA 60Hz mode + // When set to 0, select NTSC progressive mode + typedef UReg<0x01, 0x66, 0, 8> MD_VGA_75HZ_CNTRL; // VGA 75Hz Horizontal Detect Value (If the horizontal period number is equal to the defined value, in VGA mode, this mode Is VGA 75Hz mode) + typedef UReg<0x01, 0x67, 0, 8> MD_VGA_85HZ_CNTRL; // VGA 85Hz Horizontal Detect Value (If the horizontal period number is equal to the defined value, in VGA mode, this mode Is VGA 85Hz mode) + typedef UReg<0x01, 0x68, 0, 7> MD_V1250_VCNTRL; // Vertical 1250 Line Mode Vertical Detect Value + // 68_7:1 - reserved + typedef UReg<0x01, 0x69, 0, 8> MD_V1250_HCNTRL; // Vertical 1250 Line Mode Horizontal Detect Value, horizontal 866 pixels mode detect value + typedef UReg<0x01, 0x6A, 0, 8> MD_SVGA_60HZ_CNTRL; // SVGA 60HZ Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in SVGA mode, it’s SVGA 60Hz mode.) + typedef UReg<0x01, 0x6B, 0, 8> MD_SVGA_75HZ_CNTRL; // SVGA 75HZ Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in SVGA mode, it’s SVGA 75Hz mode) + typedef UReg<0x01, 0x6C, 0, 8> MD_SVGA_85HZ_CNTRL; // SVGA 85HZ Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in SVGA mode, it’s SVGA 85Hz mode) + typedef UReg<0x01, 0x6D, 0, 7> MD_XGA_CNTRL; // XGA Mode Vertical Detect Value (If the vertical period number is equal to the defined value, it’s XGA mode.) + // 6D_7:1 - reserved + typedef UReg<0x01, 0x6E, 0, 8> MD_XGA_60HZ_CNTRL; // XGA 60Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in XGA modes, It’s XGA 60Hz mode) + typedef UReg<0x01, 0x6F, 0, 7> MD_XGA_70HZ_CNTRL; // XGA 70Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in XGA modes, It’s XGA 70Hz mode) + // 6F_7:1 - reserved + typedef UReg<0x01, 0x70, 0, 7> MD_XGA_75HZ_CNTRL; // XGA 75Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in XGA modes, It’s XGA 75Hz mode) + // 70_7:1 - reserved + typedef UReg<0x01, 0x71, 0, 7> MD_XGA_85HZ_CNTRL; // XGA 85Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in XGA modes, It’s XGA 85Hz mode) + // 71_7:1 - reserved + typedef UReg<0x01, 0x72, 0, 8> MD_SXGA_CNTRL; // SXGA Mode Vertical Detect Value (If the vertical period number is equal to the defined value, It’s SXGA mode) + typedef UReg<0x01, 0x73, 0, 7> MD_SXGA_60HZ_CNTRL; // SXGA 60Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in SXGA modes, It’s SXGA 60Hz mode) + // 73_7:1 - reserved + typedef UReg<0x01, 0x74, 0, 7> MD_SXGA_75HZ_CNTRL; // SXGA 75Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in SXGA modes, It’s SXGA 75Hz mode) + // 74_7:1 - reserved + typedef UReg<0x01, 0x75, 0, 7> MD_SXGA_85HZ_CNTRL; // SXGA 85Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in SXGA modes, It’s SXGA 85Hz mode) + // 75_7:1 - reserved + typedef UReg<0x01, 0x76, 0, 7> MD_HD720P_CNTRL; // HD720P Vertical Detect Value (If the vertical period number is equal to the defined value, It’s HD720P mode) + // 76_7:1 - reserved + typedef UReg<0x01, 0x77, 0, 8> MD_HD720P_60HZ_CNTRL; // HD720P 60Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in HD720P mode. It is HD720P 60Hz mode) + typedef UReg<0x01, 0x78, 0, 8> MD_HD720P_50HZ_CNTRL; // HD720P 50Hz Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, in HD720P mode. It is HD720P 50Hz mode) + typedef UReg<0x01, 0x79, 0, 7> MD_HD1125I_CNTRL; // 1080I Mode 1125 Line Vertical Detect Value (If the vertical period number is equal to the defined value, It’s 1125I mode) + // 79_7:1 - reserved + typedef UReg<0x01, 0x7A, 0, 8> MD_HD2200_1125I_CNTRL; // 1080I Mode 2200x1125I Horizontal Detect Value (If the horizontal period number is equal to the defined value, in 1080I mode. It is HD2200x1125I mode) + typedef UReg<0x01, 0x7B, 0, 8> MD_HD2640_1125I_CNTRL; // 1080I Mode 2640x1125I Horizontal Detect Value (If the horizontal period number is equal to the defined value, in 1080I mode. It is HD2640x1125I mode) + typedef UReg<0x01, 0x7C, 0, 8> MD_HD1125P_CNTRL; // 1080P Mode 1125 Line Vertical Detect Value (If the vertical period number is equal to the defined value, It is HD1125P mode) + typedef UReg<0x01, 0x7D, 0, 7> MD_HD2200_1125P_CNTRL; // 1080P Mode 2200x1125P Horizontal Detect Value (If the horizontal period number is equal to the defined value, in 1080P mode, It is HD2200x1125P mode) + // 7D_7:1 - reserved + typedef UReg<0x01, 0x7E, 0, 7> MD_HD2640_1125P_CNTRL; // 1080P Mode 2640x1125P Horizontal Detect Value (If the horizontal period number is equal to the defined value, in 1080P mode, It is HD2640x1125P mode) + // 7E_7:1 - reserved + typedef UReg<0x01, 0x7F, 0, 8> MD_HD1250P_CNTRL; // [changed to meaning 24khz] 1080P Mode 2640x1125P Horizontal Detect Value (If the horizontal period number is equal to the defined value, in 1080P mode, It is HD2640x1125P mode) + typedef UReg<0x01, 0x80, 0, 8> MD_USER_DEF_VCNTRL; // User Defined Mode Vertical Detect Value (If the vertical period number is equal to the defined value, It is user-defined mode) + typedef UReg<0x01, 0x81, 0, 8> MD_USER_DEF_HCNTRL; // User Defined Mode Horizontal Detect Value (If the horizontal period number is equal to the defined value, It is user-defined mode) + typedef UReg<0x01, 0x82, 0, 1> MD_NOSYNC_DET_EN; // Sync Connection Detect Enable (Detect the horizontal sync signal if connect or not. 0: user mode; 1: auto detect) + typedef UReg<0x01, 0x82, 1, 1> MD_NOSYNC_USER_ID; // Sync Connection Detect User Defined ID (User defined indicator in user mode. 0: sync connected; 1: no sync connected) + typedef UReg<0x01, 0x82, 2, 1> MD_SW_DET_EN; // Mode Switch Detect Enable (Enable bit of auto detect if the mode changed or not. 0: user mode; 1: auto detect) + typedef UReg<0x01, 0x82, 3, 1> MD_SW_USER_ID; // Mode Switch Detect User Defined ID (User defined indicator in user mode. 0->1: mode changed; 1->0: mode changed) + typedef UReg<0x01, 0x82, 4, 1> MD_TIMER_DET_EN_H; // Horizontal Unstable Estimation Timer Detect Enable (Enable the timer detect result in horizontal unstable estimation. 0: use the hstable indicator in hperiod detect; 1: use the timer detected unstable indicator) + typedef UReg<0x01, 0x82, 5, 1> MD_TIMER_DET_EN_V; // Vertical Unstable Estimation Timer Detect Enable (Enable the timer detect result in vertical unstable estimation. 0: use the vstable indicator in vperiod detect.; 1: use the timer detected unstable indicator) + typedef UReg<0x01, 0x82, 6, 1> MD_DET_BYPS_H; // Horizontal Unstable Estimation Bypass Control (Bypass the horizontal unstable estimation 0: auto mode; 1: user mode) + typedef UReg<0x01, 0x82, 7, 1> MD_H_USER_ID; // Horizontal Unstable Estimation User Defined ID (User defined indicator in user mode. 0: stable; 1: unstable) + typedef UReg<0x01, 0x83, 0, 1> MD_DET_BYPS_V; // Vertical Unstable Estimation Bypass Control (Bypass the vertical unstable estimation auto detect 0: auto mode; 1: user mode) + typedef UReg<0x01, 0x83, 1, 1> MD_V_USER_ID; // Vertical Unstable Estimation User Defined ID (User defined indicator in user mode. 0: stable; 1: unstable) + typedef UReg<0x01, 0x83, 2, 4> MD_UNSTABLE_LOCK_VALUE; // Unstable Estimation Lock Value (If the internal counter equals the defined value, the unstable indicator will be high. Horizontal and vertical estimation shared this value) + // 83_6:2 - reserved + + // // Deinterlacer / Scaledown registers - typedef UReg<0x02, 0x00, 0, 8> DEINT_00; - typedef UReg<0x02, 0x00, 7, 1> DIAG_BOB_PLDY_RAM_BYPS; - typedef UReg<0x02, 0x02, 6, 1> MADPT_Y_VSCALE_BYPS; - typedef UReg<0x02, 0x02, 7, 1> MADPT_UV_VSCALE_BYPS; - typedef UReg<0x02, 0x0A, 5, 1> MADPT_STILL_NOISE_EST_EN; - typedef UReg<0x02, 0x0A, 7, 1> MADPT_Y_MI_DET_BYPS; - typedef UReg<0x02, 0x0B, 0, 7> MADPT_Y_MI_OFFSET; - typedef UReg<0x02, 0x0C, 4, 1> MADPT_MI_1BIT_BYPS; - typedef UReg<0x02, 0x0C, 5, 1> MADPT_MI_1BIT_FRAME2_EN; - typedef UReg<0x02, 0x16, 5, 1> MADPT_MO_ADP_UV_EN; - typedef UReg<0x02, 0x16, 6, 1> MADPT_VT_FILTER_CNTRL; - typedef UReg<0x02, 0x16, 7, 1> MAPDT_VT_SEL_PRGV; - typedef UReg<0x02, 0x17, 0, 8> MADPT_Y_DELAY_UV_DELAY; // convenience - typedef UReg<0x02, 0x17, 0, 4> MADPT_Y_DELAY; - typedef UReg<0x02, 0x17, 4, 4> MADPT_UV_DELAY; - typedef UReg<0x02, 0x18, 3, 1> MADPT_HTAP_BYPS; - typedef UReg<0x02, 0x19, 0, 1> MADPT_BIT_STILL_EN; - typedef UReg<0x02, 0x19, 2, 1> MADPT_VTAP2_BYPS; - typedef UReg<0x02, 0x19, 3, 1> MADPT_VTAP2_ROUND_SEL; - typedef UReg<0x02, 0x19, 4, 4> MADPT_VTAP2_COEFF; - typedef UReg<0x02, 0x21, 4, 1> MADPT_EN_NOUT_FOR_STILL; - typedef UReg<0x02, 0x21, 5, 1> MADPT_EN_NOUT_FOR_LESS_STILL; - typedef UReg<0x02, 0x24, 2, 1> MADPT_PD_RAM_BYPS; - typedef UReg<0x02, 0x26, 6, 1> MADPT_VIIR_BYPS; - typedef UReg<0x02, 0x27, 0, 7> MADPT_VIIR_COEF; - typedef UReg<0x02, 0x31, 0, 2> MADPT_VSCALE_DEC_FACTOR; - typedef UReg<0x02, 0x31, 2, 1> MADPT_SEL_PHASE_INI; - typedef UReg<0x02, 0x35, 3, 1> MADPT_DD0_SEL; - typedef UReg<0x02, 0x35, 4, 1> MADPT_NRD_VIIR_PD_BYPS; - typedef UReg<0x02, 0x35, 5, 1> MADPT_UVDLY_PD_BYPS; - typedef UReg<0x02, 0x35, 6, 1> MADPT_CMP_EN; - typedef UReg<0x02, 0x39, 0, 4> MADPT_UVDLY_PD_SP; - typedef UReg<0x02, 0x39, 4, 4> MADPT_UVDLY_PD_ST; - typedef UReg<0x02, 0x3a, 0, 1> MADPT_EN_UV_DEINT; - typedef UReg<0x02, 0x3a, 3, 1> MADPT_EN_STILL_FOR_NRD; - typedef UReg<0x02, 0x3a, 5, 2> MADPT_MI_1BIT_DLY; - typedef UReg<0x02, 0x3a, 7, 1> MADPT_UV_MI_DET_BYPS; - typedef UReg<0x02, 0x3b, 0, 7> MADPT_UV_MI_OFFSET; - - // VDS Registers + // + typedef UReg<0x02, 0x00, 0, 8> DEINT_00; // DEINTERLACER 00 + typedef UReg<0x02, 0x00, 0, 1> DIAG_BOB_MIN_BYPS; // Diagonal Function Bypass Control (When set to 1, bypass diagonal min selection for Y. No diagonal detection, just vertically two pixels average.) + typedef UReg<0x02, 0x00, 1, 1> DIAG_BOB_COEF_SEL; // Diagonal Bob Low pass Filter Coefficient Selection (see DEVELOPER_NOTES.md -> Diagonal Bob Low pass Filter Coefficient Selection) + typedef UReg<0x02, 0x00, 2, 1> DIAG_BOB_WEAVE_BYPS; // Weave Function Bypass Control (When set to 1, weave function will bypass. Just repeat original data.) + typedef UReg<0x02, 0x00, 3, 2> DIAG_BOB_DET_BYPS; // Diagonal Bob Deinterlacer Angle Detect Bypass Control (When set to 1, bypass the detection of angle arctan (1/4):(1/6).) + typedef UReg<0x02, 0x00, 5, 1> DIAG_BOB_YTAP3_BYPS; // Diagonal Bob Deinterlacer Y Tap3 Filter Bypass control (When set to 1, bypass the tap3 filter for Y.) + typedef UReg<0x02, 0x00, 6, 1> DIAG_BOB_MIN_CBYPS; // Diagonal Bob Min Control For UV (When set to 1, bypass diagonal min select for UV. No diagonal detection, just vertically two pixels average.) + typedef UReg<0x02, 0x00, 7, 1> DIAG_BOB_PLDY_RAM_BYPS; // Bypass Control For Pdelayer FIFO (When set to 1, bypass FIFO for pdelayer.) + typedef UReg<0x02, 0x01, 0, 9> DIAG_BOB_PLDY_SP; // The Distance Control of Pdelayer Reset [7:0] (In pdelayer, adjust the delay between read reset and write reset.) + // 02_1:4 - reserved + typedef UReg<0x02, 0x02, 5, 1> MADPT_SEL_22; // 2:2 pull-down selection (When set to 1, enable 2:2 pull-down detection; When set to 0, enable 3:2 pull-down detection.) + typedef UReg<0x02, 0x02, 6, 1> MADPT_Y_VSCALE_BYPS; // Bypass Y phase adjustment in vertical scaling down (When set to 1, Y phase adjustment in vertical scaling down will be bypass) + typedef UReg<0x02, 0x02, 7, 1> MADPT_UV_VSCALE_BYPS; // Bypass UV phase adjustment in vertical scaling down (When set to 1, UV phase adjustment in vertical scaling down will be bypass) + typedef UReg<0x02, 0x03, 0, 1> MADPT_NOISE_DET_SEL; // Noise detection selection (When set to 1, noise detection is in video active period. When set to 0, noise detection is in video blanking period.) + typedef UReg<0x02, 0x03, 1, 2> MADPT_NOISE_DET_SHIFT; // Noise detection shift + // When set to 3, noise detection drop 15bits + // When set to 2, noise detection drop 16bits + // When set to 1, noise detection drop 17bits + // When set to 0, noise detection drop 18bits + typedef UReg<0x02, 0x03, 3, 2> MADPT_NOISE_DET_RST; // Noise detection time reset value + // When set to 3, time counter reset at 1023. + // When set to 2, time counter reset at 511. + // When set to 1, time counter reset at 255. + // When set to 0, time counter reset at 127. + // 03_5:3 - reserved + typedef UReg<0x02, 0x04, 0, 6> MADPT_NOISE_THRESHOLD_NOUT; // Auto noise detect threshold for NOUT - Threshold for NOUT signal. + typedef UReg<0x02, 0x05, 0, 6> MADPT_NOISE_THRESHOLD_VDS; // Auto noise detect threshold for nout_vds_proc - Threshold for nout_vds_proc signal. + typedef UReg<0x02, 0x06, 0, 8> MADPT_GM_NOISE_VALUE; // Global noise low/global noise auto detect offset low + // In global motion noise manual mode, global motion detection noise bit [3:0] + // In global motion noise auto-detect mode, global motion noise’s offset bit [3:0] + // In global motion noise manual mode, global motion detection noise bit [7:4] + // In global motion noise auto-detect mode, global motion noise’s offset bit [7:4] + typedef UReg<0x02, 0x07, 0, 8> MADPT_STILL_NOISE_VALUE; // Global still control value (In manual mode, still-noise value bit; In auto-detect mode, still-noise’s offset bit.) + typedef UReg<0x02, 0x08, 0, 8> MADPT_LESS_NOISE_VALUE; // Less-still noise value (User defined less still noise value.) + typedef UReg<0x02, 0x09, 0, 4> MADPT_NOISE_EST_GAIN; // Global motion noise gain (in auto-detect mode) + typedef UReg<0x02, 0x09, 4, 8> MADPT_STILL_NOISE_EST_GAIN; // Still-noise gain (in auto-detect mode) + // 0A_0:4 - reserved + typedef UReg<0x02, 0x0A, 4, 1> MADPT_NOISE_EST_EN; // Global noise auto detection enable (When set to 1,global noise detection is in auto mode.; When set to 0,global noise detection is in manual mode.) + typedef UReg<0x02, 0x0A, 5, 1> MADPT_STILL_NOISE_EST_EN; // Still-noise auto detection enable (When set to 1, still-noise is in auto detection; When set to 0, still-noise is in manual mode.) + // 0A_6:1 - reserved + typedef UReg<0x02, 0x0A, 7, 1> MADPT_Y_MI_DET_BYPS; // MADPT_Y_MI_DET_BYPS (When set to 1, Y motion index generation is in manual mode) + typedef UReg<0x02, 0x0B, 0, 7> MADPT_Y_MI_OFFSET; // Y motion index offset (In auto mode, Y motion index’s offset.; In manual mode, Y motion index’s user value.) + // 0B_7:1 - reserved + typedef UReg<0x02, 0x0C, 0, 4> MADPT_Y_MI_GAIN; // Y motion index gain + typedef UReg<0x02, 0x0C, 4, 1> MADPT_MI_1BIT_BYPS; // Motion index feedback-bit bypass (When set to 1, motion index feedback-bit function will be bypass) + typedef UReg<0x02, 0x0C, 5, 1> MADPT_MI_1BIT_FRAME2_EN; // Enable Frame-two feedback-bit (When set to 1, enable frame-two feedback-bit.) + // 0C_7:1 - reserved + typedef UReg<0x02, 0x0D, 0, 7> MADPT_MI_THRESHOLD_D; // Motion index feedback-bit generation’s threshold bit + typedef UReg<0x02, 0x0E, 0, 7> MADPT_MI_THRESHOLD_E; // Motion index fixed value + typedef UReg<0x02, 0x0F, 0, 1> MADPT_STILL_DET_EN; // MStill detection enable (When set to 1, still detection is in auto mode. When set to 0, still detection is in manual mode.) + typedef UReg<0x02, 0x0F, 1, 1> MADPT_STILL_ID; // Still indicator defined by user (in manual mode only) (Still indicator defined by user, only useful in STILL_DET_EN =0.) + typedef UReg<0x02, 0x0F, 2, 2> MADPT_STILL_UNLOCK; // Still detection’s auto unlock value (When unlock counter equals unlock value, “still” will go inactive.) + typedef UReg<0x02, 0x0F, 4, 4> MADPT_STILL_LOCK; // Still detection’s auto lock value (When lock counter equals lock value, “still” will go active.) + typedef UReg<0x02, 0x10, 0, 1> MADPT_LESS_STILL_DET_EN; // Less still detection enable (When set to 1, less-still detection is in auto mode. When set to 0, less-still detection is in manual mode.) + typedef UReg<0x02, 0x10, 1, 1> MADPT_LESS_STILL_ID; // Less still indicator defined by user (in manual mode only) (Less-still indicator defined by user, only useful in LESS_STILL_DET_EN =0) + typedef UReg<0x02, 0x10, 2, 2> MADPT_LESS_STILL_UNLOCK; // Less still detection’s auto unlock value (When unlock counter equals unlock value, “less-still” will go inactive.) + typedef UReg<0x02, 0x10, 4, 4> MADPT_LESS_STILL_LOCK; // Less still detection’s auto lock value (When lock counter equals lock value, “less-still” will go active.) + // 11_0:2 - reserved + typedef UReg<0x02, 0x11, 3, 1> MADPT_EN_PULLDOWN32; // 3:2 pull-down detection enable (When set to 1, 3:2 pull-down detection is in auto mode. When set to 0, 3:2 pull-down detection is in manual mode.) + typedef UReg<0x02, 0x11, 4, 1> MADPT_PULLDOWN32_ID; // 3:2 pull-down indicator defined by user (in manual mode) (3:2 pull-down indicator by user, only useful in 32PULLDOWN_EN =0) + typedef UReg<0x02, 0x11, 5, 3> MADPT_PULLDOWN32_OFFSET; // 3:2 pull-down sequence offset + typedef UReg<0x02, 0x12, 0, 7> MADPT_PULLDOWN32_LOCK_RST; // 3:2 pull-down auto lock value bit (When lock counter equals lock value, 3:2 pull-down is in active.) + // 12_7:1 - reserved + typedef UReg<0x02, 0x13, 0, 1> EN_22PULLDOWN; // 2:2 pull-down detection enable (When set to 1, 2:2 pull-down detection is in auto mode. When set to 0, 2:2 pull-down detection is in manual mode.) + typedef UReg<0x02, 0x13, 1, 1> ID_22PULLDOWN; // 2:2 pull-down indicator defined by user (in manual mode) (2:2 pull-down indicator by user, only useful in 22PULLDOWN_EN =0) + typedef UReg<0x02, 0x13, 2, 1> MADPT_PULLDOWN22_OFFSET; // 2:2 pull-down sequence offset + // 13_3:1 - reserved + typedef UReg<0x02, 0x13, 4, 3> MADPT_PULLDOWN22_DET_CNTRL; // 2:2 pull-down detection control bit + // 13_7:1 - reserved + typedef UReg<0x02, 0x14, 0, 18> MADPT_PULLDOWN22_THRESHOLD; // 2:2 pull-down detection threshold bit [7:0] + // 16_2:2 - reserved + typedef UReg<0x02, 0x16, 4, 1> MADPT_MO_ADP_Y_EN; // Enable pull-down in Y motion adaptive (When set to 1, enable pull-down for Y data motion adaptive.) + typedef UReg<0x02, 0x16, 5, 1> MADPT_MO_ADP_UV_EN; // Enable pull-down in UV motion adaptive (When set to 1, enable pull-down for UV data motion adaptive.) + typedef UReg<0x02, 0x16, 6, 1> MADPT_VT_FILTER_CNTRL; // Vertical Temporal Filter Control (When set to 1, do motion adaptive in interpolated line only; When set to 0, do motion adaptive in every line.) + typedef UReg<0x02, 0x16, 7, 1> MAPDT_VT_SEL_PRGV; // Select original data in progressive mode in VT filter (If the input is progressive mode or graphic mode, this bit must be set to 1) + typedef UReg<0x02, 0x17, 0, 8> MADPT_Y_DELAY_UV_DELAY; // + typedef UReg<0x02, 0x17, 0, 4> MADPT_Y_DELAY; // Y delay pipe control (see: DEVELOPER_NOTES.md -> Y delay pipe control) + typedef UReg<0x02, 0x17, 4, 4> MADPT_UV_DELAY; // UV delay pipe control (see: DEVELOPER_NOTES.md -> UV delay pipe control) + typedef UReg<0x02, 0x18, 0, 1> MADPT_DIVID_BYPS; // Motion index divide bypass (When = 1, motion index no divide.; When = 0, motion index will by divided by 2 or 4) + typedef UReg<0x02, 0x18, 1, 1> MADPT_DIVID_SEL; // Motion index divide selection (When = 1, motion index will be divided by 2 in still. When = 0, motion index will be divided by 4 in still.) + // 18_2:1 - reserved + typedef UReg<0x02, 0x18, 3, 1> MADPT_HTAP_BYPS; // Motion index horizontal filter bypass (When =1, motion index horizontal filter will be bypass) + typedef UReg<0x02, 0x18, 4, 4> MADPT_HTAP_COEFF; // Motion index horizontal filter coefficient + typedef UReg<0x02, 0x19, 0, 1> MADPT_BIT_STILL_EN; // Enable pixel base still (When set to 1, pixel base still function will enable.) + // 19_1:1 - reserved + typedef UReg<0x02, 0x19, 2, 1> MADPT_VTAP2_BYPS; // Motion index vertical filter bypass (When = 1, motion index’s vertical filter will be bypass.) + typedef UReg<0x02, 0x19, 3, 1> MADPT_VTAP2_ROUND_SEL; // Motion index vertical filter round selection (When set to 1, the input data will be divided by 2.) + typedef UReg<0x02, 0x19, 4, 4> MADPT_VTAP2_COEFF; // Motion index vertical filter coefficient + typedef UReg<0x02, 0x1A, 0, 8> MADPT_PIXEL_STILL_THRESHOLD_1; // Pixel base still threshold level 1 + typedef UReg<0x02, 0x1B, 0, 8> MADPT_PIXEL_STILL_THRESHOLD_2; // Pixel base still threshold level 2 + // 1C_0:8 - reserved + // 1D_0:8 - reserved + // 1E_0:8 - reserved + typedef UReg<0x02, 0x1F, 0, 8> MADPT_HFREQ_NOISE; // High-frequency detection noise value - The noise value for high-frequency detection. + typedef UReg<0x02, 0x20, 0, 1> MADPT_HFREQ_DET_EN; // High-frequency detection enable (When set to 1, high-frequency detection is in auto mode. When set to 0, high-frequency detection is in manual mode.) + typedef UReg<0x02, 0x20, 1, 1> MADPT_HFREQ_ID; // High-frequency indicator by user (in manual mode) (High-frequency indicator by user, only useful in HFREQ_DET_EN =0) + // 20_2:2 - reserved + typedef UReg<0x02, 0x20, 4, 4> MADPT_HFREQ_LOCK; // High-frequency auto lock value (When high-frequency lock counter equals lock value, high-frequency will be active) + typedef UReg<0x02, 0x21, 0, 3> MADPT_HFREQ_UNLOCK; // High-frequency auto unlock value (When high-frequency unlock counter equals unlock value, high-frequency will be inactive) + // 21_3:1 - reserved + typedef UReg<0x02, 0x21, 4, 1> MADPT_EN_NOUT_FOR_STILL; // Enable NOUT for still detection + typedef UReg<0x02, 0x21, 5, 1> MADPT_EN_NOUT_FOR_LESS_STILL; // Enable NOUT for less-still detection + // 21_6:2 - reserved + typedef UReg<0x02, 0x22, 0, 5> MADPT_PD_SP; // Scaling down line buffer WRSTZ position adjustment bits (Adjust the position of write reset in vertical IIR filter line buffer, and phase adjustment line buffer.) + // 22_5:3 - reserved + typedef UReg<0x02, 0x23, 0, 5> MADPT_PD_ST; // Scaling down line buffer WRSTZ position adjustment bits (Adjust the position of write reset in vertical IIR filter line buffer, and phase adjustment line buffer.) + // 23_5:3 - reserved + typedef UReg<0x02, 0x24, 2, 1> MADPT_PD_RAM_BYPS; // Bypass scaling down’s line buffer (When set to 1, scaling down’s line buffer will be bypass.) + // 25_0:8 - reserved + typedef UReg<0x02, 0x26, 6, 1> MADPT_VIIR_BYPS; // Bypass V-IIR filter in vertical scaling down (When set to 1, V-IIR filter in vertical scaling down will be bypass.) + typedef UReg<0x02, 0x26, 7, 1> MADPT_VIIR_ROUND_SEL; // V-IIR filter in vertical scaling down round selection (When set to 1, the input data will be divided by 2) + typedef UReg<0x02, 0x27, 0, 7> MADPT_VIIR_COEF; // V-IIR filter coefficient + // 27_7:1 - reserved + // 28_0:4 - reserved + typedef UReg<0x02, 0x28, 4, 4> MADPT_VSCALE_RATE_LOW; // Vertical non-linear scale down DDA increment shared low 4-bit - All the segment DDA increment share low 4bit + typedef UReg<0x02, 0x29, 0, 8> MADPT_VSCALE_RATE_SEG0; // Vertical non-linear scale down 1st segment DDA increment value (The actual DDA increment is vscale={vscale0, vscale_low}. Assume the scale factor is n/m, then vscale= 4095x(m-n)/n) + typedef UReg<0x02, 0x2A, 0, 8> MADPT_VSCALE_RATE_SEG1; // Vertical non-linear scale down 2nd segment DDA increment value (The actual DDA increment is vscale={vscale1, vscale_low}) + typedef UReg<0x02, 0x2B, 0, 8> MADPT_VSCALE_RATE_SEG2; // Vertical non-linear scale down 3rd segment DDA increment value (The actual DDA increment is vscale={vscale2, vscale_low}.) + typedef UReg<0x02, 0x2C, 0, 8> MADPT_VSCALE_RATE_SEG3; // Vertical non-linear scale down 4th segment DDA increment value (The actual DDA increment is vscale={vscale3, vscale_low}.) + typedef UReg<0x02, 0x2D, 0, 8> MADPT_VSCALE_RATE_SEG4; // Vertical non-linear scale down 5th segment DDA increment value (The actual DDA increment is vscale={vscale4, vscale_low}.) + typedef UReg<0x02, 0x2E, 0, 8> MADPT_VSCALE_RATE_SEG5; // Vertical non-linear scale down 6th segment DDA increment value (The actual DDA increment is vscale={vscale5, vscale_low}.) + typedef UReg<0x02, 0x2F, 0, 8> MADPT_VSCALE_RATE_SEG6; // Vertical non-linear scale down 7th segment DDA increment value (The actual DDA increment is vscale={vscale6, vscale_low}.) + typedef UReg<0x02, 0x30, 0, 8> MADPT_VSCALE_RATE_SEG7; // Vertical non-linear scale down 8th segment DDA increment value (The actual DDA increment is vscale={vscale7, vscale_l + typedef UReg<0x02, 0x31, 0, 2> MADPT_VSCALE_DEC_FACTOR; // Vertical non-linear scaling-down factor select + // If the scaling ratio is less than 1⁄2, use it and DDA to generate the we and phase 00: scaling-ratio is more than 1⁄2. + // 01: scaling-ratio is less than 1⁄2. + // 10: scaling-ratio is less than 1⁄4. + typedef UReg<0x02, 0x31, 2, 1> MADPT_SEL_PHASE_INI; // Vertical scaling down initial phase selection + typedef UReg<0x02, 0x31, 3, 1> MADPT_TET_EN; // Test bus output enable (Internal hardware debugging use only.) + typedef UReg<0x02, 0x31, 4, 4> MADPT_TEST_SEL; // Test bus select (Internal hardware debugging use only.) + typedef UReg<0x02, 0x32, 0, 4> MADPT_Y_HTAP_CNTRL; // Y horizontal filter control for background reduction (Y_HTAP_CNTRL[3:0] could bypass four tap3 FIR filter.) + typedef UReg<0x02, 0x32, 4, 3> MADPT_Y_VTAP_CNTRL; // Y vertical filter control for background reduction + // Y_VTAP_CNTRL[0]: when set to1, bypass vertical filter + // Y_VTAP_CNTRL[1]: when set to 1, enable FIR filter + // Y_VTAP_CNTRL[2]: when set to 1, bypass IIR filter + typedef UReg<0x02, 0x32, 7, 1> MADPT_NRD_SEL; // Background reduction selection control (Only set it to 1 in huge noise condition) + typedef UReg<0x02, 0x33, 0, 4> MADPT_M_HTAP_CNTRL; // Background noise reduction H filter control in huge noise condition (M_HTAP_CNTRL[3:0] could bypass four tap3 FIR filter.) + typedef UReg<0x02, 0x33, 4, 3> MADPT_M_VTAP_CNTRL; // Background noise reduction V filter control in huge noise condition + // M_VTAP_CNTRL[0]: when set to1, bypass vertical filter + // M_VTAP_CNTRL[1]: when set to 1, enable FIR filter + // M_VTAP_CNTRL[2]: when set to 1, bypass IIR filter + // 33_7:1 - reserved + typedef UReg<0x02, 0x34, 0, 1> MADPT_Y_WOUT_BYPS; // Bypass Y WOUT + typedef UReg<0x02, 0x34, 1, 3> MADPT_Y_WOUT; // Coefficient for Y noise reduction + typedef UReg<0x02, 0x34, 4, 1> MADPT_UV_WOUT_BYPS; // Bypass UV WOUT + typedef UReg<0x02, 0x34, 5, 3> MADPT_UV_WOUT; // Coefficient for UV noise reduction + typedef UReg<0x02, 0x35, 0, 1> MADPT_Y_NRD_ENABLE; // Enable background noise reduction in Y domain (When set to 1, enable background noise reduction in Y domain.) + typedef UReg<0x02, 0x35, 1, 1> MADPT_UV_NRD_ENABLE; // Enable background noise reduction in UV domain (When set to 1, enable background noise reduction in UV domain.) + typedef UReg<0x02, 0x35, 2, 1> MADPT_NRD_OUT_SEL; // NRD output selection (Only set it to 1 in huge noise condition) + typedef UReg<0x02, 0x35, 3, 1> MADPT_DD0_SEL; // DD0 select control (Set it to 1 when background noise reduction enable; Set it to 0 when background noise reduction disable) + typedef UReg<0x02, 0x35, 4, 1> MADPT_NRD_VIIR_PD_BYPS; // Bypass NRD VIIR line buffer + typedef UReg<0x02, 0x35, 5, 1> MADPT_UVDLY_PD_BYPS; // Bypass UV delay line buffer + typedef UReg<0x02, 0x35, 6, 1> MADPT_CMP_EN; // Motion compare enable (When set to 1, enable motion compare; When set to 0, motion compare is in manual mode) + typedef UReg<0x02, 0x35, 7, 1> MADPT_CMP_USER_ID; // Motion compare result defined by user (in manual mode) (Motion compare result defined by user when CMP_EN = 0) + typedef UReg<0x02, 0x36, 0, 8> MADPT_CMP_LOW_THRESHOLD; // Motion compare low level threshold + typedef UReg<0x02, 0x37, 0, 8> MADPT_CMP_HIGH_THRESHOLD; // Motion compare high level threshold + typedef UReg<0x02, 0x38, 0, 4> MADPT_NRD_VIIR_PD_SP; // NRD line buffer WRSTZ position adjustment + typedef UReg<0x02, 0x38, 4, 4> MADPT_NRD_VIIR_PD_ST; // NRD line buffer RRSTZ position adjustment + typedef UReg<0x02, 0x39, 0, 4> MADPT_UVDLY_PD_SP; // UV delay line buffer WRSTZ position adjustment + typedef UReg<0x02, 0x39, 4, 4> MADPT_UVDLY_PD_ST; // UV delay line buffer RRSTZ position adjustment + typedef UReg<0x02, 0x3a, 0, 1> MADPT_EN_UV_DEINT; // Enable UV deinterlacer (When set to 1, enable UV deinterlacer) + typedef UReg<0x02, 0x3a, 1, 1> MADPT_EN_PULLDWN_FOR_NRD; // Enable pull-down to block STILL for NRD (Set it to 1, background noise reduction will in low noise level when in 32/22 pull- down source) + typedef UReg<0x02, 0x3a, 2, 1> MADPT_EN_NOUT_FOR_NRD; // Enable NOUT for background noise reduction + typedef UReg<0x02, 0x3a, 3, 1> MADPT_EN_STILL_FOR_NRD; // Enable still for background noise reduction + typedef UReg<0x02, 0x3a, 4, 1> MADPT_EN_STILL_FOR_PULLDWN; // Enable STILL to reset pull-down detection (When set to 1, still will be used to reset 3:2/2:2 pull-down detection) + typedef UReg<0x02, 0x3a, 5, 2> MADPT_MI_1BIT_DLY; // Delay pipe control for motion index feedback-bit (see: DEVELOPER_NOTES.md -> Delay pipe control for motion index feedback-bit) + typedef UReg<0x02, 0x3a, 7, 1> MADPT_UV_MI_DET_BYPS; // UV motion index generation bypass (When set to 1, UV motion index generation is in manual mode.) + typedef UReg<0x02, 0x3b, 0, 7> MADPT_UV_MI_OFFSET; // UV motion index offset (In auto mode, UV motion index offset; In manual mode, UV motion index user defined value) + // 3B_7:1 - reserved + typedef UReg<0x02, 0x3C, 0, 4> MADPT_UV_MI_GAIN; // UV motion index gain (UV motion index gain.) + typedef UReg<0x02, 0x3C, 4, 3> MADPT_MI_DELAY; // Motion index delay control (Control motion index (both Y and UV’s) delay pipes, so that the motion index can align with corresponding data.) + // see: DEVELOPER_NOTES.md -> Motion index delay control + // 3C_7:1 - reserved + + // + // Video Processor Registers (all registers R/W) + // typedef UReg<0x03, 0x00, 0, 1> VDS_SYNC_EN; typedef UReg<0x03, 0x00, 1, 1> VDS_FIELDAB_EN; typedef UReg<0x03, 0x00, 2, 1> VDS_DFIELD_EN; @@ -381,13 +726,13 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x03, 0x1F, 5, 1> VDS_EN_FR_NUM_RST; typedef UReg<0x03, 0x20, 0, 11> VDS_VSYN_SIZE1; typedef UReg<0x03, 0x22, 0, 11> VDS_VSYN_SIZE2; - typedef UReg<0x03, 0x24, 0, 8> VDS_3_24; // convenience - typedef UReg<0x03, 0x24, 0, 1> VDS_UV_FLIP; - typedef UReg<0x03, 0x24, 1, 1> VDS_U_DELAY; - typedef UReg<0x03, 0x24, 2, 1> VDS_V_DELAY; - typedef UReg<0x03, 0x24, 3, 1> VDS_TAP6_BYPS; - typedef UReg<0x03, 0x24, 4, 2> VDS_Y_DELAY; - typedef UReg<0x03, 0x24, 6, 2> VDS_WEN_DELAY; + typedef UReg<0x03, 0x24, 0, 8> VDS_3_24; // convenience + typedef UReg<0x03, 0x24, 0, 1> VDS_UV_FLIP; + typedef UReg<0x03, 0x24, 1, 1> VDS_U_DELAY; + typedef UReg<0x03, 0x24, 2, 1> VDS_V_DELAY; + typedef UReg<0x03, 0x24, 3, 1> VDS_TAP6_BYPS; + typedef UReg<0x03, 0x24, 4, 2> VDS_Y_DELAY; + typedef UReg<0x03, 0x24, 6, 2> VDS_WEN_DELAY; typedef UReg<0x03, 0x25, 0, 10> VDS_D_SP; typedef UReg<0x03, 0x26, 6, 1> VDS_D_RAM_BYPS; typedef UReg<0x03, 0x26, 7, 1> VDS_BLEV_AUTO_EN; @@ -526,7 +871,9 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x03, 0x74, 0, 4> VDS_BLUE_VGAIN; typedef UReg<0x03, 0x74, 4, 4> VDS_BLUE_Y_LEV; + // // PIP Registers + // typedef UReg<0x03, 0x80, 0, 1> PIP_UV_FLIP; typedef UReg<0x03, 0x80, 1, 1> PIP_U_DELAY; typedef UReg<0x03, 0x80, 2, 1> PIP_V_DELAY; @@ -548,10 +895,12 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x03, 0x8C, 0, 11> PIP_V_ST; typedef UReg<0x03, 0x8E, 0, 11> PIP_V_SP; + // // Memory Controller Registers + // typedef UReg<0x04, 0x00, 0, 8> SDRAM_RESET_CONTROL; // fake name - typedef UReg<0x04, 0x00, 4, 1> SDRAM_RESET_SIGNAL; - typedef UReg<0x04, 0x00, 7, 1> SDRAM_START_INITIAL_CYCLE; + typedef UReg<0x04, 0x00, 4, 1> SDRAM_RESET_SIGNAL; + typedef UReg<0x04, 0x00, 7, 1> SDRAM_START_INITIAL_CYCLE; typedef UReg<0x04, 0x12, 0, 1> MEM_INTER_DLYCELL_SEL; typedef UReg<0x04, 0x12, 1, 1> MEM_CLK_DLYCELL_SEL; typedef UReg<0x04, 0x12, 2, 1> MEM_FBK_CLK_DLYCELL_SEL; @@ -562,7 +911,9 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x04, 0x1b, 0, 3> MEM_ADR_DLY_REG; typedef UReg<0x04, 0x1b, 4, 3> MEM_CLK_DLY_REG; + // // Playback / Capture / Memory Registers + // typedef UReg<0x04, 0x21, 0, 1> CAPTURE_ENABLE; typedef UReg<0x04, 0x21, 1, 1> CAP_FF_HALF_REQ; typedef UReg<0x04, 0x21, 5, 1> CAP_SAFE_GUARD_EN; @@ -604,7 +955,9 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x04, 0x59, 0, 10> RFF_FETCH_NUM; typedef UReg<0x04, 0x5B, 7, 1> MEM_FF_TOP_FF_SEL; - // OSD Registers + // + // OSD Registers (all registers R/W) + // typedef UReg<0x00, 0x90, 0, 1> OSD_SW_RESET; typedef UReg<0x00, 0x90, 1, 3> OSD_HORIZONTAL_ZOOM; typedef UReg<0x00, 0x90, 4, 2> OSD_VERTICAL_ZOOM; @@ -627,7 +980,9 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x00, 0x97, 0, 8> OSD_BAR_LENGTH; typedef UReg<0x00, 0x98, 0, 8> OSD_BAR_FOREGROUND_VALUE; - // ADC, SP Registers + // + // ADC, SP Registers (all registers R/W) + // typedef UReg<0x05, 0x00, 0, 8> ADC_5_00; // convenience typedef UReg<0x05, 0x00, 0, 2> ADC_CLK_PA; typedef UReg<0x05, 0x00, 3, 1> ADC_CLK_ICLK2X; @@ -695,6 +1050,10 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x05, 0x1F, 3, 1> DEC_TEST_ENABLE; // fake name typedef UReg<0x05, 0x1F, 4, 3> DEC_TEST_SEL; typedef UReg<0x05, 0x1F, 7, 1> DEC_IDREG_EN; + + // + // Sync Proc (all registers R/W) + // typedef UReg<0x05, 0x20, 0, 1> SP_SOG_SRC_SEL; typedef UReg<0x05, 0x20, 1, 1> SP_SOG_P_ATO; typedef UReg<0x05, 0x20, 2, 1> SP_SOG_P_INV; diff --git a/src/utils.cpp b/src/utils.cpp index ec26fd6b..b7e12958 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,7 +3,7 @@ # File: utils.cpp # # File Created: Thursday, 2nd May 2024 5:37:47 pm # # Author: # -# Last Modified: Saturday, 15th June 2024 8:00:46 pm # +# Last Modified: Tuesday, 18th June 2024 12:16:32 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -171,7 +171,8 @@ void resetDigital() // GBS::RESET_CONTROL_0x47::write(0x00); GBS::RESET_CONTROL_0x47::write(0x17); // new, keep 0,1,2,4 on (DEC,MODE,SYNC,INT) //MODE okay? - if (rto->outModeHdBypass) { // if currently in bypass + // if (rto->outModeHdBypass) { // if currently in bypass + if (uopt->resolutionID == OutputHdBypass) { // if currently in bypass GBS::RESET_CONTROL_0x46::write(0x00); GBS::RESET_CONTROL_0x47::write(0x1F); return; // 0x46 stays all 0 @@ -205,7 +206,7 @@ void resetDebugPort() } /** - * @brief Returns videoMode ID, retrieved from GBS object + * @brief Returns videoMode ID, idntified by TV chip * * @return uint8_t */ diff --git a/src/video.cpp b/src/video.cpp index 1499f81f..9fa0919a 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Sunday, 16th June 2024 1:51:52 am # +# Last Modified: Tuesday, 18th June 2024 1:29:05 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -122,7 +122,8 @@ void prepareSyncProcessor() writeOneByte(0x53, 0x00); // 0x05 rgbhv: 6 writeOneByte(0x54, 0x00); // 0xc0 - if (rto->videoStandardInput != 15 && (GBS::GBS_OPTION_SCALING_RGBHV::read() != 1)) { + // if (rto->videoStandardInput != 15 && (GBS::GBS_OPTION_SCALING_RGBHV::read() != 1)) { + if (rto->videoStandardInput != 15 && !uopt->preferScalingRgbhv) { GBS::SP_CLAMP_MANUAL::write(0); // 0 = automatic on/off possible GBS::SP_CLP_SRC_SEL::write(0); // clamp source 1: pixel clock, 0: 27mhz // was 1 but the pixel clock isn't available at first GBS::SP_NO_CLAMP_REG::write(1); // 5_57_0 unlock clamp @@ -303,7 +304,8 @@ void externalClockGenSyncInOutRate() if (GBS::PAD_CKIN_ENZ::read() != 0) { return; } - if (rto->outModeHdBypass) { + // if (rto->outModeHdBypass) { + if (uopt->resolutionID == OutputHdBypass) { return; } if (GBS::PLL648_CONTROL_01::read() != 0x75) { @@ -408,6 +410,7 @@ int8_t externalClockGenDetectAndInitialize() void externalClockGenResetClock() { if (!rto->extClockGenDetected) { + _DBGN(F(" no ext.clock detected")); return; } _DBGN("externalClockGenResetClock()"); @@ -432,7 +435,8 @@ void externalClockGenResetClock() rto->freqExtClockGen = 81000000; // clock unused else if (activeDisplayClock == 0) rto->freqExtClockGen = 81000000; // no preset loaded - else if (!rto->outModeHdBypass) { + // else if (!rto->outModeHdBypass) { + else if (uopt->resolutionID != OutputHdBypass) { _DBGF(PSTR("preset display clock: 0x%02X\n"), activeDisplayClock); } @@ -464,7 +468,8 @@ void externalClockGenResetClock() */ bool applyBestHTotal(uint16_t bestHTotal) { - if (rto->outModeHdBypass) { + // if (rto->outModeHdBypass) { + if (uopt->resolutionID == OutputHdBypass) { return true; // false? doesn't matter atm } @@ -496,7 +501,8 @@ bool applyBestHTotal(uint16_t bestHTotal) return true; // nothing to do } - if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() == 1) { + // if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() == 1) { + if (uopt->PalForce60) { // source is 50Hz, preset has to stay at 60Hz: return return true; } @@ -671,11 +677,14 @@ bool applyBestHTotal(uint16_t bestHTotal) bool print = 1; if (uopt->enableFrameTimeLock) { - if ((GBS::GBS_RUNTIME_FTL_ADJUSTED::read() == 1) && !rto->forceRetime) { + // TODO logic! + // if ((GBS::GBS_RUNTIME_FTL_ADJUSTED::read() == 1) && !rto->forceRetime) { + if (!rto->forceRetime) { // FTL enabled and regular update, so don't print print = 0; } - GBS::GBS_RUNTIME_FTL_ADJUSTED::write(0); + uopt->enableFrameTimeLock = false; + // GBS::GBS_RUNTIME_FTL_ADJUSTED::write(0); } rto->forceRetime = false; @@ -961,7 +970,7 @@ void setAndLatchPhaseSP() } /** - * @brief Set the And Update Sog Level object + * @brief Set the And Update Sync On Green (SOG) Level object * Sync detect resolution: 5bits; comparator voltage range 10mv~320mv.-> 10mV * per step; if cables and source are to standard (level 6 = 60mV) * @param level @@ -1205,18 +1214,20 @@ void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) * * @param withCurrentVideoModeCheck */ -void updateSpDynamic(bool withCurrentVideoModeCheck) +void updateStopPositionDynamic(bool withCurrentVideoModeCheck) { if (!rto->boardHasPower || rto->sourceDisconnected) { return; } - // _DBGF(PSTR("updateSpDynamic %s video mode check\n"), withCurrentVideoModeCheck ? PSTR("WITH") : PSTR("NO")); + // _DBGF(PSTR("updateStopPositionDynamic %s video mode check\n"), withCurrentVideoModeCheck ? PSTR("WITH") : PSTR("NO")); uint8_t vidModeReadout = getVideoMode(); - if (vidModeReadout == 0) { - vidModeReadout = getVideoMode(); - } + // ambigous, best is to check logic sequence or + // delays if an issue occures while reading + // if (vidModeReadout == 0) { + // vidModeReadout = getVideoMode(); + // } if (rto->videoStandardInput == 0 && vidModeReadout == 0) { if (GBS::SP_DLT_REG::read() > 0x30) @@ -1366,16 +1377,16 @@ void updateSpDynamic(bool withCurrentVideoModeCheck) void setOutputHdBypassMode(bool regsInitialized) { if (!rto->boardHasPower) { - _WSN(F("(!) GBS board not responding!")); + _WSN(F("(!) board not responding")); return; } rto->autoBestHtotalEnabled = false; // disable while in this mode - rto->outModeHdBypass = 1; // skips waiting at end of doPostPresetLoadSteps + // rto->outModeHdBypass = 1; // skips waiting at end of doPostPresetLoadSteps uopt->resolutionID = OutputHdBypass; externalClockGenResetClock(); - updateSpDynamic(false); + updateStopPositionDynamic(false); loadHdBypassSection(); // this would be ignored otherwise // TODO: needs clarification (see: uopt->debugView) @@ -1643,7 +1654,7 @@ void setOutputHdBypassMode(bool regsInitialized) rto->phaseADC = 24; // fix value // works best with yuv input in tests setAndUpdateSogLevel(rto->currentLevelSOG); // also re-latch everything - rto->outModeHdBypass = 1; + // rto->outModeHdBypass = 1; unsigned long timeout = millis(); while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { @@ -1653,7 +1664,7 @@ void setOutputHdBypassMode(bool regsInitialized) delay(1); } // currently SP is using generic settings, switch to format specific ones - updateSpDynamic(false); + updateStopPositionDynamic(false); while ((getVideoMode() == 0) && (millis() - timeout < 1502)) { delay(1); } @@ -1718,7 +1729,7 @@ void togglePhaseAdjustUnits() void setOutputRGBHVBypassMode() { if (!rto->boardHasPower) { - _WSN(F("(!) GBS board not responding!")); + _WSN(F("(!) board not responding!")); return; } @@ -1943,43 +1954,45 @@ void runAutoGain() */ void enableScanlines() { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 0) { - // _WSN(F("enableScanlines())")); - - // GBS::RFF_ADR_ADD_2::write(0); - // GBS::RFF_REQ_SEL::write(1); - // GBS::RFF_MASTER_FLAG::write(0x3f); - // GBS::RFF_WFF_OFFSET::write(0); // scanline fix - // GBS::RFF_FETCH_NUM::write(0); - // GBS::RFF_ENABLE::write(1); //GBS::WFF_ENABLE::write(1); - // delay(10); - // GBS::RFF_ENABLE::write(0); //GBS::WFF_ENABLE::write(0); - - // following lines set up UV deinterlacer (on top of normal Y) - GBS::MADPT_UVDLY_PD_SP::write(0); // 2_39 0..3 - GBS::MADPT_UVDLY_PD_ST::write(0); // 2_39 4..7 - GBS::MADPT_EN_UV_DEINT::write(1); // 2_3a 0 - GBS::MADPT_UV_MI_DET_BYPS::write(1); // 2_3a 7 enables 2_3b adjust - GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); // 2_3b offset (mixing factor here) - GBS::MADPT_MO_ADP_UV_EN::write(1); // 2_16 5 (try to do this some other way?) - - GBS::DIAG_BOB_PLDY_RAM_BYPS::write(0); // 2_00 7 enabled, looks better - GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 - GBS::RFF_YUV_DEINTERLACE::write(1); // scanline fix 2 - GBS::MADPT_Y_MI_DET_BYPS::write(1); // make sure, so that mixing works - // GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 0x30); // more luma gain - // GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 4); - GBS::VDS_WLEV_GAIN::write(0x08); // 3_58 - GBS::VDS_W_LEV_BYPS::write(0); // brightness - GBS::MADPT_VIIR_COEF::write(0x08); // 2_27 VIIR filter strength - GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); // 2_0b offset (mixing factor here) - GBS::MADPT_VIIR_BYPS::write(0); // 2_26 6 VIIR line fifo // 1 = off - GBS::RFF_LINE_FLIP::write(1); // clears potential garbage in rff buffer - - GBS::MAPDT_VT_SEL_PRGV::write(0); - GBS::GBS_OPTION_SCANLINES_ENABLED::write(1); - } - rto->scanlinesEnabled = 1; + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 0) { + // _WSN(F("enableScanlines())")); + + // GBS::RFF_ADR_ADD_2::write(0); + // GBS::RFF_REQ_SEL::write(1); + // GBS::RFF_MASTER_FLAG::write(0x3f); + // GBS::RFF_WFF_OFFSET::write(0); // scanline fix + // GBS::RFF_FETCH_NUM::write(0); + // GBS::RFF_ENABLE::write(1); //GBS::WFF_ENABLE::write(1); + // delay(10); + // GBS::RFF_ENABLE::write(0); //GBS::WFF_ENABLE::write(0); + + // following lines set up UV deinterlacer (on top of normal Y) + GBS::MADPT_UVDLY_PD_SP::write(0); // 2_39 0..3 + GBS::MADPT_UVDLY_PD_ST::write(0); // 2_39 4..7 + GBS::MADPT_EN_UV_DEINT::write(1); // 2_3a 0 + GBS::MADPT_UV_MI_DET_BYPS::write(1); // 2_3a 7 enables 2_3b adjust + GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); // 2_3b offset (mixing factor here) + GBS::MADPT_MO_ADP_UV_EN::write(1); // 2_16 5 (try to do this some other way?) + + GBS::DIAG_BOB_PLDY_RAM_BYPS::write(0); // 2_00 7 enabled, looks better + GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 + GBS::RFF_YUV_DEINTERLACE::write(1); // scanline fix 2 + GBS::MADPT_Y_MI_DET_BYPS::write(1); // make sure, so that mixing works + // GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 0x30); // more luma gain + // GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 4); + GBS::VDS_WLEV_GAIN::write(0x08); // 3_58 + GBS::VDS_W_LEV_BYPS::write(0); // brightness + GBS::MADPT_VIIR_COEF::write(0x08); // 2_27 VIIR filter strength + GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); // 2_0b offset (mixing factor here) + GBS::MADPT_VIIR_BYPS::write(0); // 2_26 6 VIIR line fifo // 1 = off + GBS::RFF_LINE_FLIP::write(1); // clears potential garbage in rff buffer + + GBS::MAPDT_VT_SEL_PRGV::write(0); + // GBS::GBS_OPTION_SCANLINES_ENABLED::write(1); + uopt->wantScanlines = true; + + // } + // rto->scanlinesEnabled = 1; } /** @@ -1988,30 +2001,31 @@ void enableScanlines() */ void disableScanlines() { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { - // _WSN(F("disableScanlines())")); - GBS::MAPDT_VT_SEL_PRGV::write(1); - - // following lines set up UV deinterlacer (on top of normal Y) - GBS::MADPT_UVDLY_PD_SP::write(4); // 2_39 0..3 - GBS::MADPT_UVDLY_PD_ST::write(4); // 2_39 4..77 - GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 - GBS::MADPT_UV_MI_DET_BYPS::write(0); // 2_3a 7 enables 2_3b adjust - GBS::MADPT_UV_MI_OFFSET::write(4); // 2_3b - GBS::MADPT_MO_ADP_UV_EN::write(0); // 2_16 5 - - GBS::DIAG_BOB_PLDY_RAM_BYPS::write(1); // 2_00 7 - GBS::VDS_W_LEV_BYPS::write(1); // brightness - // GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 0x30); - // GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 4); - GBS::MADPT_Y_MI_OFFSET::write(0xff); // 2_0b offset 0xff disables mixing - GBS::MADPT_VIIR_BYPS::write(1); // 2_26 6 disable VIIR - GBS::MADPT_PD_RAM_BYPS::write(1); - GBS::RFF_LINE_FLIP::write(0); // back to default - - GBS::GBS_OPTION_SCANLINES_ENABLED::write(0); - } - rto->scanlinesEnabled = 0; + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { + + GBS::MAPDT_VT_SEL_PRGV::write(1); + + // following lines set up UV deinterlacer (on top of normal Y) + GBS::MADPT_UVDLY_PD_SP::write(4); // 2_39 0..3 + GBS::MADPT_UVDLY_PD_ST::write(4); // 2_39 4..77 + GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 + GBS::MADPT_UV_MI_DET_BYPS::write(0); // 2_3a 7 enables 2_3b adjust + GBS::MADPT_UV_MI_OFFSET::write(4); // 2_3b + GBS::MADPT_MO_ADP_UV_EN::write(0); // 2_16 5 + + GBS::DIAG_BOB_PLDY_RAM_BYPS::write(1); // 2_00 7 + GBS::VDS_W_LEV_BYPS::write(1); // brightness + // GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 0x30); + // GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 4); + GBS::MADPT_Y_MI_OFFSET::write(0xff); // 2_0b offset 0xff disables mixing + GBS::MADPT_VIIR_BYPS::write(1); // 2_26 6 disable VIIR + GBS::MADPT_PD_RAM_BYPS::write(1); + GBS::RFF_LINE_FLIP::write(0); // back to default + + // GBS::GBS_OPTION_SCANLINES_ENABLED::write(0); + uopt->wantScanlines = false; + // } + // rto->scanlinesEnabled = 0; } /** @@ -2146,7 +2160,7 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) rto->videoStandardInput = 0; } - rto->outModeHdBypass = 0; // the default at this stage + // rto->outModeHdBypass = 0; // the default at this stage if (GBS::ADC_INPUT_SEL::read() == 0) { // if (rto->inputIsYPbPr == 0) _WSN(F("rto->inputIsYPbPr was 0, fixing to 1"); rto->inputIsYPbPr = 1; // new: update the var here, allow manual preset loads @@ -2293,7 +2307,7 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) // scaling RGBHV mode if (uopt->preferScalingRgbhv && rto->isValidForScalingRGBHV) { - GBS::GBS_OPTION_SCALING_RGBHV::write(1); + // GBS::GBS_OPTION_SCALING_RGBHV::write(1); rto->videoStandardInput = 3; } } @@ -2947,7 +2961,8 @@ void scaleHorizontal(uint16_t amountToScale, bool subtracting) */ void moveHS(uint16_t amountToAdd, bool subtracting) { - if (rto->outModeHdBypass) { + // if (rto->outModeHdBypass) { + if (uopt->resolutionID == OutputHdBypass) { uint16_t SP_CS_HS_ST = GBS::SP_CS_HS_ST::read(); uint16_t SP_CS_HS_SP = GBS::SP_CS_HS_SP::read(); uint16_t htotal = GBS::HD_HSYNC_RST::read(); @@ -3204,7 +3219,8 @@ void shiftVerticalUpIF() uint8_t offset = rto->videoStandardInput == 2 ? 4 : 1; uint16_t sourceLines = GBS::VPERIOD_IF::read() - offset; // add an override for sourceLines, in case where the IF data is not available - if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { + // if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { + if (uopt->preferScalingRgbhv && rto->videoStandardInput == 14) { sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); } int16_t stop = GBS::IF_VB_SP::read(); @@ -3230,7 +3246,8 @@ void shiftVerticalDownIF() uint8_t offset = rto->videoStandardInput == 2 ? 4 : 1; uint16_t sourceLines = GBS::VPERIOD_IF::read() - offset; // add an override for sourceLines, in case where the IF data is not available - if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { + // if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { + if (uopt->preferScalingRgbhv && rto->videoStandardInput == 14) { sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); } @@ -3255,7 +3272,8 @@ void shiftVerticalDownIF() */ void setHSyncStartPosition(uint16_t value) { - if (rto->outModeHdBypass) { + // if (rto->outModeHdBypass) { + if (uopt->resolutionID == OutputHdBypass) { // GBS::HD_HS_ST::write(value); GBS::SP_CS_HS_ST::write(value); } else { @@ -3270,7 +3288,8 @@ void setHSyncStartPosition(uint16_t value) */ void setHSyncStopPosition(uint16_t value) { - if (rto->outModeHdBypass) { + // if (rto->outModeHdBypass) { + if (uopt->resolutionID == OutputHdBypass) { // GBS::HD_HS_SP::write(value); GBS::SP_CS_HS_SP::write(value); } else { @@ -3747,7 +3766,8 @@ void updateClampPosition() // new: HDBypass rewrite to sync to falling HS edge: move clamp position forward // RGB can stay the same for now (clamp will start on sync pulse, a benefit in RGB - if (rto->outModeHdBypass) { + // if (rto->outModeHdBypass) { + if (uopt->resolutionID == OutputHdBypass) { if (videoStandardInputIsPalNtscSd()) { start += 0x60; stop += 0x60; @@ -3881,7 +3901,8 @@ void runSyncWatcher() uint8_t detectedVideoMode = getVideoMode(); bool status16SpHsStable = getStatus16SpHsStable(); - if (rto->outModeHdBypass && status16SpHsStable) { + // if (rto->outModeHdBypass && status16SpHsStable) { + if (uopt->resolutionID == OutputHdBypass && status16SpHsStable) { if (videoStandardInputIsPalNtscSd()) { if (millis() - lastLineCountMeasure > 765) { thisStableLineCount = GBS::STATUS_SYNC_PROC_VTOTAL::read(); @@ -3969,7 +3990,7 @@ void runSyncWatcher() rto->currentLevelSOG -= 1; setAndUpdateSogLevel(rto->currentLevelSOG); delay(30); - updateSpDynamic(false); + updateStopPositionDynamic(false); badHsActive = 0; lastAdjustWasInActiveWindow = 1; } else if (badHsActive > 40) { @@ -3985,7 +4006,7 @@ void runSyncWatcher() rto->currentLevelSOG -= 1; setAndUpdateSogLevel(rto->currentLevelSOG); delay(30); - updateSpDynamic(false); + updateStopPositionDynamic(false); badHsActive = 0; rto->phaseIsSet = 0; } @@ -4038,7 +4059,7 @@ void runSyncWatcher() GBS::SP_H_CST_SP::write(0x100); // GBS::SP_H_PROTECT::write(1); // at noSyncCounter = 32 will alternate on / off if (videoStandardInputIsPalNtscSd()) { - // this can early detect mode changes (before updateSpDynamic resets all) + // this can early detect mode changes (before updateStopPositionDynamic resets all) GBS::SP_PRE_COAST::write(9); GBS::SP_POST_COAST::write(9); // new: test SD<>EDTV changes @@ -4052,7 +4073,7 @@ void runSyncWatcher() if (rto->noSyncCounter % 27 == 0) { // the * check needs to be first (go before auto sog level) to support SD > HDTV detection - updateSpDynamic(true); + updateStopPositionDynamic(true); } if (rto->noSyncCounter % 32 == 0) { @@ -4104,7 +4125,7 @@ void runSyncWatcher() GBS::SP_H_CST_SP::write(0x100); // instead of disabling 5_3e 5 coast GBS::SP_CS_CLP_ST::write(32); // neutral clamp values GBS::SP_CS_CLP_SP::write(48); // - updateSpDynamic(true); + updateStopPositionDynamic(true); nudgeMD(); // can fix MD not noticing a line count update delay(80); @@ -4193,7 +4214,7 @@ void runSyncWatcher() rto->coastPositionIsSet = 0; delay(10); if (getVideoMode() == 0) { - updateSpDynamic(true); // check ntsc to 480p and back + updateStopPositionDynamic(true); // check ntsc to 480p and back delay(40); } } @@ -4290,7 +4311,7 @@ void runSyncWatcher() } if (rto->continousStableCounter == 2) { - updateSpDynamic(false); + updateStopPositionDynamic(false); if (doFullRestore) { delay(20); optimizeSogLevel(); @@ -4332,12 +4353,13 @@ void runSyncWatcher() if (rto->continousStableCounter % 31 == 0) { // new: 8 regular interval checks up until 255 - updateSpDynamic(false); + updateStopPositionDynamic(false); } if (rto->continousStableCounter >= 3) { if ((rto->videoStandardInput == 1 || rto->videoStandardInput == 2) && - !rto->outModeHdBypass && rto->noSyncCounter == 0) { + uopt->resolutionID != OutputHdBypass && rto->noSyncCounter == 0) { + // !rto->outModeHdBypass && rto->noSyncCounter == 0) { // deinterlacer and scanline code static uint8_t timingAdjustDelay = 0; static uint8_t oddEvenWhenArmed = 0; @@ -4368,7 +4390,8 @@ void runSyncWatcher() if (filteredLineCountMotionAdaptiveOn >= 2) // at least >= 2 { if (uopt->deintMode == 0 && !rto->motionAdaptiveDeinterlaceActive) { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled + if (uopt->wantScanlines) { // don't rely on rto->scanlinesEnabled disableScanlines(); } enableMotionAdaptDeinterlace(); @@ -4409,12 +4432,15 @@ void runSyncWatcher() if (rto->motionAdaptiveDeinterlaceActive) { disableMotionAdaptDeinterlace(); FrameSync::reset(uopt->frameTimeLockMethod); - GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); + // TODO logic! + uopt->enableFrameTimeLock = true; + // GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); lastVsyncLock = millis(); } - if (uopt->wantScanlines && !rto->scanlinesEnabled) { + if (uopt->wantScanlines) { // && !rto->scanlinesEnabled) { enableScanlines(); - } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + // } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + } else { disableScanlines(); } } @@ -4430,7 +4456,9 @@ void runSyncWatcher() if (timingAdjustDelay == 0) { if (uopt->enableFrameTimeLock) { FrameSync::reset(uopt->frameTimeLockMethod); - GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); + // TODO logic! + uopt->enableFrameTimeLock = true; + // GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); delay(10); lastVsyncLock = millis(); } @@ -4444,13 +4472,15 @@ void runSyncWatcher() } // scanlines - if (uopt->wantScanlines) { - if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive && !preventScanlines) { + // if (uopt->wantScanlines) { + // if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive && !preventScanlines) { + if (!rto->motionAdaptiveDeinterlaceActive && !preventScanlines) { enableScanlines(); - } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + // } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + } else { disableScanlines(); } - } + // } } } } @@ -4478,7 +4508,7 @@ void runSyncWatcher() if (moveOn) { _WSN(F("RGB/HV upscale mode")); rto->isValidForScalingRGBHV = true; - GBS::GBS_OPTION_SCALING_RGBHV::write(1); + // GBS::GBS_OPTION_SCALING_RGBHV::write(1); rto->autoBestHtotalEnabled = 1; if (rto->syncTypeCsync == false) { @@ -4536,7 +4566,9 @@ void runSyncWatcher() activePresetLineCount = sourceLines; applyPresets(rto->videoStandardInput); - GBS::GBS_OPTION_SCALING_RGBHV::write(1); + // TODO enabling Upscaling here? + uopt->preferScalingRgbhv = true; + // GBS::GBS_OPTION_SCALING_RGBHV::write(1); GBS::IF_INI_ST::write(16); // fixes pal(at least) interlace GBS::SP_SOG_P_ATO::write(1); // 5_20 1 auto SOG polarity (now "hpw" should never be close to "ht") @@ -4552,7 +4584,7 @@ void runSyncWatcher() delay(40); } - updateSpDynamic(true); + updateStopPositionDynamic(true); if (rto->syncTypeCsync == false) { GBS::SP_SOG_MODE::write(0); GBS::SP_CLAMP_MANUAL::write(1); @@ -4567,10 +4599,13 @@ void runSyncWatcher() if (rto->extClockGenDetected) { // switch to ext clock - if (!rto->outModeHdBypass) { - if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // if (!rto->outModeHdBypass) { + if (uopt->resolutionID != OutputHdBypass) { + uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); + if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D - GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + rto->presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -4652,7 +4687,9 @@ void runSyncWatcher() activePresetLineCount = sourceLines; applyPresets(rto->videoStandardInput); - GBS::GBS_OPTION_SCALING_RGBHV::write(1); + // TODO enabling Upscale here? + uopt->preferScalingRgbhv = true; + // GBS::GBS_OPTION_SCALING_RGBHV::write(1); GBS::IF_INI_ST::write(16); // fixes pal(at least) interlace GBS::SP_SOG_P_ATO::write(1); // 5_20 1 auto SOG polarity @@ -4668,7 +4705,7 @@ void runSyncWatcher() latchPLLAD(); } - updateSpDynamic(true); + updateStopPositionDynamic(true); if (rto->syncTypeCsync == false) { GBS::SP_SOG_MODE::write(0); GBS::SP_CLAMP_MANUAL::write(1); @@ -4683,10 +4720,13 @@ void runSyncWatcher() if (rto->extClockGenDetected) { // switch to ext clock - if (!rto->outModeHdBypass) { - if (GBS::PLL648_CONTROL_01::read() != 0x35 && GBS::PLL648_CONTROL_01::read() != 0x75) { + // if (!rto->outModeHdBypass) { + if (uopt->resolutionID != OutputHdBypass) { + uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); + if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D - GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + // GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); + rto->presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -4773,7 +4813,7 @@ void runSyncWatcher() // STATUS_INT_SOG_BAD = 0x0f bit 0, interrupt reg resetModeDetect(); stable = 0; - _WS(F("`")); + _WS(F(".")); delay(10); resetInterruptSogBadBit(); } else { @@ -4795,7 +4835,7 @@ void runSyncWatcher() RGBHVNoSyncCounter++; rto->continousStableCounter = 0; if (RGBHVNoSyncCounter % 20 == 0) { - _WS(F("`")); + _WS(F(".")); } } else { RGBHVNoSyncCounter = 0; @@ -4803,7 +4843,7 @@ void runSyncWatcher() if (rto->continousStableCounter < 255) { rto->continousStableCounter++; if (rto->continousStableCounter == 6) { - updateSpDynamic(true); + updateStopPositionDynamic(true); } } } @@ -4934,15 +4974,17 @@ void runSyncWatcher() if (rto->videoStandardInput == 14) { // scanlines - if (uopt->wantScanlines) { - if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive) { + // if (uopt->wantScanlines) { + // if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive) { + if (!rto->motionAdaptiveDeinterlaceActive) { if (GBS::IF_LD_RAM_BYPS::read() == 0) { // line doubler on? enableScanlines(); } - } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + // } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + } else { disableScanlines(); } - } + // } } rto->clampPositionIsSet = false; // RGBHV should regularly check clamp position diff --git a/src/video.h b/src/video.h index 256ead7e..c65afb45 100644 --- a/src/video.h +++ b/src/video.h @@ -3,7 +3,7 @@ # File: video.h # # File Created: Thursday, 2nd May 2024 4:08:03 pm # # Author: # -# Last Modified: Thursday, 13th June 2024 4:55:53 pm # +# Last Modified: Monday, 17th June 2024 12:00:54 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -45,7 +45,7 @@ void setAndLatchPhaseSP(); void setAndUpdateSogLevel(uint8_t level); bool optimizePhaseSP(); void setOverSampleRatio(uint8_t newRatio, bool prepareOnly); -void updateSpDynamic(bool withCurrentVideoModeCheck); +void updateStopPositionDynamic(bool withCurrentVideoModeCheck); void setOutputHdBypassMode(bool regsInitialized); void setAdcGain(uint8_t gain); void resetSyncProcessor(); diff --git a/src/wserver.cpp b/src/wserver.cpp index e10c5f00..8997d245 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Sunday, 16th June 2024 2:37:07 am # +# Last Modified: Tuesday, 18th June 2024 12:25:32 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -969,11 +969,12 @@ void handleSerialCommand() break; case 'd': { - // don't store scanlines - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - { - disableScanlines(); - } + // TODO don't store scanlines - WHY? + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + // if (uopt->wantScanlines) + // { + // disableScanlines(); + // } // pal forced 60hz: no need to revert here. let the voffset function handle it if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) @@ -1113,8 +1114,10 @@ void handleSerialCommand() case 'p': if (!rto->motionAdaptiveDeinterlaceActive) { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - { // don't rely on rto->scanlinesEnabled + // TODO why disabling scanlines? + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + if (uopt->wantScanlines) + { disableScanlines(); } enableMotionAdaptDeinterlace(); @@ -1166,7 +1169,8 @@ void handleSerialCommand() break; case '.': // resync HTotal { - if (!rto->outModeHdBypass) + // if (!rto->outModeHdBypass) + if (uopt->resolutionID != OutputHdBypass) { // bestHtotal recalc rto->autoBestHtotalEnabled = true; @@ -1264,7 +1268,7 @@ void handleSerialCommand() updateCoastPosition(0); } break; - case 'N': + case 'N': // toggle scanlines { // if (GBS::RFF_ENABLE::read()) { // disableMotionAdaptDeinterlace(); @@ -1275,15 +1279,19 @@ void handleSerialCommand() // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); - if (rto->scanlinesEnabled) + // if (rto->scanlinesEnabled) + _DBG(F("scanlines: ")); + if (uopt->wantScanlines) { - rto->scanlinesEnabled = false; + // rto->scanlinesEnabled = false; disableScanlines(); + _DBGN(F("off")); } else { - rto->scanlinesEnabled = true; + // rto->scanlinesEnabled = true; enableScanlines(); + _DBGN(F("on")); } } break; @@ -1492,7 +1500,8 @@ void handleSerialCommand() } break; case '6': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + // if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + if (videoStandardInputIsPalNtscSd() && uopt->resolutionID != OutputHdBypass) { if (GBS::IF_HBIN_SP::read() >= 10) { // IF_HBIN_SP: min 2 @@ -1508,7 +1517,8 @@ void handleSerialCommand() _WSN(F("limit")); } } - else if (!rto->outModeHdBypass) + // else if (!rto->outModeHdBypass) + else if (uopt->resolutionID != OutputHdBypass) { if (GBS::IF_HB_SP2::read() >= 4) GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a @@ -1523,7 +1533,8 @@ void handleSerialCommand() } break; case '7': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + // if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + if (videoStandardInputIsPalNtscSd() && uopt->resolutionID != OutputHdBypass) { if (GBS::IF_HBIN_SP::read() < 0x150) { // (arbitrary) max limit @@ -1534,7 +1545,8 @@ void handleSerialCommand() _WSN(F("limit")); } } - else if (!rto->outModeHdBypass) + // else if (!rto->outModeHdBypass) + else if (uopt->resolutionID != OutputHdBypass) { if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a @@ -1819,7 +1831,8 @@ void handleSerialCommand() if (what.equals("ht")) { // set_htotal(value); - if (!rto->outModeHdBypass) + // if (!rto->outModeHdBypass) + if (uopt->resolutionID != OutputHdBypass) { rto->forceRetime = 1; applyBestHTotal(value); @@ -2404,7 +2417,9 @@ void handleUserCommand() // switch to bob mode uopt->deintMode = 1; disableMotionAdaptDeinterlace(); - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) + // TODO why disable scanlines? + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) + if (uopt->wantScanlines) { disableScanlines(); } @@ -2559,7 +2574,8 @@ void handleUserCommand() { uopt->scanlineStrength = 0x50; } - if (rto->scanlinesEnabled) + // if (rto->scanlinesEnabled) + if (uopt->wantScanlines) { GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); @@ -2567,7 +2583,7 @@ void handleUserCommand() savePresetToFS(); slotFlush(); // saveUserPrefs(); - _WSF(PSTR("Scanline Brightness: 0x%04X\n"), uopt->scanlineStrength); + _WSF(PSTR("scanline strength set: 0x%04X\n"), uopt->scanlineStrength); break; case 'Z': // brightness++ GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 1); diff --git a/translation.webui.json b/translation.webui.json index 831a7316..995e7cf9 100644 --- a/translation.webui.json +++ b/translation.webui.json @@ -765,5 +765,17 @@ "es": "GBS-Control está reiniciando...", "ru": "GBS-Control перезагружается...", "zh": "" + }, + "PAGE_RELOAD_IN": { + "en": "reload in:", + "es": "reinicio en:", + "ru": "перезагрузка через:", + "zh": "" + }, + "SECONDS_SHORT": { + "en": "sec", + "es": "sec", + "ru": "сек", + "zh": "" } } \ No newline at end of file From 7ef512f853ab876b8cac8e49735c37ddaf5c3dd9 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Wed, 19 Jun 2024 13:06:47 -0600 Subject: [PATCH 37/41] WIP: do not upload (tv5725 register map update, device setup logic, casting out unused registers - easing the code) --- .vscode/settings.json | 8 +- configure.json | 2 +- doc/DEVELOPER_NOTES.md | 91 +- doc/img/4e6bb9363629898.jpg | Bin 14337 -> 0 bytes doc/img/669cd5363629833.jpg | Bin 31894 -> 0 bytes doc/img/blue-extend-range-ctl-bit.jpg | Bin 0 -> 15688 bytes doc/img/compensation-delay-ctl.jpg | Bin 0 -> 8329 bytes doc/img/diagonal-bob-lpf-coeff.jpg | Bin 19099 -> 9448 bytes doc/img/display-clock-tuning-reg.jpg | Bin 86589 -> 64720 bytes doc/img/e2dd64363629965.jpg | Bin 27480 -> 0 bytes doc/img/en-read-fifo-request-mode.jpg | Bin 0 -> 14460 bytes doc/img/enable-playback-request-mode.jpg | Bin 0 -> 11497 bytes doc/img/horizontal-stable-est-error-range.jpg | Bin 14904 -> 5881 bytes doc/img/logo.jpg | Bin 84725 -> 73885 bytes .../menu-mode-control-4-glob-still-ind.jpg | Bin 0 -> 10005 bytes doc/img/motion-index-delay-control.jpg | Bin 24880 -> 13618 bytes doc/img/osd-horizontal-zoom-select.jpg | Bin 0 -> 15943 bytes doc/img/osd-icons-modification-select.jpg | Bin 0 -> 26782 bytes doc/img/osd-menu-icons-select.jpg | Bin 0 -> 26380 bytes doc/img/osd-vertical-zoom-select.jpg | Bin 0 -> 8189 bytes doc/img/pipe-control-motion-index.jpg | Bin 18419 -> 8403 bytes doc/img/pllad-cko2.jpg | Bin 0 -> 22322 bytes doc/img/progm-repeat-frame-num.jpg | Bin 0 -> 25729 bytes doc/img/read-buffer-page-select-1-16.jpg | Bin 0 -> 21071 bytes doc/img/reg-map.jpg | Bin 85493 -> 63573 bytes doc/img/sdram-idle-period-ctl-n-idle.jpg | Bin 0 -> 9182 bytes doc/img/select-16bit-data.jpg | Bin 18235 -> 8423 bytes doc/img/slot-preset-prefs.png | Bin 65092 -> 34672 bytes doc/img/svm-data-generation-select-ctl.jpg | Bin 0 -> 8730 bytes doc/img/svm-delay-be-v2clk-ctl.jpg | Bin 0 -> 9002 bytes doc/img/uv-delay-pipe-control.jpg | Bin 33908 -> 20501 bytes doc/img/uv-step-response-data-sel.jpg | Bin 0 -> 8171 bytes doc/img/vds-sync-enable.jpg | Bin 0 -> 9024 bytes doc/img/y-compensation-delay-ctl.jpg | Bin 0 -> 7880 bytes doc/img/y-compensation-delay.jpg | Bin 0 -> 8311 bytes doc/img/y-data-pipes-YUV422to444-conv.jpg | Bin 15953 -> 6757 bytes doc/img/y-data-pipes-YUV444to422-conv.jpg | Bin 16825 -> 7480 bytes doc/img/y-delay-pipe-control.jpg | Bin 33822 -> 20371 bytes doc/tv5725_programming_guide.pdf | Bin 1975165 -> 1980893 bytes doc/tv5725_registers_definition_v1.1.pdf | Bin 1491561 -> 1503119 bytes gbs-control.ino | 327 +++-- src/OLEDMenuImplementation.cpp | 106 +- src/OSDManager.cpp | 34 +- src/framesync.cpp | 12 +- src/main.cpp | 329 +++-- src/menu.cpp | 234 ++-- src/options.h | 170 +-- src/prefs.cpp | 62 +- src/presets.cpp | 719 +++++----- src/slot.cpp | 106 +- src/tv5725.h | 1069 ++++++++------ src/utils.cpp | 196 ++- src/utils.h | 5 +- src/video.cpp | 1233 +++++++++-------- src/wifiman.cpp | 50 +- src/wserial.cpp | 6 +- src/wserver.cpp | 505 +++---- src/wserver.h | 8 +- 58 files changed, 2875 insertions(+), 2397 deletions(-) delete mode 100644 doc/img/4e6bb9363629898.jpg delete mode 100644 doc/img/669cd5363629833.jpg create mode 100644 doc/img/blue-extend-range-ctl-bit.jpg create mode 100644 doc/img/compensation-delay-ctl.jpg delete mode 100644 doc/img/e2dd64363629965.jpg create mode 100644 doc/img/en-read-fifo-request-mode.jpg create mode 100644 doc/img/enable-playback-request-mode.jpg create mode 100644 doc/img/menu-mode-control-4-glob-still-ind.jpg create mode 100644 doc/img/osd-horizontal-zoom-select.jpg create mode 100644 doc/img/osd-icons-modification-select.jpg create mode 100644 doc/img/osd-menu-icons-select.jpg create mode 100644 doc/img/osd-vertical-zoom-select.jpg create mode 100644 doc/img/pllad-cko2.jpg create mode 100644 doc/img/progm-repeat-frame-num.jpg create mode 100644 doc/img/read-buffer-page-select-1-16.jpg create mode 100644 doc/img/sdram-idle-period-ctl-n-idle.jpg create mode 100644 doc/img/svm-data-generation-select-ctl.jpg create mode 100644 doc/img/svm-delay-be-v2clk-ctl.jpg create mode 100644 doc/img/uv-step-response-data-sel.jpg create mode 100644 doc/img/vds-sync-enable.jpg create mode 100644 doc/img/y-compensation-delay-ctl.jpg create mode 100644 doc/img/y-compensation-delay.jpg diff --git a/.vscode/settings.json b/.vscode/settings.json index bbb7807f..2ce29abe 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,13 @@ "typeinfo": "cpp", "random": "cpp", "*.html.tpl": "html", - "new": "cpp" + "new": "cpp", + "atomic": "cpp", + "memory": "cpp", + "type_traits": "cpp", + "cmath": "cpp", + "limits": "cpp", + "utility": "cpp" }, "editor.tabSize": 4, "editor.insertSpaces": true, diff --git a/configure.json b/configure.json index 5ae0a06c..8b45bd76 100644 --- a/configure.json +++ b/configure.json @@ -22,5 +22,5 @@ "ui-lang": "en", "ui-hdw-fonts": "12@FreeSans,16@FreeSans", "ui-web-font": "Oswald Regular", - "version": "24.0615" + "version": "24.0620" } \ No newline at end of file diff --git a/doc/DEVELOPER_NOTES.md b/doc/DEVELOPER_NOTES.md index 54c125da..b9a3c2f3 100644 --- a/doc/DEVELOPER_NOTES.md +++ b/doc/DEVELOPER_NOTES.md @@ -1,4 +1,4 @@ -# REGISTERS +# TV5725 REGISTERS ![register map](./img/reg-map.jpg) @@ -6,6 +6,22 @@ ![display clock tuning](./img/display-clock-tuning-reg.jpg) +## (S0_90_1) Osd horizontal zoom select + +![Osd horizontal zoom select](./img/osd-horizontal-zoom-select.jpg) + +## (S0_90_4) Osd vertical zoom select + +![Osd vertical zoom select](./img/osd-vertical-zoom-select.jpg) + +## (S0_91_0) Osd menu icons select + +![Osd vertical zoom select](./img/osd-menu-icons-select.jpg) + +## (S0_91_4) Osd icons modification select + +![Osd vertical zoom select](./img/osd-icons-modification-select.jpg) + ## (S1_00) Select 16bit data ![Select 16bit data](./img/select-16bit-data.jpg) @@ -42,3 +58,76 @@ ![Motion index delay control](./img/motion-index-delay-control.jpg) +## (S3_00) External sync enable + +![External sync enable](./img/vds-sync-enable.jpg) + +## (S3_1F) Programmable repeat frame number + +![Programmable repeat frame number](./img/progm-repeat-frame-num.jpg) + +## (S3_24_4) Y compensation delay + +![Y compensation delay](./img/y-compensation-delay.jpg) + +## (S3_24_6) Compensation delay control + +![Compensation delay control](./img/compensation-delay-ctl.jpg) + +## (S3_2A) UV step response data select + +![UV step response data select](./img/uv-step-response-data-sel.jpg) + +U/V2 is 2 clocks delay of input U/V, UV3 is 3 clocks delay of input U/V, and so on. + +## (S3_32) SVM data generation select control + +![SVM data generation select control](./img/svm-data-generation-select-ctl.jpg) + +A1 is one pipe delay of a0, a2 is one pipe delay of a1, a3 is one pipe delay of a2, a4 is one pipe delay of a3, here a* is the input data y for generate SVM signal. + +## (S3_40) SVM delay be V2CLK control + +![SVM delay be V2CLK control](./img/svm-delay-be-v2clk-ctl.jpg) + +This field define the SVM delay from 1 to 4 V2CLKs + +## (S3_55) Menu mode control for global still index + +![Menu mode control for global still index](./img/menu-mode-control-4-glob-still-ind.jpg) + +This bit is the user defined menu mode for global still signal, when it is 1, the global still signal is 1, the following is the detail. + +## (S3_73) Blue extend range control bit + +![Blue extend range control bit](./img/blue-extend-range-ctl-bit.jpg) + +This field defines the range for blue extend. + +## (S3_80) Y compensation delay control + +![Y compensation delay control](./img/y-compensation-delay-ctl.jpg) + +To compensation the pipe of UV, program this field can delay Y from 1 to 4 clocks. + +## (S4_00) SDRAM Idle Period Control and IDLE Done Select + +![SDRAM Idle Period Control and IDLE Done Select](./img/sdram-idle-period-ctl-n-idle.jpg) + +## (S4_28) Enable playback request mode + +![Enable playback request mode](./img/enable-playback-request-mode.jpg) + +## (S4_4D_0) Read buffer page select from 1 to 16 + +![Read buffer page select from 1 to 16](./img/read-buffer-page-select-1-16.jpg) + +## (S4_4D_5) Enable read FIFO request mode + +![Enable read FIFO request mode](./img/en-read-fifo-request-mode.jpg) + +## (S5_16) CKO2 - PLLAD CKO2 output clock selection + +![PLLAD CKO2 output clock selection](./img/pllad-cko2.jpg) + + diff --git a/doc/img/4e6bb9363629898.jpg b/doc/img/4e6bb9363629898.jpg deleted file mode 100644 index b57f77248a09c7f8b9994edd6890bdb5480179b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14337 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 diff --git a/doc/img/blue-extend-range-ctl-bit.jpg b/doc/img/blue-extend-range-ctl-bit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42ac275915d5f8c4a1c8f68d6e654cfa3604f782 GIT binary patch literal 15688 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 S1Oy2H=f5Ffucj{%@Bbf0(*aQc literal 0 HcmV?d00001 diff --git a/doc/img/compensation-delay-ctl.jpg b/doc/img/compensation-delay-ctl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e20f55c380494cb3a5d99e846b1b8c02560f5818 GIT binary patch literal 8329 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 X?$x6Y2p9yC1qA;EfVs&(1dRM21T`8M literal 0 HcmV?d00001 diff --git a/doc/img/diagonal-bob-lpf-coeff.jpg b/doc/img/diagonal-bob-lpf-coeff.jpg index bc0daa6c25780a918c45aa1720303841274c07fc..764f6a1ee39d245ca48592558ef9d8064be0e0cc 100644 GIT binary patch literal 9448 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 diff --git a/doc/img/e2dd64363629965.jpg b/doc/img/e2dd64363629965.jpg deleted file mode 100644 index 5c51510981849833ab1f187e6c3cb78ed49e3e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27480 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

    YB6iNWH`jfv(*{4xuj7sB*EAii9X^rcj zCKBhfx|G<0s7GJ&gF5M*p;wc(tknD#{`??aZIGi@cBb+1I{1C1!Gq=?qf&jebgsso zRUN|?H_J7Bv^;WvfqjaU%B5z(`A2hZj)5XF21>5spP{x^2(GdVY>h%SNFKH2`-?+;{qtX&uXV(kdPQcm~UHuX#1}1YD zm^aoX6Pl!JI#k7Ot(}#manJyiB5QnR)FK3el}`YwvC}nDN;|=)st_IuQL@9gAQp|H zL&buG6bud!{GzIYA@r1o(Pc7v2|O^^CYwAkF{!9%&&Lab;%|*}qtwD!YXZ-Q0x6f{ zfcc0x;stp;3(Ny5MJHb-RJX_b-kZ3Y?`|#uaB%-SPDgrbf^$KYNcio@HhYcjmnKpg z;+)Y-TL<0?oylAv=Y(BHB{wL{B=pnVJ*7uA$HYlg6)Oeu>8BT&)PF93f37QbKNb@( S2&4i?{~rSQZ;(@gss8~#gm6v( literal 14904 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 diff --git a/doc/img/logo.jpg b/doc/img/logo.jpg index 2cebfbb74171b33c3b1a4f536682bbd7cca00b89..19eb22bbb7b855ccb55d7a9c60c9002596151617 100644 GIT binary patch literal 73885 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 T+K)qk=Y5^@@4%_3KOg=FmJX4B literal 84725 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 diff --git a/doc/img/menu-mode-control-4-glob-still-ind.jpg b/doc/img/menu-mode-control-4-glob-still-ind.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94360c41d12735172bf5b50cf1e197c754174fa3 GIT binary patch literal 10005 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 D{zyE| literal 0 HcmV?d00001 diff --git a/doc/img/motion-index-delay-control.jpg b/doc/img/motion-index-delay-control.jpg index 4c9d0fb35d41966779c02515c7f3ca40fd7dafa1..208e27889292f24399c3222116d20c9aba39955a 100644 GIT binary patch literal 13618 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 literal 24880 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 RwTVDKD2e{>#HlWK{~6;FihTe8 diff --git a/doc/img/osd-horizontal-zoom-select.jpg b/doc/img/osd-horizontal-zoom-select.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5928a143ad83863ac211cccdd2004ef88fa8976 GIT binary patch literal 15943 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 literal 0 HcmV?d00001 diff --git a/doc/img/osd-icons-modification-select.jpg b/doc/img/osd-icons-modification-select.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc0b88613ec789b1525f1bd5f6ebd8efd4fcc1f9 GIT binary patch literal 26782 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 literal 0 HcmV?d00001 diff --git a/doc/img/osd-menu-icons-select.jpg b/doc/img/osd-menu-icons-select.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3711303208cacf4109e5a11347b78d91a84cbe8 GIT binary patch literal 26380 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%0D<+XK!@za0G35TmAne0X?v&mC4cJQsXA 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 literal 0 HcmV?d00001 diff --git a/doc/img/osd-vertical-zoom-select.jpg b/doc/img/osd-vertical-zoom-select.jpg new file mode 100644 index 0000000000000000000000000000000000000000..988b0a49d576a4cb2c0dff66e672b0337b752387 GIT binary patch literal 8189 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 Q3Q+nF0QA#@6Trm(0p|>}l>h($ literal 0 HcmV?d00001 diff --git a/doc/img/pipe-control-motion-index.jpg b/doc/img/pipe-control-motion-index.jpg index 5e9697d076d9242d79e08a7998d664791f9c235b..8962a0f06bee35bf9d79ee5c045a3b38ee6113a3 100644 GIT binary patch literal 8403 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 l&o$3lzXG4hCZaGax+p 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 literal 0 HcmV?d00001 diff --git a/doc/img/read-buffer-page-select-1-16.jpg b/doc/img/read-buffer-page-select-1-16.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba2b626087797635c8590f17ddc73c6cfd40ad96 GIT binary patch literal 21071 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 literal 85493 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 diff --git a/doc/img/sdram-idle-period-ctl-n-idle.jpg b/doc/img/sdram-idle-period-ctl-n-idle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6bfdd3f1efa4683b53005cdc36a698c742b100f GIT binary patch literal 9182 zcmb7K1z1#D*Pfx9p<8JN5Tr$v?rs>ma|US;LApyCm4=}k1*HV(5b16ZX#pjqrmmI%AO#tD82}In0LURefU8+RFaYUBkdcs( zQIV06QPEHlf`);1Ef`oBH-hy`aBc+eTJV1tAi^F61qB^(fUq&KLH}>LY6B2p091jo z$Uu4k5&;mI0C?2_pauW|NXWqJSbq~VbQDw!WK7`I3;^S2|5?5#a9}RwV%t8HX40@( zb1pR*x@){(B#7!MaGEi}pW&Xj<2Wx(VBuKfX&mpB>EP!G95AGKJ9?BaPrSLMQPl8s ztv)HgeRfHAR5jT*BWh6ljhgPJmPU!*4ZC!`_vXG zFlcT`tT4N>z^k>yV*sN$_D%5g96DYl${H-< zr+dk>kVHab4n)cfWMSw%QGjS9q{OsDy!>1OAOgZ)g9*ey0!l<57Nk5< z>+B=1mm~w5ui+TxL?v-Mq=2FRpE>Y6=~U}0$1Cnxcqvj?3eJV_EWFq0Dl`x6!Xq4| zxhEz3m2Vbpit-b^b#bL@Oh|#=+6N!W38ZJo{AC@ihcL?6T1vszJ0jaVIy@uEPFkH_ z;%R7N%s5Hbz0#k3=_i=|$2_b3lDJ($IsX)ZbXTltTBW6Vm#;uxS~gvXHI)Ign-5`6 z^j1jsE)Rhl`SeDku^o=$>&~gyBAIOmIkFew?|gHoOn7s+;gC1{7_cudd6^1nQ#K{HJHLxwLy-ZSFs5#e+kPGKx5l`$0dqI%=N9Tho5Sg|HE!5h!z%ErqLZ1WBR zcL25%)jE5n9q<#z%(2*FmRS%*@>SkHC$^{!2Bc_M|G{JNfOn1p`f;WtpJ5apNlA|;W`>+c`&#K(&62s?6MkBg&rXbDLRvos@mlb zOk4pn?#>-hAs2IxwV5>YopdFfQ~VHKBipi>n?J8omU0?GfyKiw=708XJAQ|Ge!z=_ z*4itaZnZyb@xFb;Fhs9as+mb~&Ol~qz7uT}A63KcA;Z9n!=bqPTIzL?^>|dq&pytc z&S~;S1_JYTIEjmZjOil=``__5x@dX1Q2VKZTV{d97oHw6zwkG-(ouME+C9@00WC45 z*ZhCh$(U{?SIA&QtHYFF^Z(%rVS4JmyL0GjVDQ7O#kB*52k+Lz^gSG1q*UCo`F@gQ zQk>=Lu{TV^5s*`^_*k0i)n)V*;MUiuqc;}9C)HN~4Pn%KD)~^7 zwZouE_^oEzqfPWmIpHVb8@<4_Vjqw27M)NBNd2$Q?Gb$AxF?4}!w#WAorcy7Q{6uV zZqUCe5ENyZx6NPI4vivr$Ce;?{-kN9Jv1=OKG3BIKjyvy#FYLb`;%LW#srE);u1;{ z1vuaGUjjl9sS{R6+U9@fZ&_D7ssARzmwu@--tTXk9yT?2um^6@6j?7b7|6*jf$Hqe z&{`k~3bMIp63Q&A2lp+pBIFUGJ^(4AdJ$Z|# zSw^?0?}$PYyMrywPWOnyIFJ2zUF8n`8<|cWUYmZs&_9EX^Vps~Bc)3~9~SB(E*%d0 z-Qb3-rAlO;iUcx{#qo&p7rPz@c4SopT$S#d1u~~mcvH*sM0U(hkMXCvog~qE%|vY7 z-|6GLY-N42-cN*;CTxGwS~CXaP5Ti$M7;YMPXUR0UTvi)qWDN6iV5OR3gSNiIx6N( z;Q}IR34j2Vkcf^uet49aUR>QQA&HhpGm(TrL(4g!291kX;uRyGq`6CAP|j=D{a=*^ zQxqw7Hj0-8ssR*TFf59`cs(ZLt8dRB%E3>NmGUxtuwPlqX00HX_v1j|X!fCKR~ciZQ$JnW)`8cHb!@WZw)u4p3f~u&ivhg%v`| zgj3-US79~L{?^XzX4B%)<#HP(XXQ`)s-eb*MSV~GYjX0w`yR!VIV>x`0xP%)Xr+{a zIK0mrt^hz~>DbWxdW!q%S=_Rr2A}td-_Eeo7T2V_GGtK~P>?4*DB>RL=bm|r7Ytv= z`=LEN3NB*ce0DlseZL%tC=7Aqg2nyfwbTGbRUM5U! z%5TZQ-n#geY)`-H%J&`U{V`M+^sxzhm8XJ#ZRP>{?RH6MM@GWZru=r7Qyl`gfxuOV ze|(rM*jS}l^eT#t#xk;NiLQ9cPfE;dm$I$>MFl+GTSqu7Cj+_I>lKq|mvh2|+Yg~i zNF%l{gBjbM&(60K{LAz)qj=aTt@luxMk9W}N@`1qTbb*_c~b>qQ2|g4dE)b!yM|0!;)!C(5f{)ir@vUEQHO@dAkqvI3t*Ar{Y{3gU5xZ{r=DkFRmiZ@LORTDWUIz&Z!jrgNv(U09=)=>LUP}IZ4BAN^Ay}7rZQ*x>X3KL`WnmocPC0oetu&Eku6Pn9Gqm*(y^HHj9sX#zg~xxxHY;bSmVp;HT{78a<>< zF6d_xb`TWkU0n6nVI@gr7CDTe%n}3RRV)!a)i1H&Idoe4JS>>J))>F*Q+v|8c$RV8 zrWAqC*Y0&WRH&Wud4AS5rx!%6;1*Lzualh3%EHRrUA2Au133#m>2%yjK<^!?;z{%Z ztN_x0ni-&m(fG4q<(*gbLK3nhkv0Hxks7) zd}R4P+`(R4-yNPWuiPQDnG!)5o}XFm<$dyK`r%vS(B_Ae}k zsrXI7AkR@vVVnvhe%_(JwZCspDw&OO;MJ{*C6rYNl=TV>Z(o4>6WPq$<{<6)bV3P) zNSbj|fCrn!nW4IzFJEj}x%^YpQM*JkdYfqyX7M~uJ=F41%mMQ2_9 z`MQi9?&l4{kgwRrGeY(@Im!J61y3jp8~&kbG}a$v$V%&7`1*~q()7tc1OLKQtg$L^ zE}aT$63{HJ{$Y8fX$5^_yI)YSF(sjv)|Twe2=NP3RyyRVcN-g&WKaFKW@=&rb>k+) zJ)=T)8m{1Ys=LVIx8*sD!NV~&V#0LcP?0g(^I>0O7rN#yKYi-$2OJ!MzV&u2xvT1K z_9z=EJ9L)4#ubUv56e|)M;>366N0l`3jqg|9RKk%1NGC;3mLN*L}Ghk^kug4Z;RHS zrw?w)7JaO@OMKFUw76h+P~>FJLmqZ!!Hn1!FsuK z<#mU~E5I8Odneo3@D+19oocUqlw{}?;6Ce@agF@91#}IkQNr0_ShJHJ6T!hr$Dq5A zw1o7te37<<7_5Y4#KvEGZ|xEE!rq!OJyEBR50|lu5TkZHPc*Zk%i0#ji~*`U0PlBP z-l^qhbz!K#&modhF~h?uPUDcFKcSVB*f@1FVakLgvt}6I5(f@M8hJfpf%@<0x|?a7 zR1cJ~86V%T4N+X^7N{!rp87mNa@U)BrY(QZA`PO|yyFVRc?oAy)P;1n7)je)7=QcO ziIv(M>+tvX6ijShwX}qg+A)p;D0Xs@=l|dXJ2kl@DUI}j-&z@unUu%K%p;419@5F9 ze~as92nia6X&OMLC?knQ(yDs>Cdl7hKw5!AG8gLVT3;=yk5RLJn^kc!Cz&GD**|ow zy#7vJQHDnuy}nAo#?md>mqU0%9O+>cG zb%sfMYM%y~Anvi4KtRMz7Rt@G>(6~xAOV1mTU`D9K9?D-b9_L~^1*NWb)s~ch9BZA ziv=sHJKba1%bblYBDbk^AuA2t#DlJ{rp5gt$1~=4^t-e)jmextm@8tSIwzj>P(e)z z?~Keoh70wSJ{vNrr3rhMZpWFA28v{OwOIG03gK;bW&}Je@uV@EaS61BkwAH!m(AZ8 z7|h;Jr+Mcm#G6^$)G=HEf^w+EzZvm}K3m2b8{$!a@yfOc;OfwCe@E0&>y=5>L(s)d zC?peqj!%$1Gy;iRMVDy*tcbb9dzLDU-o|b$hDkikL}8d;G}uK#3}6h@#L)MM?8=HWxG8{P{7JLE+6T;tQa9u-J9@c@?bfyaR8GTsVqG(;1J)>xm+9SeaZ%!agmx^^ z3w1E#@eF%@G8c?;f=l^4C6mG~iqJLd#QJP+XBhCkH zdTI`j*Tdl3cPN}D|P5bF|8LnLAL4u}+499^I6qm>p57ix~YV!lO!&ATm1=vH2=KPN4W ze$PAu3HvLZ^mEz-UQQe7E^I}X3nIDEhPQWKRx49pjtHo6b9L-|=adSIg`4F_R1ump z7RR>|y5M#&>Z_uDiE?~ych*}Y(@Lwz!4=LEo0pFa(qVo`*09?|)GQtcqnzsTr&?ah z#WbmP#7zhvm&`Mru6W<+fyZ9uY!no^L#=DNl1tqXAm@Zh7tc6hS?Hi5ES8)M{X^S` zPBJB!OUO+Ird02z<(oeG&Fn^j;1YDQVv~R_F<^|+7AhDr(54{4r2m7z5uI2m;Xc;JDBG3Xf~HkRxoUN2?0WoK5}Wy zjqfbxArR0$fG6?A!fv5mLpx(vA1Q|w7;n7(v~OtfIM{IDJ4KLSB0rzRo%AA74AA4d zZU#OxkZ?#g3X(QT=axnfCQJ;ARNv;kcg5^`j7B0Ln%JjQv8GHa#>9G-yH@1wd#$^( zZywDz0#e8n$Ba6BgeFB zGtWp#G{x8%!9knVC4?P%I#NGo@bA9HdyNpM3?= zgJ(8ib5$lQ?F6BPOoTBa|fzmmi{sGJhT^ zkPWjW8Ax4hkTD%wuRvi^zN@fPG%s}lYZ}PJ3{okOz5p$^hv89khnu-o`&&g>tm9D& zIxV-qbH>ERj9NfT&rGny!ZCGF%$IsNJnSJ?cF+}?{r(W z9gq6nt(3DSFIis3Aa=mi&zo^m-NNcAsxD*5W$A^$1&^+uABE}B);5sm3oED)A}rwTF}0> z$Clcb@%cy#qFynAuAdM7e17>`y`lqf({drU0{5K*;&ZD1C|95_H8P?UVyI5YL)Q}w zQjI=@^W{N-zcvd6=nUx;BIjXG5?Fk^OAb|0a?v$Fod z^c#SZ;t2mQ+K7;m=#?(!Vr5q((nf&fOv-}*(=Nh!d&(Q1D z0U>(fQhc(ag{W;(B#GQq?a&$cN`MrQSO!SnWzGl(O7<~Znv1;%0L}^e>ngu+m)XE5 zqOYa(?WEJN2WYA21&@f#y}!+MvA?5w;?hHSq_-%t;?Wg40#tjR8GZU~eK6}jnlN!h z1@};=q-0Vv{2-2*N{iIFmj`AEA&A&Gb#~jfd)P;$l+Bo~=N_685%G-RoItrkL4El} z0KxEn?OWR-ca7tk<+nev+fn(Z1gRX+oW!gRgG*)Uw(hhLnF$MY2U)g7GJ|&97VrT9Shz&bzCL1~8mjEwjD7B_jEh8x z@Aq@vo5G0Lq~tr2QkUW^bX*vI$W96Rdb5gkj_~D0eykistKvI-zkbs-uHx{uQ;EC_ z#lp^Rx*gY^zSxB2dhy&bVo(q)+q&3yMOIC^6?MHzdhCGRwF&0sKJ%w6h0G-&xr zFYv6*3REUcA*y$HcxO=U{-)-FMD7was)IOGOppBdiN$nggQ*oQO%5O|b+N_w@{G4u z6+A4A6$uWV+E9%3PJ%f$Ec{ABwCNp$(US=adU(|c*2>Q*(W zdsziMdxHU1-rvqo_7+?8=IGvswhIC5Ll3CLSIC9rpWeP^*_$BxHZzkFTHZFE1!?=FYD}L|Kb1C? zuO^OXC|AvZYcEXe7WpkDxyt1(NYV2k`=yj`Tc;<8N0kPH?WZ5ROZu>k{YjD9 wUE6TT?_dSP^RthTQR}bYtRVPVzW#XM!t~}o3ke7m1$h4p0P%v%HDLPx01*Q2GXMYp literal 0 HcmV?d00001 diff --git a/doc/img/select-16bit-data.jpg b/doc/img/select-16bit-data.jpg index 08ff2a18638553838d61637646e4e9de47095fcf..ba255ea7cf6b6c933364a10d0d0caf5ee585c1fc 100644 GIT binary patch literal 8423 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 OlYcNcyF@uR82>+FuH=*e literal 18235 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 Xl7sO-0_4*wdjjOzYagz`u+#q!Dl1Hr diff --git a/doc/img/slot-preset-prefs.png b/doc/img/slot-preset-prefs.png index 2d9bd440e8f5bc74045c92c155949dab3a194a89..f605d7f553540cbc6893eb5742dd8436c1a5edcf 100644 GIT binary patch literal 34672 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 z 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 F{{cC$K+6CC literal 65092 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°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 diff --git a/doc/img/svm-data-generation-select-ctl.jpg b/doc/img/svm-data-generation-select-ctl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f98877627efa0e7210654d72bac4e463603406c9 GIT binary patch literal 8730 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 O|8E!&uL#!+lm7$dHt78T literal 0 HcmV?d00001 diff --git a/doc/img/svm-delay-be-v2clk-ctl.jpg b/doc/img/svm-delay-be-v2clk-ctl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d788d854331fb89d2a9689f94c0192b7b25686c9 GIT binary patch literal 9002 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 N0kHq7$pK*G{{R7fG4=oe literal 0 HcmV?d00001 diff --git a/doc/img/uv-delay-pipe-control.jpg b/doc/img/uv-delay-pipe-control.jpg index 4653c3b367174a0a1952ed1c7ad5e083807db1d5..943585f445fb29f8a180ac47653eaa7d6d430ea9 100644 GIT binary patch literal 20501 zcmbTe1za4-7B4)wySo$IB@o;_xJz&k?ykXQfWh6}-GU`}aF<|#UJ~vE)unxcRrFzih-g#O28?Wr0e9Or}5IL{UT8uN# zQXded^70TaehpH8Jv%V~sS~UcqIa9KYSG726clLr-lXS;0{1K8i-zt{=!O!sF`X7q z1d|d%nkS-v)K$jalZ^yxrikN!QC~#r&HVRxJV~(Z?+yip&0TKX^q!mQU)F~E)sjrb!E1f)m$_LhEG6yFVbcM zlNJE41rgJHC%^7?vUdW&S~0gJ-|wIsSVd3;+Rh<8B%tES`3bregdD%Rtowa$dN>J( z++1-0Na-L5GtVVkukUGLP~=|VLx|jHU$68yzz||rEuV+*C`!1P;;(I>Kg6K%irs}k z?C)!kC+xuX2kWWA?bO~NL)WXJ=q<3m&7BjGXL#|&U+;%5qz->UAjH$cK#17g6t)>p zxShJrIByaTVtU#8>8+Cxp{$}Qek15M-2wj%X+vD2@{&QVTTKEQN~9YTXbM?O`fbpf zC7#J<<_2f<^a@+`8z-Nv_DU&Ja?)tMwX?P7uNpGnIC%v0(4NH@9MSD?yRRc=R5c9&k`d#ml%(>m+!gm|;@ZJ=G8 zYRSew-{H+uA1poFhJHW5?zZ%X(G>Eg5f+PUK30)Vc8OVuC=u6lsdGV;-*4y?cbwC* ziUBtgA_%e9wrOMuLl#SC&C6)qGuEQZZj5pZYo1|AHd2eQ zIc^_{IvsC2S~Z(`aY08vT0iVGju_b%y&TN$uB6(8r!a1+hOq0s51KA3&iHv8@w5|vkHy7!u{n$xFO=IrH7mbFr6?c>8$EhW$_(pzF^rY=Rg zL$$+@s^&F1EEcq?>Vj^e1G|#avILYuPsJGV-o!&;kqfCcu2>;R(QJsOy+DZTe)~ea zE+yQy9`2i`{~JRZ4lj%C5jI^rNG~J~c9Fnu}g2lHbor`2U2hWhfZ#3@rGkTjkV2;-79hD6}`8k=t2g3TWXOGDg?p3@t`&9}PLV zilLo-De<~}<*vVD-L~60@M3me4pmQnt6}*EVF(<6 z`o~$G=RXR=*{o){>l}p#2EGb%;BQ-2(K8&17-C>rh06fGr;4nJ*gAChr620o{-FbhH1E7WV>ALmUQFun)8 zc!R>G_Gf;J}Y(-A6`8cec^y&v#i> zd*A<9N4Ks!#=;!?ijLb4xg??ok7Nvi7tL_pn2W~3B)^I{s1+{kGXu9Q8vm6a=a<}$ zoH-PxE--W=%uc@C{ZF+=w(kL+o}M~9@Fg|BiopY_58QVTpNZzxtzI)krh0fpzDmJBx*g(%m-6S-n1*c z@}C^^dbQeU-PH#n?(cZ^NBr+BIwzwjizeTPh=@&QBox1v9Fqm$(Otuux27W`2K+es zVJ5T%9?w^+^2gPw5NL?UAhQFZhj7rZpGgii*Yue$F?GVEzGyhcl?YMpTo}%!C+*0?syK4GQj0 zhsR~ky9~SxS-NWR47H+b8Hc8w*;q6AKA#VpYVqJiG{)@AC?Hdq6+Zp4FP+pndgiw0 z+3~wZz84SAoL;rZe@jXme2o`sZ30=4`CnX7|L$TjW&7wSK3u_?le^98IXH9By1sa2 z@;39?6I_0C+e4n5Soy-+>@UC-wikNaeGl-EAh%VDj@ol$W|o&% zotbND{x<@fy>fe9qukm?R~G~-F8((n*>m9y=ULN3w=h4Juil~2_SwAx;&wcznV1|- z4mWSijCb37Ofdnwur%#4itc=A6QE}t#B1L2UqoWl8CStKftXp;$!d|ldDPxHQ@;dE zFb8v1HH@f17zo+J%XQ&QVy+tQKpTL@ulN*e)NGSi_ITRCgq2#@N8D4PzZhUiRv)Gc zNf29}H1eitD09~kXlCqhIyQncr=0hIs)vBh!jR&1)=m_35QCy1=}AQ9X{Wb3j92TqNV`HB;gw z?~PpG2w#B~FB|<+iqjt4%BJ}N5nGqY>1E5w_#f>D19Ur63K1ZB0&fIQoS&%Q%;J#h zag5)lBY^wz;A9N?vGx~Bv+cJERlIBb>;=cc)k-mIy0Aa5s*9zR>D0>{Lau!N2fiZu{Ed9Y2Rl>v`F{_&RhPU2YXNZ4C4 zQn5B$X~M0Nv|&_5o`91-w9qYgPTKh@I6wbvP zcuu}-m>tmdw0(~93mAqN?WcL)35_sG0Mp`abp%NH(z`p*zGD6?g57nxn-F`Y-c0L4vGe8 zfQ^L{6E&^jnr5{t-^aOafcWb}tm9F5=$I0(uR)Sb0*otI4^t`h61dx(uD;Rp9CIMB z-(l`D(-|HDcN^K^L4&|USGPEM_vD0K%dvijmNU=>$Dcq7Nvc-dBiq)P-`T|O?1`8| zOo41r6C*ue;rn7H5|{tfVD2(+jVT;`sgj!nzQN#i)EjAZfi%b3+{D3PU3{|-(wGCs zI}2VK*{5WWOA+5Bs>oQ84!hvewIIR#dfkqjm4++9UJnVh&!2xZ(5YHVMVhH46pbfP ze%m#c^?e^1t1OzE1MGQNxLqsIQ`h&iQJ8Jlq%&OEP%?g&6c2kG&d^An`dS9l;ks;N zQUq25%=qS>j*2rW&hOt>eVh6I3dVk6*-bpS_-m^HzIh>XlQAfU;{iOZ?4%^wvCs8K z`%(D`RItrhw%fGlML@jJPuw3y3y}*4qLJUdA%9qNjlbYI*&a3mia2<}XUn{{ubL8t zp@nk#k~nL9{E$0uUqQ5|HSLp(5+t(Hq?o_nEXu2+UIq7cx;hT4#MP)xRP{FJ;(-(v z;&R75*(Dv~DAmQau*7aX7ViTcqB!l#E3x5E?jv}Pd-AUs^!Ze`MpGX(NKqAWdT77> zsrpmuk1I`6xigZ1-Od{RHsp8wqX%vz@}i#AP4J#n8NBy|fq;gAgF}FWgo1|xZ)PDN zp`bBfFtI4ufl0};*yNO=D$_Gm9Aaw5PK7vZ>Ou7lja%E)oZ_k`iTPa4G{FV1=%!|_ zA)$S9J7>Rkn+U>?F{4F9vbs^-Oy3VEIf`5NF{~ARB;45q&Ao*;nlN^{WM>^esomhe zWUM@v8-90-PiIk6OPBGZ0Lp|BU;5)>VQ!PSxhxgO!BQU)G%yYFI3d>>9F^Kb^C(&s?_Q?3s*Bpa z!`c20+>Ypd9rXt7%VOb=K^`sFi6;sN=0%}AppYr+@lc*vnPT~>$~;j!5%3{qZKY{u zo=yO7PnfumXW8|@6Sqb<5on4)c{~&ic#sdQYdpI1wX~y2u~=^i6H-$Ai-8byC(lfQ zYqDO07Y#a7mA8??-zBst>LkX~Cb}Kpp(s(X;EBpHrRLuDG4s-R?p||>RpMLjuitex z)oO>KGBRbdIwzM+ibcX1?J^KHk;x45$kI11tKbq^$ql&(5(b>Q3FJ!?1i$QNlIQ|* z%{B$C8*~)$VJ)@ZW`6JO`rcSQgvTs0-8~(I_o@mDs|B=_FrUW%?vj ztKQ7$g(g#bkD++(cyqu-Hnc&=;_$8cE45LE9elTsCOhc{rB);EhpKJ4--`)2dYc*V zwj>sxyf$W`t57VKmqW2I9G%lul1&A3W7B*2Sgvu{T`lt8t6Kr20 z+D=o?WpW#INUbE>U)ZF$dh=NjcUmP|l2y-~+i-Bxa250OLtm^|>0wYCso7@_v4~;G zVOmRK%yW;I7wKvjMQguLmX9dGX!mHi+-5p5fX0(5;XlV-4e#R$Ry@?F6tEpGmFwAj z0oL-5qjXe6^<0o9^X_#g5A%<$KTRnN-`N}=tCQ1@#>;P z(xG!yUz#}6Y;@=(Y9(8Z>#4lE2ZY@NP7xasb?yOpyO%}_Z_833Ue@b#XW?Wd`cQTF z7BWOz@Y~K0$HxfCxr=^ySus&Deq$SlI-cB=0>9oEYaw~rL)4%?tHD)tJQ?L+oo{;i z%5JHs`l&K@)a=?lph>3jRIa>3KS+qA-`FQ3jcrpZv(fNd}P=@8V>6 zXei<^`RAYOaC% zipZ`~ppj+i*on1wj;d2jvqQs_3L)(|qfW)&n+>lJhRd*!(zeQmg5bQBf?%lkU8dm> zH%7gc9?@PZExH;9WYh$s6Wg=}1OXezBjuQe$LqhaQ$p_XAI0r3Ajb9&@uy?fABpT` zL@IerrsNdp+|0)-?`0Cay#BDBQwNffyQ^Qg?Pj$Snj3IFwF_U)M@{Uw3u`j-d8WK`|`ABN1xWz2VqJ%6LwhMkN)x`Gz zBdW91cT-|Wb=S_gyDrY36cXj;soi9!j>NCy3v)L}%gHSH$rvT8agaB9lDD2l?`aqc z^F$ri1QC%6mW3;;vK9g77l5OmFtSe&%9Udzs$^Xf8B>fD=UV+(%6VbFi$u8>GcPd6R^lZ4mwb?f{9Om~oqIvDOQAjz3~W$gw# z=JwIdz`##zA~TF$O^7QHS>;E4lB{w!`NL`VF zu2#M#rs%QCWgLnR(T@1 z!=QXu)nf|I%Au=~JhNg0R3%~o12VavXP(@0McxBYC?8wEC%4o;TmAnfdqlR%6Wjx~ zN*BtWe*;fbgcA3F@I>LQqTgE2wy1w={Y{qemHj7{1<&5z~vh;TG@UeP@Y>&A{ zfNDggQo+~8w%spWhMR}C(*hm!|W9ltZ&~!WhR{$BYtoWJ`nxo{W?x*V2u(ErbBw0AC%5>dsRXB*v)l~=L9Q%w;*LH&^7 z19fYSn7sGye^sJ`ZIZ;dv$aJ8qUlY!5}i=+^W^>9GHkJ`$W-bf;KmNd!lw*5%ISih z{;$E-NWjY2#6%5gxm{voj(M?xe9h8yysjGvE>#2BYPx*&nQU5osd8A13eixT1Y^RY zUyWokP{1^+Zr=?&UlIJo!BcDU9WZ!{|4Z^&JlVZLt{#|B zSMXpkS|hvFxY23NbeQEbX=!lmElSY!OGd#oOdf1>^0Vm-mi*Cv*CV~dntL-(A(4Bf zM!^ay$IwhiE^or<=SswZAE7Qv&z1N@CjWfgkNEC$3k_EaPZBi^`$4X;q1n5ev{qW1 zq4!A67FC9Te;|wg;{HbdGxkreg`U60c|I+#TE#ma?~CYvv;8Oj4}j#q$MJV;+VOxI zp#kk^HcJ&3`NO2WukWzirr1up6D2uRmZj33`0)Ug)5mO&xU<|$z2cMF$IBQImY1oBhMO|>qX3g-!>W-3QV1C^rlbK|teDF>O}XUt7-yLT;7*{~@#c@b(6%GGlIPRWe9jCxJLcGnq0ZBP+0 zJ=z8pTdIgcaumb6X04d>F7cm@|Hic$6y5G|<(<+Ys^B;}qWDen&!oMCXjM#wDp9%C z5pFiHpJ_pJ{@b~lzv3Z|K2`BE*IXGr^sDfjp?Wk=hpzuY4z?6y;(sKPm-{$#ly@n6 z!#BC^ZChqtgqKy!bb4@n!X9C1~5K`%~@1a`B7nQP@n3n_neS_j9g)Y((QOUC^7{?~f z?S|Z7=G(X3kslVa39V~|ANK5DM$a|Dx3U>AW#l+KTX7kA%h*tsg0A~HL%^Jla(D0J z%(FlG#hM?hf^vFEiY&3k$kShH*>CHb$o%Tnu6^pp{}U^hmFe2-d`!IJ>;JorzdN@z z&=wZ7=#^g)R27q)QGb`*JYNFDU@}YpvvD=jcdMw zBc?yImtfmW=Ew3Zb3i?LIW5b1cvJ>z)k_$xthN$2i(x(W`uHo!jOm*-%q%oWrPAr( zoEDsvBMBeb{lsCFb4(8nd0Z!m?{fXfj1YHH34DQDG z(PW-l@RIRejG>foH*oqfOg|xR!Pj4fIfmjN(XNS?|0p(}wfjVUZd*2#N%93Q^E@1@cjcTt%fm+^X+K~q@>@n&2~G2$NMa8~iBEwyJw|7lqJ zroT;$$!|-a0$1pB4SGx;i1WLVie*&AJ>Z`s`AY%zS&UGU-0Y~P2G!Rj4O|~2RZOc2 z^Ny&Zi()N3hSDVyVzXjC46MUnr|_5Jqo=>ll}Ow&(6z16sQ5%qx$&7v9~UYeXQEdGFszN0)Eo=0_rS>iSOgsT9ER+3E6FdFSF^bVS=tr^dhr!=JU!0OSYRZ?y zbs*GmqRzIDX6)9`%e6`5MExKdp`;ofhs|WUd00H9XoudxKYGpW@x2GQZhdr#RngF9ZY0dDNknZ3MdYfzPe<0Tr4Wj%CPdu z>8wvLub84wbf#5;lSXsohiyht^=IC;gT?wxr$D)GmUl1QZwEx%tdu-t%J$3E;24-G~U+%!$g@>vA13Rh0u$!uy z29~uKgK$|>M7+RWll{2|W{8>}?acIsVdxsyqEOx&$+(wo$>9AFPz`)J`qbGajOB-P z)l&A1RnNX=3%~t&XP4e425#|6Y#68;#v7V&B}*r4o?xcM?Ywo7B4jE0F1_L{xYcN# z+!8E?EtMoE(?CTv-qRB>{q7TtfK!UdMo6*Lb0U?zq}4wBk^`!rVKF6z_2e^c!b2 zFkr1^j;j4wJj6mvnMwOaKPtZX0>z+X5S$1l^7{B^&GE3^-I&9xKmrW!NVY#`@d?!k%5qf9ZOAa1fRE87E_>%5%x z(!t?Ew?+~1DxG+uH|Dt7o_moh|MRKC35C2pqH31T?lN_6>Wt94bNE!A4-Azbnx;um zq(4moPam@tO0RkgaO9OjlRHpcmDj_UqMWF+2YoJfeG}eB>hx16HUb z4!4gOd^FWR>YR6dG)9=%*|~)xv%da0yy)fWx8J<3-UE7k&y8ni4&$$XWB*4mkNU*< zIqEB!y(0!1jK>|Kktp&B!BXt(RMXSb3>e{Nm_(GaUU2c0S4ICH9#cwU$Z}Q^KL)6v zKiq?1z1nfNl3}0@b(Rk0dAul2K%3Z_zwQV(c-rZVsG&U&EXk)EtV(k z9eJRYLvM$4SC^TrfwWq-QS|0}00&V0=h7i!W}#)q!U9;H4NdC?FJ`G6`d1}kOl={V zA=4-j5h{h{d!Qj};TKE=U3|b;tdv)qp>T*EI++ju_bQg|ESG7B#hyez)mSCF?L!#540j_)X>xCC=jy6{;MLN(V<~;>rlUV^)RdJeq!e*puy|P zR=l{Vxy0R+Qt{k6YuM=0s_8TWT6D)nYZqxmnQ>$FxR=(v-Y~B*w#D53ZSZ4Fet637}he zisShBtU5?T;9V~G@kqbEUNtpP!`yA`&WV9`$XE0qK142_ATZFR92`C-C1F{7Z_J5e zBT3V;(@IJC(!>v>p{0b?L&Rlf_PZa@>3+Ci8ba{ODq<|~m#3&95Y$`qEbZmP?y z6X+;aJg}>+h=RyO5}0BXUo&E4gphz(fJ*bu?`7KZXxyCS z0=bmV2b@jZ%6Xp>tR_)^lq!EG4Pz;Sy zYWo5@z*QObQ-}ryIbcJ8tn6NwqEU^$NMs=YAU8MDQU!+OROFG+ITvOIXv38BAgYqTPp_0HqTeB+v3(opXGyGKm5&pF zTjB_P=N&c}|FWQmmEaS%3+E8ZNLo#%#>PM#tgwFFVN+SVZwSI0lqjx&ci)DwpMpMf zJHJ`15jk?v+f!&NyrW|W>3q<2S6jp z#u=;ZZ8V!0&d4ld5*0P0Sq8#GiPd_J-zmu}Bt+w;GSbN^b@o(t%?waLQkTdw)38>s zH7Br3RTIIUYGatyKh2PR8iJnzOT>)mYF2f`{Eqg=`T?-Fb6Z`AUL0AB3CeD%fS=#M zNh8QnH+3|u|D}6deW)TK;VTLnx?CzbXs1=k2iR$AJ3-9ztOuc zqXWlfH9x#X@am?Z?Ic?>!XA52W)N>4y;BBC8TrK(IfA#7Ql5D*5Gp9JS%F2QtH-?l z%Pv~yFu5~2gG2|w7Y)na z)9oc(VywvsfyD-J@<2(HZfal_&1-ro%Al&|AvlC0LP~`gdB_Dq%q!M083`#o$E@3B zcA)&FSgzWrc0CD1Orb;2wtdYrOLZbTI3_v<+^2(+4E&nb*uiX3 zt$AtL*i0=j1>b#_34LV9>*`)$ZOjMnsH@%tamBoj2OBAH3F%3}(ipuI4S_`_nh4}{ zo7lk&cB}M}a%1c;x0Yxtq?H}w7?80w(h&ZTdQ5q?2#bu*_9AJPTbcU|z=Ib2(CP~& zgV233CZ^p$y9xc!4uMJZB^*Ge9&%dc4-TD#cgZH`j$_rrRTor?O<6x+C|Fkr|3<{j zv8US{iO$V)7mIOm-5`zxO6~vJjmV8&;2okh{0%O$B}KK8zCic1;*SIP1d&Bal4M?s zo9++RL#>I9!QE%na=EVY+o29w;#JsD`P)&k%cU4Z2o9+leT6XwOW<4sJ=fqs<_jTKs&4= z)P41lBw7VRWouO$O>mdt>W4x}z^DaxnMLclAs$;hF%{gP5@W3q{Ln=~7g~jM4&!Pk zLe-^)bZeUAUi}B%wE27ok%%>J>pFCaL$uyk=vLRx;B(r z3wW_8bojpKDEOuZ>9mctNrzQvJjLOf`MAUJpJyJ z?KPd)digt!s_2Uv#lv>qirtOMByTWT>mFFW$eb7{%0J)PV_gJ4MVloF*~oKL1$Wc*?O4-wc^5Og@b zUi06&qqx`P3o1rfJM-~AQGjG++>XGuti~1m-YH{VU+_&YkK_uLlk+{Gf@nz95L$um z7HM$xxsQk}he-BYkMcsPSVBcC(_7fo1|h)oLyL=VXa^H_FIisJ4w?+=fnha+AfF4c zdX)0(7nEg+8Fej^G?pO`lczu^1e==~+kEfy+D$csXt%bqPJb_&5YI8yp zBEbX1IFxBtT*HLQ#uS09KNZ&+*%B!7oUJcX`ux(N=jPKhN|iGLOR?NBvDexn2?!10 z^4s<4tM-`4nejHtw9Xm>*V#UwdTvfhp3;n0n1^q|-hf-5a(amgB2!}UnLj_+==r=; zV3fG$dp4c;`$Ym#ZyhcOZF0Q((V zK~cI~E`>oo1ggsdm9fFTFLX|}PnTTO9Nfzm;^*_LXNrE5lDXGAyefu;uP0 zHpMbdqPzr0s>NW2)S8}1ByS3RYr`OX)GW=Ysi2K|Iard4@R_>=dMTsZ(6kJ&hAknO zvLw(4PV46prA1<|=i+6h@Za{+G$|X~swLG;pqcQF+An-iszZLOVFyvErpB@aP^FIh z93y!L4i-FJs6A=k=Lk&&gC+_Uvqp2QB5^pMl3NeB31t|H=9BTrH%?GO zVwMD84~meBpX5Sp+ZW@%5#$HJ#ov;2x}U7JzFdE-%wLj2zJ*mV^0)`U{bD^kbkW1Mvw68?f8YuJ6NLe_CrbMHR>NJY;s(Rc-`=_)&+iZ--_7Ta(=KSacmAa? zAyLN+*?@1Phd|4CtLgn-1HvCzcd~Y?f~e~oua7TcuQr7 zHo6EO#yYRyH2t7GjOQ|8K?RsZey$#hI%NdspIy{~(t0NVuq(SaS{L?W`yIy0eJ0}T z;jnbJ#>AeaO5lt>RZV7$Rg~bN2*_Av8)p z$GXWTk4VMsNKt~u>%nzNAQBM)GU=x-^Zsw7v?~U0#}B50&INV8?7zzqT+c;Lev!?I zB5jMbCAXfrO?k=pRt-0eH8K-mBVf+iHubrYU-En7{<~Zuk0*|pknNj(b(aq<-_Lrc zNRh*5Gz`qLqGc+qmflZt83Th4dL0aXufe7vG19vn6~2SlU1}~e-<;kvqRhvtnyc5) zC>zi$8#}7$nJtwNQHV~leAM(X+~wZDBIUhqkX0xRP0kDN4)h3)R?VlTfUtwID1rVE z89m&HpH%&G701`5ZIJM~K2;9HbA&`rJBr|-%f-yhRMl`Sc=)7kwB;TUl9)P?gbmeS zC4<(IToPp#&7OplwURxcJ&qiHT+({vnQ83-JHw*E82Y^i>#*&4#gAN1MaZ%oFZxO6`>fx1Xz~dI2oJ~~4xbO3sQxLjHe*M;;J8*QF>UFpss~O7c2}Evxq{=$TOwIr$ zMmdIWa5vnORLZb3#pv~^NcyM{o(P5VMjRbA0cpotbQJqHwvof=>qF-SZqU z?QxvN-a`{d#C`UkzTChIIefaSY*ClWQ$(|2_q9$)1rwOj=7Qz^npqW!nS9hT-)$z5 zBM(U<{Hzi_FM%ft8eO?f7!?~bKRH^|lMS~d*{DCA^1iMc+Mh_@IdxRL0( zBJe6$M&~0y@ry)=d?w zf~;89Lr*Ek14!-wBRBDo$*ZH5a5@A#=A;a3M0L~K!! z>BMF5q>KFUYw}u);zPBul!xV`M3A`W!L1aO(^y{OaFsvkTLOqFM$JHFLW~ibdm%6) zZAhab#Y)W_anTiA+(8h*D&tQH4&ppc^3X=uJh9O!_1VI6`FI?Y>=fadxQ#O!gq;!X zMMiFj6HinZ>t17WLB9{|Wz_SLtJ9Dski*6m!UqOtH1#^J;7`C}E%>5m)E-O?+4o*#eX)zybuQ z0f8tGi3t|Z07%1B2-1|L!5@VLIBYF@m>ITGUKY#Iz14=dgLSP#mXO$|k!@K?!lA{X zj@qu9wnmf+78QfHMJ7rUfsU2#KDW2%+d^XbB35r4h*RW`00@?#K*3jKLlpy2I048N zMCM=1V`~RHreQcWr*6}sCKyUXVB@~wfTa+T31^LfRmDaIQfoN0X&EHYAKLF@fDrMy z8aC<;Do1x3eNhKfm?B9rnhvQ+XPm2WL{gv)(x4*P>MJ(k0&FDmNY{Mxm_F% zFbt^@mFaU+d+840vn9LhezRZe{{xIQ)KT_M<}F-fSNzKRX|vb=$DVNW7y=|HGC|xM zYzfTRadmYU419i7m1KGMH~06Pf$|2US;?9fE#f}`Qw zL&&2itzPEonunkX1SM3@xbFR zcAwkAy`G%KRI8d{*)`WIs~|#ki%bRoEO-^=+{fbk!|83-8LD%I7s7l7Op(Mtp76?e z#`p6@C((Kmcfkihuf<3mDDZ%eIkhTj`t_JV_=Gz=B}F?utwM?dbzj01+o`XAiE3gI zo!BnMYpG1{N{g$m{K-xc@=Qv+Q02?v34jVcV2}akWceP@Kv`>|T*Ym$zj5dCDS+>) zH|u6|((ltgHnoQ2%*gYzAt*(vrml$x@d#I{-NnAp)t6kK>v!F^e`$1Zbq&!NC^%}{ z{(}%~jt;{OM~C;$@;_Ys1dnN6?^Z|>e)2O5Sy9pmF2l@=ZUi{N;&SV~8<&(*Lg0bNy9 zv4S1-w!jgo2(~k6hV-F3k#oMF&`)3q`jGKjDlm#?!p?*lTPbgA;1w##%XWcsUfEJp z<&Kb7sKig5k&%?N@~|Z$OGzNbE1Yp((NT>p5I&X+qv6~dYxkfZ)K|zL;mx;dA^15gy z2L=LT*Sib6QW?=eux8s5xBZG7`wV``tXUCq2|WCh5)Oj!RYmq7y;f$?6e^qVUKxSc zJlE$3GV@k0ebBxU8AsqnPOgx|_~$%%v7CtbB!sq?=AZ^e{0NeGFc54v1A|{5r~VBF zqYPqYt1X=L!XuQt zy3#D3GG*=E(S?L=v)plQXpZ#v@EDA~_+QNFhoB@yb-=HVyK@!7rin(K(X-rId2i?$ zUcxM4U`ho+&kjfK;2VV^Gg27WS1yyi55$nk=gQ0w)c^4{z%O^x@@o0VS6`3*xC#T> z`9ab= zUlu9VQreC{Y(W5k|BZ0ZyHAZb$9F#o7Q<+pTI56Nn+4gg>hOS!OD|2H*BkWG6y}%= z5YTevW!$O&38I7--4b^S>9BB5>^tY^Ac6-{ufq`4!M{vQ0BXAjOxhkeGiZyze>|)O zFP(N(X`lzh!WWOBy>#6BB`d6OU(>@cF=xWSOc85oYbWwaV)_t9!*EtSuCnO%uoT`~ z^#JJN4IUOo)(a);UAN>xsig87g`& zaR20jg^l~}k!Bw^@`NKa+_@;<;IW z^30g+;y#E-1j_w2->bu9%0A*+=VzphGqtHKCrHw~Vm(v1p0E(Z{7j>?3wv_);M70x z5hT**A3=tu-tN2y9(8O2)%SqP^=}v|hW>%;Ic(3MGB>09;@^|Kx6Q(&e+$U`_=@d_ z`T?6NrsK7X$s;8Lc~C2-qMel)UTaa zA?btLE7~ z$qTYqP|4eFlM(j=!k7fx;7n<8I+7L@0}QSLz3;KlWD#8zoQwN9VJpqL}Eh4MQOj`2<)H6F>D7b zCX%OhyI38dR1Dyb_KuQ=V8)xF>ClUuWRw-7!}n{MhhiUP=L86w%@pNxzGu_L-w^6p;%Sx!i-m2y%nY(`-Y=p5j1zZc!lt7g6o| zRk&Mpv^M&V06|8nE{^tJo-GeqpPjFfTb0|D-b2NtPOH)%%kUJ+7{=d@T&BIC0@HFzH?slJfOL9+J%lj&c-i7uDfR$b1cx9 z@znB0*AcEG838wsH|@VWKgZYllvv5fTqD(GUpaMOEonS#P?~9S^g)4^c&XGyN#FAQ zlRo+8SS%U{?tj~BMY>4hpz%93TEH0A{@YeFk?99abI(X zfJI6h;@Bm=PhZ9@KH)U)4xc6MSw_7FjHXXs2U6{#wWWGf(-wsf4A~IAntaqP3&yPx ziR_bPkIh-$a6bvGtW(?VK}Qpp)ZUb(%-gaSO>t1>3=i!xe)nwG#H6OXy;9vhN(c5A z91v6Eb-2Xncf3@+tko=oGr&V`&jN)Tvfnsg{@n2JAjjt`x+`M0iKo7)_lon9YSb}n z`~yj6YLIj$;CRqD;kK0)>nYamc{~3zEW7cO!EILB=ZaaluIjvfaM8$y%YP$Ncv;M&H3+DR;Qckm_&u0L&u&o%P``c)>Xxtjhw640k{WT*4E!``c zzr-i?T{)xq$Nd-mKQD*x ze@O;RiJZ~;v-*DqP&>N>IDx9M0nr_u1Dt$7xDx3A}LzyMr*T zKgb{mN1nlMzrlCUV8`F!l3zF`M(Q9=GdN(R4i5fq06^Xg)^i3sxq)=ZKY{P4eVsjg z!DeU>R&sK8a0URD3m}fLkB{FO4E_K?5dQ`Ur-SeX$Nxgp?Z3bd4vv4)cW`j~6aGyu zuqDWZhDX2+Z-=m75C6%Fk9QELyI+MLypp>6>llG|T2O~`UVeIKFewOc`#N4V0AX-M zA!v^?$$r6j#O^^lrXURBd&e(wwKp{u{T>hEo<9Q;A(H~iipFVnO7Gx~Gx zF1mlv-w$^;F$e330RT!I>|u5`cgR7QHo(jHj31B(D0jHK`dR%i9RDDrGyZwO`U@_; z+G-#S@&mPT_18L+{S5zxPXGx0;tiVU?xB0u7UUCpKhWLeY%YTOfj)O~_{BdX2sgU; zs{XDMsEtd2#TjqE4CytU8j zxj~pYAlUf#wlIZ2f0MI%kWbi^8-dr(bO`bZyYA_5`5Fj={J?^ND}Xwn0dN9A;Lj28 z13UqbciTy0mXH3q_g9l#gF3HY;}+OM}RKrmQ; z`e*HLZAAdrUvGndweSKqz#e=6J-{1$4gz5pu+1O6nE{``8jnAp|LENb)i=74Rnsy8yfR2e<#i$KSx8 zz+c0k!C%3jxA%zk|C=WCffcZq-!$a{YVp5F4C4oB%D~iMiXe56GK?O^42Zy_!G2U> z%3#kjV6FP^vYg5Ohu;6IOn*uM{7dJ*;}MAy;Sn(qsSpYNy(Rg1a+yEm{iV_0wDFtH ze&f~gPp$sJ!9V-|*BcMO8RS#%cV7R*geF7lpaak@=peKW+5~VyJD|CV;>Qad7mq)2{*c!JtU2rR%nAa;Ux;ssV}7Rs1iFLfFG2(Xs{r zL|6V*$M+Ik4txRNEs;}@fADYgU}raca5bO+XA~2_4)6eiphS{@EFcf40GhyMzyL4- zECD;v>fAwl_6I_MNZ=Nb2&4gbfgB(oCukbKBf zNCl(@@*2_w8H7wg<{_()EyxeZF&-3;6pt2<4UZpB4DSM-DxMym37##U8{SR4aJ+cD zJ9zi;itt|IHR5&Q4dcz=t>AsbJAeXE5-2^C3n~J=09A(?K&_yzP=9DNG!>c)ErM1- zTfmW?g04Wfp+8{+Fd7&qOa!!H9hfQ133d|}4NHgR!^&ZeuwK{{Y!!xtVe!fES@DJN zFX8LrTj0Clhu|mT=i)!ZZ@}*ZXVYi=LjnQw5_l3s5Tp}4BB&+cEU-* zFN7yVltg?)mxv6AoQcASGKfluT8PGoJ`zr9M8QX)N?}J4PLWGdM=?gRO-V$_PpMAn zKp9P0K>3<-mhym#hDw6UfXas|o$5K&Ak`){oSL6nliHa&p1PR2hkBg`O2b2=PUA!q zM^i%6NAsDMfL4H3m)4Uujkc2Z9W9cMnogR|j4qU}fbI?53O$sbpI(>Vn?8fSmi|5c zF#{WeDuW9{3PTmcB*PIS3!@673u7u{HRBB9F%u_~CX*LaCQ}pBM`jrFd1gcA5a!3s zeazb|v@G&0PAsV`wJZy)c&z7HjaVaCi&;ll57^k*wApU3Jz(o$+h(U{S7G;LzsKIr zzQsYqp~T_AagU>e<0~f}rz)p6=Y7szP9zsAmkw7D*Hf-{TqoQD+@{>I+|}G4d5C!~ z@VN5a@^bL%^G5Q%;9cM&;=91-&X>nGz<0ziz;Di<#NWifDZnV8D-bU5Lg0fS znV_=ZO~E3;>2n050;cGMBQ0a*^_y3Xh7j$}^QOs^?TaRbQ%pR})wBS8Gr^Qop1grQWFl)zH>R)p(~# zt!b*6ueqeft>vcmLJO%aqaC5$se`Yhr<18OtIMYAq+6kjyexM)>T<6hsh+W3zTVoE z^H=<@wCLmMU)Imo|8SM>s_)e%1HeGnAlu;MHGyk4ueBNy7+y0hFx)VbFp4x9Fs3oK zH-2t>XrgA4VX|l{Xc}bNZAM{cV^(2yWUgVJWxiq|W)WpEY{_itVcBd2w=%POW_4h# zX`N&J*+#}D(dNCafNiMlpdGWFx7{0i3VR3py6gDY&96Vdj&U$>C~`P()OCF5h;&kS z%5(bWtm1sndCNu7CClZDtD!zEcTejPlyRv((`?iO=N4^KjQ^&K=^T^A#&L_0=z zBX|(;h|e+FG3B?2Z+YDsjTMj0irtShk86o%i;sz4PtZyo|c=2Nq0&gx-D`0{%zbH*E{brWHTP$CAjN*_kE^vW_cD>R(RHW zwtjZwJ{y ztAE%)(~#N-X$)&bHn}&gG+Q=LyuSRpyG6dGp;ffCtc|O!;0@iIjCSJo_;y@Jc*jBK zjn3^Zx32YW`|iaai=OFT!`^p&dVO#EwfcJoR0lfVD!y$SyfpZF=)zFbu zS_ob^S&aFB{~`4w<;UD5)}^B5bIa8$vMX;^HC9K~jMo;|oz}m73iyQi9KS)fk^6?{6L0(&?Ye37t-$dg!- z7(+5fT1Xa1ewE@JB?09cRUh>;niN_;Ix~7r26ILqrbOl^EG?{)Y}*_}oV;AB+}C-c zcnkPm^DhV-pJO?%B;+U@CsH9gCblQRD5)&vB%LNxBRe7Y{UX_=^YU5>j*8Jr`O5Vw z?^M62VKo>vMYS}v&2_wVBQM|4dwiuz|IO7AgN17whWo}46H-$KGgfmB3m!`WD`9I% zn@hIpc6#=v*PR^v9HX6XI~Tgtxc0d%xFbCYy*Rxu`WXBA`K8_{z1iiz6mSy67%UTF z5_&W2Zg_RXSmbUrB|<93^j2u>!?>>ajYQHUsbs5^*wl)&sdUU8{tSb=VVNaaquIMT z6uA<4ruRc1Jk0MZ`0|MCu}q=OlenkPizbSXN?D(&mbsKCRg^y;c=72au8Of*{FQc% zO|5@jO8w)8SB-5=JXyC4IKvQ2fHPNx6mp74IAIHp`COckA6GWD9D4 zPkKM}p#2DrHvIYUcmpGP8iZ}Z;eL%j59Ae|C6o$U3$w;2#;+u>0CzRjgbqZEM8m}K zBxOirSgBN^oUf9h8mAVb?x|s`c~whATSA9Zm+~@j8L9W-N}vAAtJww-*BlLXjl_+a zOduv(rjur^=A{-Hmf=<|)&@2TwgPrE_7MB;*B2cI9h;m=owHryU2nO?y2p9MdB%Fh zdB^(1`NsLh-iW;!>mM5s8+a=yCO9Sp5sC`D#e{;^kr7uK-!LJFQ&z36&5UHPTz_!Vgld#zZVYQ0f|Q)56=eDl56rQizI+cx!P zz5Q#)cxPo-YPVaDMlWYCrf;slZs5*ak3sbzwxPq}v5~S-#5=Pwk#X4g!bHtv;*`y_ z#0>t-;`^G})H#oNy#>idjt?{+DVAuKxmM&?udijVPk$ENNZ$muQoeC-kA6=<8vYR6 zCpkbL?f(3FvU9rkYy5?PUWguK4$m5I2kHey!(#Cn@rwv#2!_EO?I~dakrL4gaT19n z$uemgnF851`6CJ=N)pOGsyo#7G!nEh+G)B{`cMXaMh?aUrXl91ETOChY=Z0%_63eQ z&I~S3ZY>@j9xS+zYUa-s2o$__PVgM&{De@caF~d`D3>TotV=vo;<}`$1zmR@uSm{%hT3z<4w`QdlQ_s*K)o9S<*_`nDX-iw{`!-ZNX$OC&N|$YS zL{DCCRbPMq$ASGpiXpLK(~*SH_A!ES`-y=mz3H|059dM_!aqD)CR%;@Deud~x1imO zeU+at&&L0^+~1i`Adm%sQf1H~fPTZc2mp%P0Duq71Co^jz%?=eFu4fenS=w7rDgzP z`QT6g0Ri))gkUa+3E%^yz)X!9;045jv19`<0qjC3AQBK0NH`b+4nYp^Sn$;FJn^#e z+VQ?Z8KK(H5NHMT1B?=;1&ab>G9(y>xr4FSX97L~cY+rLyKotJ6uh61lF){*g7An) zhv*^E4`N;7BH~jLE0ShXM$&N7B{B`Nm*n*1x5#%X>?tNGwJ6_E$x_u&i&9t7h|$#1 zUZm}&)1#ZCccVu$++{q^*vI6^3<0fFjpZ|IDw{aldv*keAjcGEG?x(9Ja;nBMV_y` zkN6Dv;r#6a!Ghv~+vh6Iy9o&heHE@02@t&~h9@>6eqX{_Qc4OcH7)&2CS3NK9KRg) z!tBM`OLyeG6fP^CS0YvVt~{mEtolSPMLkgCx~9ICy0((eMP2F35_;lS#PubvN*c&s zlQ&c~(ls_Vu{ZTGi!#4!QEJ&{HEVrfOK*3{-s$=shjzyw&VnvZu20;SJ=i^+yefSF zUu(aPnhNiMAof08Z@`Io_q74lejyw_h2A;5I1u3-Q)z%l*3HM?92Jr zi}fFimSa{;*4aNTZ{%+pY~jAW+_Bh&A*+5^?86RfjvRi{9uH#Tu&Te-4+xlZAOSND zoPZdh3XZ-HkOXECx_~tZKA0OY0`mYBkXbweJP9ziPs3}$+lF#LO`vJeUMLoJ2^Iot zf}!!{@e%la1Y`te1V!MeE5dKXR|usEQwUdyJn8iwITH?O#m$+?Nd5=aI{0g2=gstFcTls9P@1!O%^O`D_c0b zJUf=7mouHqjGKoW#nZ!^%jdWT(GQ>AxHI_3mG`(SV*Syx^z2&L3fQ_Lo!miqW)q&1Y&ndyV!{x+H-aXQz!wcqp z#V5yi^@jM(TmDmlf}lrQ43!JZ4M#`XMD-wqWA4Wi#D&CvOLRz@PcccINWXS_I>Ykr zN|whx#a#aTH2KhipO1bN?mqod{PP*CobLJgml{>huaatC)h{qh$~*_QFwoNw=TVBckT z9g*p%S3jor_712IMUJ%54nHG~vrZ~79jEWHUw@519yt4{0WNUvUk3AUu|N@+HQI*I zK~y0(AVrY(V2(!_F9@#^ZxhN7b%B;cw_#GSNZ4C^dVE*>*97DQE(9HL7I-+g=Tssr zAtED+Ao@=1MErrof@GG|nsklKhYUl0m*N~nKcxp171bMRKN^0TRoWstH+o6>Q-*HF zR3=kqK4vt_JJt%eBz6xD1I`Ov{M-yYq`U-tP=0&?VnNz-T<4{P^n^V`Qba4oro}Om z{8EO}(K0V&=PwXml)L02pQF&Hc%aO$VxgL*)~SA|DXitL{ak0~vXoxbmBFiw2AmIaWB+yTrNfxx07_cyW10`7HV=+<58_5AX|I z4Au>42@?q~j%10-MbN}#$I`{+CvYdeOqNUOPcuvZdMD;CQ)X?p>b=%nnY`Ku;`wzC zWgoQ_sy`VmvMSyx4KE`rFMcln;(cX6HTA2yTJt(=!?UJq&8IDuZFcR{9fMu5Jqo@1 z{V(5o56O-|M&FG+n(&yCnm%}6HD|j3TYUJDf2m}JVKroJ@88ao&X5VfvxA2NXHb7{)%Mx_zn0(5n!uVr;+VhR!N>*lL}vwJdH=Un z2=qz-t`ndl1XGc4D1;lpqk=%GAh=$D1H{4yla^rl)#R)d9u$U804F3OCIJx|C;>bO z6p9Cf;^Utk9zvqP_W+CvpPEZTm4L?30nUAsR`OQnQ$ilKnl3t{2_&zSqkk+BF+Bq# z6Eh#bfZ)0F(lWAg7cO2>*U;3`*3rFeY+`C=4yJ3JoLyYq+&w%40)v7>Lc_x2;u8{+ zl2cN%vhU^O=G}jgUsPOD`mC(H;(2XdeM4hY^Xr!Gp5DIxfwzN0lT*_(?`P-c7gpES zKYiZ#vbpsY^Xm zwW=Z9;U*2YSHU7W==F>`%e|CD$UD zT*v!Wpm=ytd?*x(Pk;{=0zxnoOF%$KO!%u1|6WLc74ow}@n^w-L?9py7z_pn|0zj` zNGSi03+^Mhv7y2(0Hk1~j7J5f0+fMMcCeu1iP_gLdoS%n;5Tx?wJt&+3rO zx7DK^6zJI5Rfd6Yhy^j@W-lL-?#Hait7+9rSKsbuP+Hp$Y&3amBJc~SwLgA*`@EeB zC3gqQ66&=6z0?E0w~z)aUPzqAqBF1G8$OU$)Rx1UHWH}mMdCp&C;5c_rz?~{Mp+vN ztQK}S`=PZn(mGaI$CY2j2nSIpM!%(%?T*})8tz2o?FOw^O7(OA2xn!6K4~ls@+j$` zeCI87!@Y0*HM#HP7)!28#ih@FA!rR&VvZz1Pn}48eM~!zVS3s}e|ybs6XnT}8Z< zDS`M?CH}L+-oRX5?DC)_#X%Br_&EI8W+5Emm_fZP`e1cbzWcax9j}{3?`_$=1SVcy z|LmBH3T7GzQswI}TAMY*(Xw8-@;r;>*7fmCEao(Byr^66+vQL5qX9GySS#!tyA`6h zQb>Td)|zmhkZDATH1uYN-q{c$qK_(1bD-|y>$Dd&I+6s^m&4o3Ca^S-!f}TmXY1!8 zS&9Zce2_RmqcxRosxtoO2R3^nW638OBwWN#Ua`D-;&w}geMVqA??g_g)dfj#e|Q$3 z@s3iZ1r9*I>!=Nz;6Vu@+Y?SR#kKU7rK29?Y7r;6EWb*0#9R5H1I<4U*A!zB{HjX# z6YjExAh*E*UD6o%$^{uca}-p8X*J6}5 zCUJl($Gn$OL&PJ7u6&u9dVgIS#n($|yjRRL`B-CyIuqGcVeFo^a)*wm_hkwQWo$XR z@-+`~CX-S_iE__T?mGwizoaOa`Qg{6Xm5*FT-!}8tosu0ESrY|*nGVYD2OiI;e0b| z<8i!Kv2&sF$lh@@DxW$B7$jj{HyB75{Ep+p_c*_f`)j3q9LQF19< z8Q8Y=sw^b^uocaiWMK)@8r(tgl5babGWG zYUGamxAL7wQx`tG5Kh&3+po=34MjF3bhzpJA{OlS)<+X>@jZ-|>CpY&ptFOWAbTA4>lUKcKMuV4aD9f??oyAs=s!p$dh zTX{>IvpnN`HG7V^8%+BYGoJ^{YBTii7|?~f#N z_``vmw@h7qkuNGki|x^QCw!YYp#Eivdj}&HPqW;{{%4P{3>g_So0onIVOSzo@P3Zj zO8r%eVf*XYcN}EkY63&zeQTMSo59$xhuDVnGC#1b3_%2^E?#537yD7R2Np#w&FWmk z$?k_7ICMedSBBa}d^G4hj@%Qitn6gU+55cc86w`>5mD5iT0Ccd1>t5tf5H9sn(=BB z$q5_XgX+kM!|Tr%btQM_V|rj;;s&htaX?(*5B?80U@oB7{y4O)dXyxCIy6`r&F@>Y za!y9i6vgqNe3N5-!}-Mgu-Ge0qjBkK$j|s!TsI$;$V!X?QHy2Rk;2-;mvxPKD?98c zAJ?oUClV%DK<`anzlL|S>OJQ^u@~KzI&?bCJ9xo(pvcnIqIvpo{>MfWzeSgX{9C6*t}(e*kJ2dr0?mLA35b1_vg4B)*agIx}?^bxavoF)`V z@Mduxzi)ZF>qKa7)1Jhad(ymT_^CVn@$Ftc;qa(8GoKscn|}1qn@jNCmiR!N_qofq zGbTtJJHk;%*SGVoz;9)g+qzYP#eg_#QiE?Wy#+p$v=ID>bY;EN3NdeR=$parc1ybN zgIf9v((G}Hg33tJC23Sr4@F8Lb6|m3id9mIf@+255^Q|CL0&{oujRcc^H-9==-%Y+ z*(-NG^|K1^3FM~5ZjN;gPAd4J)Yr_aSE6_Z>?CJIL?fwC_uXss#SVF!Vi}M-eUp5j z8iRjWwjo>f2pk|fnQ=mwYuc`J6xkyOaX?+(DWR3$=?@%$G3ALKQm%_V7lLHZe_qU+ za|7T&o=2ChcI?og{4CM)$o3;Fb(FOQ(y#ZnoAoQha?8y|W|x`D5(fY7W82Es!53Pb zp@!_%O{W`SrovAmns%V;h3p?Ow#{hkqR^kwEbhmCvDJ}R{O}t}cFJwFZ;UfK%Vl0E zTKY(M3C>BNIDltui1ctI<9F;+*iv%FpX3&`5LCvqx*n z9QGa|vn}v6g{U=q0;|&k)yA4>KiB*(-Hk`a3zmB2Lyc6dT64`0TVTcwmJjrSs2LnU zT6l61F`n=Y2P})>fIh>2)R_0O^Wl~2HSNjA+^F4tdqQlF9XGmiO4yX6)3(VSQBAH4ot$DcX>u8t> zGGjS~-+^o3HK{>Pa(!DIkZ5rFuwzqg3b70NlC>AB9myQ@?fjvhW0pwU{FMEQ1}aZT;4NS545`?clE*g;M3o;(i0Z)SIsR^v|EP$hLZ%&N zpOz|^zeH;fv@{%LmY@gB-g}D%e!S{Kz;^zfkVcF9`*#=kn7f+m#4DO<;7gAk77ANs zwsAnMT;FnPG$-l)eelPw08qJ-utook$|OLQXD8aMNxI2M~L$ zg2~qf1}upP0{zhh@l)g#V(yI?Hm5ZF5rDvrpHd;=-5e>=f@qiP-zq|heFS>*%?imz z+bdQIZmUHU$h(Mmk?k)p-sGFjY}*l`F6T=va--Xn!my!-1J-C!LGNB8zuN|1bb92s z+-a^KT-!s_#Tx6hMj;1kUWJ_~oHru0T?-VH7mhYs3)exOvNE=KH(9vMzPoLhYxw&Q$>9*o7(^_C!8>Om16?RzX!_t=7 z>!QRd?4+If(J6yv(%W|;~g<`^tn=Ik*r(N*z z)b7U9$4XrD=t+a*!#sP^Cn)Ea?~Yp{6`QROL*8x3@!0Q?$X>M$HVCjW==X72Gf0m_ zpxg|QO?QIC2&^%D$Y+HwJSIH4A#6((;d!$JdK1z{OqDY}JQ+jyCW&{mTRrSqPy+p8 zX?C(mhF%=7z@d!_e!BV$ZCVF$1`hBN=Vyy-&~*9v zLkB*$kkn(45#HEP8k%j2GLNa2i6R-h6!mEd{w8Z<`A_)x`zK&j9m#`bR-@bY0vak z*)@CZ7BU3G6B>6SbVB=0TNOI^qiwmtm&0=}^27HbCpQ2(U9IfWLI1S{g$i!#AU^P; z8XDwXs9f%G%R2VB3-E>EfF?PH6@Q64a{%!Ss%iV%Iu1w)d4F8i8`jPkTJ>X6jGyVi zFDYPIkJeJ8hCM25-u$Kju+E!*!k!ACJ-;35&Ft2vQBW*xbr6Y4zY*EUnw&I9^gcWs z^EVlp&m?9~>x(7j`?O&c%m9s)pz?bRh=1k5x zJ1%aPITSbEN_BK6x(?jSTH=5NO;q`uSBoJE-m_d2TDp;K9*3or?+`MKNbZ$vSU_~E zHU{u|QjOe76D0O05Grj#R`1Aoz=9jw6_7UK-A}1#x>{nNpHIiXrl1)EtU&BlCR8{$ zB1OiP-G3?w$$KbWLOyEaSU6r0Qce)tKuCM$skxH2V4S>kUuOn?rcDt3#NfVs7=lg` zxUJor_ZscIBuvV2VuMj^mOB~HIx#rJ0S}s;5$YT0mz>^v_@SmTpiwpD;7S(1H zo`yIv^rU1htiKhWU~;q#6}mq^_w@SZT;A*1X2qxZZ9eqrOKkBN(TvMpX%Thq9puj} z$oldLcRowpj_`Xx4AeAAJ{KosHJ{(V2Jg3W+n!&)&Cp97TBn0ZIJElEq;^pK6dj@v zqP0n2sQj=6iI5^+j}F+AQ|qH_=>b1x|x^u z4h7wIx|P-Z4nN986Nq$q89my50fpb5hpmu2c>gsbwD;Puc(%Qg(*Pr3 z`uzDPf}EtLez&Z?^j`$mHNP}0Bf75I>Z`89Gqmf`)taf|(Cxs@YUdf#;`AZCVV;+S zlS5s4au8Efl@sz9C1O<4b^%JS&yLJ5$&6hbshxlk35)QEsPJeJi}_U7G(CFnuENca z6g$uO2%GN6O56)zj$Z;8_bF1A;mYoXsW^Zfql+BtRi?rS`8*3P>R!M4I%~F@Vepcs zf1;fGJVxa!BecuK;qjB%_w}HX+c{1jMstQ*tG6MSld9U8JdW*3rRC&u$0HRV3;I@Z z-sCkJW%lZF&SX=6ABGmqL+ zyuCtdR9gH)RZFe#dD|S?8ZKS@J6EHT;GEK!#NuJDjbrS?P;kxZXcmjmV#AMzkIX2N zjwI~$J9e2w8SJSg{MLp8mI_vuK@ZZ-X8)DBEJlVRaf!KYCRr}qql4nR4{tN)r?5)$ z_R^n&T>@DKMqb|*1fgFH2rMFXUZID%G1{|%kAg$SSr;3#OU6oh-9@u+WV%g@jl@5^ zo_HmY6Fetx`7wY4vKHZ|X<#h9Wn~WfH{8UjFIsi|LEvseJMAkR5btIA`b4R~i=%+- zdA(nwxEz-xp6bqBp^1)F$6*|x_P7-X#H8SW0nf5d9PpE;ofHSW(l5lOS{+;h_7G@` zS{yK5R)qsrxDluY<-axZniPCOAqOroX=10u;k#Ho0WkC~#?lLS?4SGAfhH`(1i#@1 zCt2ZIb$16D#uUZ2n4|!MAL-45N~pn|1rZ^0+jFKOnv<8>Ithz)9;ypF>P#5^ zzzsZhQvrB0fV9p~6Lst>{7Okg~W{09}q+V2${wV8uUu&p|nydLy?ve*Rznz1` z*05P&C)%l7PoIb=yN&Yq|JXH-5c>Aw1rFd_tBJLy@*VZgYDviV$rF6X!>h#ifN*TQqu1O2o0MkJ=E;!(+0k}8r1bzE@J)*lW z51XJEf&(BlIN;7~iJ=O+-+xDEFQmJWZP;a1FWDebrlRhpSFP`znakKc)0U{Vw-;^a z{BGRP*?1%H7yEf0$%+FqWxrs19&_V>slLzP4l=CcFD!EWjk$&`+H3Fv9Pn2bC;rNv zU8d%LPlt|nPuqtykA|8jMNb0APGC|X%|>5?kF|(T1}Z0G1<-{atJT!)6>F^`qTOEw z8sisBtn_T93HV4^rC46eqW#A=SR%kDAH5|}dVMqC9Ajux^TXda8`IUhZ|yszEH2Ci(_M>wEg5DeB# zPV+i8GeYHY0MRLUNxuevGhs&r#+wxjDXF=TIDn2xLg&)sEHORI^JW52LwHTP*M(gpHY zUPcV#fRk6tqz-bJo^dMc7%BmZpf{ydBpq zmnL^Gk90d{W+bgX^%&6~O@vaaJkg32M{N|kZEV`HO<)YY5H~lp+OI66c|4mBmLg&q zq5tvYx!TUpzOkdzYTX$s6hn zvy!WP>+{#{;y@a#qF5ujl}OQ1;DDvbE7u`vq<7^(MAtIfU~3uU7^C<-6={HWF_@3QCLhIhAPc8D(0v@pp~Bju zQ>tA!VpX{efl39AT71oE}>6W{lMI%+*d5! z<6Tp<;i~-LtobY_wf<8Joi(8-qpys2>Ej>O^rt3YI$sWr!4H@Ff5GU|*WA*8Ah$AG z+qngq(-A89KHv1@y-O8B%=HO|dXFKFv~F4Wp&9>RCFAev0wQt1iTsv5%Yi{^0Os=P z(`Y8oMkUc1&gO|~Z39(|0oUO_;k zJ2|KuzJU`jl%fkk(J*R!RV&wBq+b8xTyMtb`kF!>>i*iubX4xO<#U`UyXt?=&?giT z|No8nU$PXDTPtIU_GDP*NSCa!)q(i^LSogZCklB~Te9?r=cGy}@jYOKw^CzO1TKt5 zF{p6hrvBa1CmqRy9Lw-+XF!{M(MJ_qS`9y2l)i>=Qx&+ED3S1?H~UtFx>Xk zIAAl%4?}N_xXtl5DkzG9LPoUI>M|IvXV4>P`E+>Ew^rC>2YPPmF=ZYY<9Xh&@i>ej z*b~_M&dpEvGda_mMQe4XU9dT=tB@2chapAB@hhDR-MfNpW9O&~;@>sB?;ai%PcTmU zfUNN;X}?;@Pj8Y&$OnXJMjVz`!e~i>x8kjUUgOF-6UVJ5XyrB4>t6=qYrnuxL>GA! zZ;k?y2Po(&xNrxGEmDB7`kneySzZ)J3PF4RZ5%K%bu~BNNR!wlWu6(5$?On9@9pdA zv}bZ@BSkI;DR{X9*}#LITiDJIRX^-1yB*fRQ{mkoJrY=bPxn!)LC!-=!!bBx|Dq** zurK8`EgT?)rRiy996Pjayt(y0M$s(w#~50poe$jE9xtPX8*u=$@+vhNO!cXML#)&; zV%(wAo7KW#YrQr5Q;JG(u^#qA6=SKyQV{z}O<+>1qd!LR>VHcG_~#n(GjG*AQHj%F z)jCDE&GS7tuHIhHjZb7hwg=7l<}C7N@4XVa6L*2tycl$R|J4G<;T02hmVXma`>z%N zgg>JD{5NCzs~v$f791w(3mW5oQhF6AF|CQX|4GNjm-NA$w z>RWC|>e(@0y;{cJuzG;3swe|lm1Bz!rVb_lh+j-t#naSz`@3trn!`hSqbI$QZL?qL z!i>=JYif0p=h(rF`-T#RD|AYXIu57_w?7rSd~gYwLE#aO z%|qo4qsSYBUfZkOEiQ21ITUQUlCE{bKWyX8Qj9Wg`rl1&uE=xfvh_-#)v`qCVX-(c zfZW*$JP9psYiL2PEq*x9iD!|}Uq||s)xX`@eNI_2t}h&p5fw`=+*iYZ+v!`;^f=)2 z4iK?Jw_=ZMZs$f!kf8Fg_-JsJ=Yc!yH8dEQX^8dPqZwBHuy*6{_6a+Da2K1lCU8pG z!Gu_`Pw4m=q5W?thEn`LPx2X5M4BSC8c^oFA?>_{t0BF+WV%%zUPWGa-H*%SMONQS zzg^PSi>Q_|&*`5MPUTG~&UU_2fYg$Vv_)3_itTQ1y^QPOl=yP6F-Fu!} zw8dc_7DJ_#c_GoFH?yet6ESeG%!rO#XD>Xlij_dnV0ed48_> z&4aOBKG)Ybl2fUr*(@I=7xr3xNmbBauO`H(bfEdx%MUmRSoYjlLzZYL2TzL$W9=_q zZ5)|1%vl(Yo8?KBsSN02-tF}x!CY+xu}fwY1l*omEcE9s(a`U*zw}ApFugSIIDBX_ zXF5&VsP23n`fW(4vt#vUBp6W@F|3PWNRUl9K+GMCr~6Pe*kt?k4y0K3GUm+_im0MC z5-bBlufZ`_v?LgVb&w!_9A=9V#FPM}j_$4V1gVr_W;Qu}Lx0{rE~Sb{v0mf-ZCEt9gF57PbmKMn;; zi83CG{Tsvk&zo|@j@#Gc#s^Qf%v-)U1hM57mZ|cMj{JC~vzkaJ#(QTV=J}H>0~Mj( zf9lb*6g+k^VDZeAV|Fb=QuNK{hGe!$b;*n+IHy{a;M=mX*mC9E;*1s7CWuiAIem;( zMi;Lw?}$~}e7$tgW=A!P5%H@C4N%uDmhAEsb4?L=t>SLw81Ki&`x;w!Wx(69o=nP+<$Adkbo)3(0Uw+Tw;KPzQ$*?DKzx z#c=^+kKRMc^*k0v`QAd7^;~j&4eyB}UhZYy^EA&|7?cjtS}m@trPAcw8!@YG|9KfB}OHmJsY|vVYD%; zSImgzG{r@9>nehFIdpk|c^3?e8PJ;E(dRq>ahEU^fhWwDOD0uf{k%{7|b_TCpxv8jU$1-8w-t{j=70oycZr!U# zJ(QhUVEq0ThzU48+L2rTDAjvuHdVMyrc4jn(ZeoOk4!8M;rsOB1xrE7&i1FaMEvBQ z!%)%hMw01Rr{}GhW@7adeKdG_U4jCT@4@hy_zlK2lI(D-VfeK2aJK;**tBJV;U7w) zhe(IT4Zr!5u|w@g-|R^bhIhPr?J2x54y$5l((8Yy zC4=G5-#5UIyvnPzvGf!%9h)vw%1B8LtY`+>LJ1Gt7Ux|77reI!bPMq9KZLWh-!f@#3&Xkvh`x>d%1)y50E&@Y`KX4wlFG+Q+fGP6S#Di?iM(|26Y z-`rG%H$S1sLb!A+ys$fcdT`$vJA<@%^|~(iAljqXoVhv-uD z75t=YhDK`!H|6jV>n~6eson6J--P1cpQfQD zR_#faBKeRBGw(B8q$jt6)4#u;$aR&7)#VG5+3G+hqLr~RW*le|1{^?RlhpZ-ggBT8 zT_r;zPJx%oNP00We+F7T63ln02vK10)4*fDs;pGte}aQFNVca$xKSi9=RPWl)Si~+ zpjh%O4r(*M*`4mR#IwipS;^+l{Eyd**)M3-RUZS@iAYuQY$wE8M7G;ARbHyFrhu0| zLcEu0vm0n@6yZz?=@>=Smwqs_5`t1*?rzAu>@|yKeH2a{}S6wq#D-8~9P|+Qw#i7S+A?g!i2Sh|!E80G*r}`zg^rT?w z;=-#EZ(>B6pWlV-gP(Wwip_WEp;O@9KI(?!J{WudiT?b60m6dO9EG_xWzm^j4VElf zu8(2YG=rJ~BDrc%cM6fm-^uuusXZI(mKH6-sF*%AHo924EHK2I1u;zoELyYJofWS#|JprQPcQ z-PZEojjn6#Cyg&+`{J6|se;|viH;l?^!desaX!8ScvMq^KuIIISyphsF~kC~B5aS* z54?BnKZTStf_^_`-hm8$a{>N}aKj-F@dMGnHrCqL#9py!0(z_XR#d~d^ z3@#9O&3zl@!0LH(9EyRdn^F(EGB5`;d#Z{yMmF^ym-QHsdYW;7AKH~z+j<=S(01|h zS)GlYXM#{^%`!{Z(W-Vz>g?RwlTes_g6MvXPQn42!~M!=qE!Ue(A*HIjMdqVQ{JX= z0|SHHH&H-G=<_-U28Qgw0fOaVM4^bHz^3J;Bak%R;5TkX)e%K83WOL|bWERKk(uGa4W$I`ijGsN7=kcA#9V8gKXJ3`rWy2HtQs$_UA1XZ z@cS;8k!+=X)7wN;{c;X^vMTT?4rG}Uryn(<8;MF>ktnP|+h0(uJ5Bg^Y;mJ+6@|85 zJ*~ykpku+E;%r{NXjT5cY(969s*7vxu_Ht9{N4wB-qM1|B*GGI!5%5hG5&TU#R8>g zO9n>32bGL=uIOm~p>_MTJ<#b{RQAY;T(0my0k&GnZ8zXyK5&BgzoPs9gAx5ik71-iItzP>OBdT#fJv?%>6c9fd8+yFOP?^ZT}uO zC4@qRm_o?fhO$i?Lx>hjWDAKQEtbJ>RYVaJ6(U=kG>~vq-9r8P4C7Yeh#-;&>zH$u@@TU>1Efqud6&{u_yb}*lW)tN{tw7f>scXKz7KrQtHb954@O@!}EhbJC&Vwt5O5 zwy2?!vo>|(XyO+n@2n!U3DcTuXM~aY&@Ubq{r-)fP)OSz>$i(vYyUWDFdwNjuxlyX zN6}QADci0sM-^`&@iEbrMTRAPX*-I-v=+sa`mhf3Wv!PjJ{M7quRLep<7$S`O13wq zXIBk*vNviH>iW2T;x`86EowrOqn2+LJ6LC+Yafyx8z=jmtPcfD`i&o)A##V|opFu<9tWrE}`6^VNX$&aMCVUHutFYsE|o_pdcS zY?konZVVmf`0;4#^9^;4qb1iV_P%DE|IdjEv4MjBKe)G>spHdv6sF6J_Q}knna2}3 zZtf48o^66ICGc39li+W&pU0N*crA#h}KOioL&+}t_SJYQGnzwps0C}3uQq`mlyb!@D+Z*&uI_^ z-&jV}S+H72vsO595W(<)3P%&z(XfK0cxdDW3?gZ631C|IULv5>#*svVrLcU9jiCEI zn4jqZJC~w_s&z1FW0QGs;=sZGDc7vmE0-0|KFw2XueoDJJ&wJ-+Lq4AaIfkl@{H&T z!QF!wXQywGzeY_^+~^WFt4r0b&A+AOZ8F>{YGf)}=V_ZBJ#n4C+g?yt6SogWKZ9-R zSo^y>C|30BT-QuDi_O%j=PIhMMm|?I9o&?0U`7U|5Pk6cGk?4UtCPe-lz?l!I5Cq? zn`Iw+gyjWc9CaF#GbQv&$$*w;E0r)fb7DiY)|otFw}SyE9v&Xnn4k}N-9>I>ZMVW* zq$vgXh42-6N#C#cm2yKBdkSx;et4Gq@$QyOF0V)LH^@b>_64_zO*ff_lLQNN_hYy0 zCvlAi?|4~xhlxI~B586qf1~V90U-sFOVHP3gSUg~Cv?KkEae1?xFI*;>sqqA>}jFz1{_uF^kz;Sz=`jTM)d~4N{o$-qS1;dX1L6`VoPkp!s|?g=L{D8!kI?yy#q3VnGtG9X3=_~$1)s~+gr56Z(1EVH?;%|bd9lf z+lL{Gr|bA5HTzS-sWrKuh(#D3MwD(=PMecg{wJHg`DMZa#?NH+2JWKyUp{0^XyuK# z|5rAc{Wr4%am|`VB;Wwa^BT>yemaaIsJpk>k49-oG>sU1*)E|X)8REa9V-%;sZh9| zk7|T4;1q2L61B7X0vypqs4E^u|0<%V@&BF;wT~$cyJd}mT2GSaj%Z%H zsjUx+9jMaLdgdoT$|HQYjF4!#-uMN6Y&bZw{U}V|Ux@RWO7s$E^-&PVRZXvO^%QKS zSs?>EK#0~q2gsLc{HLE(7qPae#4IBYPlNn$aB2}i?cg!F;|)NbJa-$Am4bj@yvW`{ zaszAvL&9h5Qim|@(>!J^;&4@HE z@i)Hs%xVWU2_@zZkow~rE4=4utaOZ{TH|AZVdLVCZ;Q4=yTW=WuG$pem34XNa{Q9q zmN~!G^UPQ?#dgk`;2pH-C}Q()>Zdo@(>4`7p!-Owsa`#?_T#$+Q-+qiuXSepRd+UA zXdreFYiwM5di$YgufL`8-55SAgJ<9%E{uKOZsu8CB~OQs#``m#M0t-tnQ-43{N8yF zlrew!U5Zyr*|y#R)T))m!+&4YU+juiEBm_{|Aon~URiMT7-d53f%Pa@i?~9T{Ke?V z>OhU?3?Z2kls~Dor$&*pk{~PRn#-rQcM0_>D!51$(H z?J4>7GRHcJZW3RzEMu#2U)JLjGnk|G}vRBwrZU^n6~FL2(ml zUwT4b;BttQYB+XB;i1c$FV5RsOZ?~lmF@lBG%-V?41puNfe;!tHQwMwrGy5Y$n#Lv z*2|EMO|<@OgLd(9P_a<6J#{$&bul#I*h%)eF9(;bSGX9fmK3V}+iD_yYAS-vjkWQSo<4t|hNXuLMT~4q_IY38GiLL%2KlZIMjdW?2R3*}tU; z?PKofA}ZI>s%m50B)7Fc&%bX{vZ+PA%!eaZUt0X^u&v6W(CB9pFUK$+pc0lk)SgS7 zX37K4KY#KsU1g9O+ZMKH>wsliM_EQF$g_H3kk=i_2`ACgK#28K?=N-*2pYsuBWGxH zEFlqy`7~qEe%N)1J4F&Wubb1$h=)RKGrf~R>2ReHB}`ZTCEe#+Qu-)MgBB_<(sMhe zAyBQc%u_UWEZ7;_qrSt@HjniE{6{lw_F=N^IPan%)4HNZO&le}luR-)<(}7=+ob2P zy`w;FlV0^HrBh3VLqo^n-=PN*@W8#20USpcZ?fnX{`CnFb)C5_tlOxsqalG8sS4C5y9fv;OVpYiR@EE#cs#aDs|Ow z)=4b}#a(5UyGeT<4F|pA1UCuK->?5}R@GVUvv^E5=V{aMG!O3Ni}vDf+ao?VmDPNV zc=wM!`5+@axuv1{hgOK_1%K_@Pv+7i_M0vO6mA*eNeN#lEg0%+J#9>1e`_eUa8yfx zM?zOob>c>y*66?&#)sOX;Nw0b~^cqcP?;0P%!}5ILLzAYA^K@b^ zwN1nhd%jbzLzSQ^_2Sss61Ht;Bi5IDRPUY=eW1^7K$87xTSE+8VWiNRXL~#6b*3w=F`4c(Ty_^HK5T1h zR@k8}J}7SDbUeD#to+5MF_B)sQI#~_;+Xi@b;Y;Lh=Y$j_#b~CC4HK%C(lLc{(;k= zheud7=Z~j|gSpyXUpJ-VF%)aL-TU*q6I!lYzN8B2a*aWvsuMp^w~_q&75l0b{XObS zS<2n{);5N3+>|fzW+(HfUYbZt$od?*jNq5kt#R|GN7VL+iz7L)mj=k6gbzHy+f^Pr zcKDY0$;_4eX!sCm{5Bv!SY!DA-A!8KDxc%*edzH}{K%pjg?B1tWSp`o|8ArzoyFGsPB&h$rK1C6(p|=gIM?Phq zqf>7DRMzaQh1fG+8nr3}3SQAIHF+!+#ky48rQWx_{7m?HjcK9yxA!;;m^M8)9=Z{_ z-8*&C#MGEoPv;9K0L=`APA9dp8i^5eZ<=D0a1_N0%;ZP?B`-s$ppZ{QVxcBGdHS6W zoLBD1z(zQshkqz}J8XHXyu1=4pHT`G+IbxIQ1MKU7A-rf%2VO{azER|fGnI#zgovg zry=X=JMw3z!&A0Lp60=Ja!vajEbtH**?UZ6No=caDej$}J_pt850*u+7SlF+$VL7Mxk;1@tCQ6rhVQHHAMonqeDu}dMmsfrn%UG_ZIcg+G@t}=>*ykj zrl$e*AavUpXnCjM$GjMXNyRH(tfFRn)t1KT%D&1gJ=L1X@Bt*g(Lp2Xr!;L;+Y0BN zh@d^sR0+%POzICe`-Cry>}13sKh<5D*KRFlTiCP0k5#b;{DHvJAU0OX0Y%R)sP-#O zb*==(6c~e;QNO~xe?o|J6>8V}E|oi23A@jfmeug8#a;aU%jeBM+%!W&JSq#iB4>71 zh?48151xMLuyvD;G)qMF2J{N3;$S?O>KFH4vCLIiWRaZ8;_^YU^fUfVnRzs$8BV7| zRAdcu6Si%T5##CuWn1<4e;yN=QK-u~>M8kS+^ZyU$aV3h+y?P)F{M!jzwDxRFWwgQQpIUh7HrpyDK~@K5P5o?pn#N5jv25T6FvCXe zgHOgNyv0fCozC6fx79o?emIyEi;%Oj@G)NQLXR%QPjY@gpDU)gEnY!!Y+>GMShr}< zK9a~5|C&NhOu7GUOiT}S8l$MluJ26@iww`F9-qE6v5F>Gc7C|3GRK$23ps1H_*ba? zzxNpsBv4yT^QX;A=$gH*LSg6HFD@Z4?vlX#_2 ztl(!s=$x4EJs;sd%u>2{gi}cC0cn}ZQ_mO8ZyZ1ZSo~&Y?<{HE*aF{8ALR?Zjlq0w z&y@>s<4tbaPX!cpJep#xynEo zGAntJIDCTZO18DzwV>y8p*jrXpfXusaPPOhSsH>7h(-MAm4`8ctDZ2q?^_z-#W0u8 z+3pP88Z$Xq7TKzLEoAZDI4fU6wHaImV@U6$Ccq6CnpmHuQJZL+lWvA`GErtxX_G%h z|M8kN`PqPb$9x3yBRj`@8J@|n1QmzZ@^86lEx!LGkt9oa+DE3@7QdOC9QfgV?vlgJ z1MkA`rCX*6O^aYEK-k`nyr;I{S`dgL-Y^P_*3EW~< zR7)n*PIJ5aX=rv`?RP6J+*?B!Yd^-L&&4HV>3*9S@eDDs(&Tyqi()})0P)_XMqn9d z3_{Ep%6jOdY#XRME3dQ?x-xgQ0mEziMgqx`EI5anA3(K_X%LfzSw_I8F!szxzrc}y zNe;U-R}0bx=aX%@?v>q{S6hTObik=rQPyW4qqjMfjI2xks6endk7(X+%T$IT2gU~q zkSiKEzWuu4P>|!s!iP%IhrIN^DdhX!ef&oNyFDuSBa5w54byguv`Ljf82EmaP6~@vdz?7fW-B!P3}K zR*fh7sAhg)u|*x%x3|rb^IP{(x14$QWfMQBc}~}D@JYZOR3|;lF1Q?KHPP2#{h}P( zo0qS@=zsF_jR;fNlClw1N}`IhDBV!WyI{YMpth>eP3-&%L2nm*mxypfus>X8N_*HC zPe(SC?LJ%9Fpj#LXj1yTI_T0*1~!6HJnp*+ZJ&i(h-O!AebIwG@0hg?|~5+6sXO zGXeT{U$JZCPhj@nm&|oX@dP7Bg+;`&3!aTzSXkWdXw_!P^+-p^x4R_w6OKH)(JV7) z`N9%FgEX@?#AwRCr8t~l?pSXx{V26na$!MB%O)=2f!9|VJFpPSm9d)n66*TWz2lgU&h8{Bq` zek(d|KmsLDP`%@-A$@m>foC;J(O5R|&7L1p6*CXmG;^IDQZ6b;Z}}NtqZ82EfLdS8 zHDt5(d3tHLxANXG8KUQ$`+XbzF*y(34n(l;>*nU^Lz`EdFQ6){vhY6vN`S5X-OT?( zxln9iZKdTc-Mvdm$Kx30N*e2 z*Yw+h=Fg=hI>ZW--~owGuRXIcV^L#h8L_lcQ-sC!oHXxZcOQVgWehLCms;5Bt;!U% zg?_xnum0r#6Ct)Qnxs%&DGaT~i{P#++V!NQ{N@j#igwpWP8B8hj5yvPPwsGz(Bq5N zb#d6R{rW}FvOyQLj;kHE>cXi7sXV-_sx%O^-rt)1MY>)#wDgJbRgRc;O=@Y;#=*oN zAhbgdg@ZYSSN2|4W^!hp%?bCx3t|IL^!Q*Z9%fmo>6{YRC@v}CHjL>w(z@^A8PlqY zH)NdiNqjiAFf7*6p}z2$ zibf)0Tn^UBv&E8C?^vo6HzqZ_Kz~K&qrxOgIPUVMTYRC+r>z_0{k$ zcHfA}dAqT(Zi2FRUmm5*|Jf<$igMTJJ(6uI+Iuc|;4MjD`oX=7=d|8B9V5e{4&1tY zH|sBq!ui^vMYB}nMXr67&nC-mne^0~G<*(oSFXHTxu7lI)u(0RfqbC{>RxIT;X`sqigP9|fw+y@uBRM$M~=i;LVhphW?#z|qr zDXXZa4rtZ?np>`FEgAV|=ce7aN}d&D~K$^174l(#4NnbMs4U)2XH( zsFR5?d|Id()3tkhFTwIHs?_w){A2@b102!_aTZ5vMtWo+p(%cGF5V_6 zzgG~|f9Jp<%KoTgPY1r7M$-D9s5|SMi95*Hef8f>puJsV!CM3C*cY0<+n07+-goyx zRb~fKML%*|@b-3d@Y1snm#!nc5s;hZ`_xj)Nx`AEkOA&j9l?T!d8eaJHI!h&ll}Te z1C9ygU$s3^{q@_`?PYhD=9DPDa)gqn|K$ZkuQL8uvH();=cY8MFC#>+)6JJ2GMf(F zZ^0-UDsQozbi3EGv!TW*C3N$w4(4;-THa&(k~6GFM;+=228|5Hm7OKMiM=KzQDh0u zGbvInTRAdg`t}}}bve)PWCy$#4^)Sm$O-$DcF3W{ohvM*QqguG5+0c1x_|e`nQ1VvJYXxL&CwslXFHRGqWvxF- zy_!EI_t|Wft1mFELvB{{LX0Khj)KxbE&q`G&&gC;r2CJhyq3bMq96Mh-alp-1&cJw zwM&#F=?u7OQ6EMRPT#3U4pxnex7wehM;By`emLsJlTfgui{Ml!;&*y-PlMQ-L4}w7 z(#&VNGrNX?3)HB!7P*Z(%vl!&)t9CylW6layZpIR?!K{gSDj3bwumcVs3?o} zm)FDGS6}a!|*XbwMj=G$uSr-f)>C_C3b(3=OQrUZa z*GBkl$Xg`&Nj-Md+Y3IXhJ=sW)Q1B%O}p=33i?V|pZUM|qb^Vwc)7`gr8A7lnexWZ zYKVaED}8Glf!9(6XxRyO5U2y**_xqW5%`+%|6FvXlsyz54({jVK4;UGJ^rrAs@M5l z!1_Fe$$0b1m|*7;=>v}Ct_oN4**N%D0y`2lbzvPG4r;=!z_-T8|0eAN-NiO6Q2@5u z1F-dRHwXj;@M}g^XmbCFV0F=OSS~g7E@=a3pv?2S?G3@li~FKbe`@KRBs!(aZ{FS& zAB?Jcb!|*>%zb{E5wnz`Exo9Q{o{LMiuB9so=eQ!FGZamJNz$HsE-pZT+N-swmz7O zJG=WCG2h&PvyD{DSpzP>lLVCkfdTuA!O|VLvqOppJo>Eghv_^XHrEyl7%%hp9N#3& zX0urTlaS+$yq&V1_Wq6|wO<@f-=;3+yt(gCR2t?~VS~UeGdrUTzT5fo>r*oCpKEJ? z@QJC{wF5J88nm2{uXNv{T(?g5*k@zv0Uo{#dfS%bz|3lI3xDT(p?U|ktcFAIPzQJ? zl6Rg~>+yG^z1Qlt-M22vFW|VFR;}0m@O>N$mODoO0Omx2DQP}B&2~5hp zCM~af&Y-nep!Kf2%nfuCKL?!JD7gdH3!?U+N@}Q(=+QiP77IQUbQYs4a^MafLs2*cst@ownA@Ve{&J6A@+A}hHv*7Qhe zVDqs}T*?kdm9mUBv~SYbWA0S!JSf;MhNyw>45kW>leV!o!%fEvXJ(;|64KnP3taKTpSNR2^=`q>iBtDLw0APm4`mj?lMp|8eCppNYVV z$ht{l5-N07ep;mm9VT3I-B6*S?49$Gy)_ytLu`%u0TBoW_X=2zULmQa%b@|IUmk)% z6UwTAUv=PBqyM&;?&_X5qBCqx^P}o#QH>&#kJgHr*JoJup6B10Y23G?`%*^K)iboG z>1TWqYz+Zuru=jWG%GU#N+Rn(hAQ~0cD`!#KM=E9w|E*>tOuS3<*Is{$WF6OWkgpI zE|&SmS+JZh&lkN7m70$&)UVL_bp5AVH&h$FLgzbj0uSitW}pL2&FJKcDjB>e?^g2y zy7X6`%XonnI+@m@RfTw#cGd6zfVWA2jFvszD5+50odru|<1F!~X`d5yvc_9oB^b%r z3o%^=Uf-hx`sQxb_q=`|z18u?xgazxq_%SUMz9cQc(If3va#&hFCkgm_=BEMQC?np zLpsi+bw>T$sl#3g(WVEVJ6Xc^pwJiONwKGW4=?Vnx_6YT;wE{sQo#p7tat*0JrNX6 zZb<;jR%kL3yn!MeaHTJ@cgz1ta#%I|8^OPBrda*`|3GjJHdl?LnyzQMEXsw>M%qe> zC;x$dsO)HE{^`=aKWY#hHySbhpq=iwH$5q1?O#L1lu+EkY#8vR{ccHi9xsa~3&-od za^pUhZh6J#C&%E`L&)O;tcIm$&ro5JLe zxY;8q9k$y!=6(0)sV`L;TW4)ZD>DkqaV(&W2XCn8@+N3Z`0d38Pkt+%>2)R=M+IA> z_5@py^{F*)o_w!C7W;f7xD4^U@~ROWOZ2!_hw)`0t1yw+DPR9)q3mTufD+N#i~Epg zW^TTU45c!c*V!Ff|42WqpJLf<~D$hO=p!j{w4z5;(H2(AvLJI07S_O2*VKTpJDWip0scH~aYe8ds`~Ydi|NwzDfk zYDxctOumrQj>}wf_p8?YqHg#TB6gL!q8X}_0IEA`ABv(G0y13-H)28ZUw&K|VsVQO zO6+Td3frQ8>R2zZ`oH>hivP)}xFwC5FO zebTmZ*|}64Q}VT)WaNByk{SO%W|vNFk+#9hN&8f_1zwtlZFmE69gcm-CP>{xOxf~K z$5iawv(70-E{Q!FoA(#qm$}8(_p13qqfIQPj)|e29-6C9eSyCnLZw8Yie&bZA$P2G zU|Uf|qqVB$e5v4#$4&=CpO1Q@$mv2-*t}Y{GY)J|?7@p~5aqzMH~&kfJ*%^2rfJP` ztkw)O&h}Z$wzb-}Y9kLxWPpOdX9%ld6q+pncVK*5QmlcBg(OvUReP96sd;@j&iCxv ors?^$lEdv-R`jJWGGDLsMNH#Tqf%$)0SRk8AXg2~vMqo5KNsn4F#rGn diff --git a/doc/img/uv-step-response-data-sel.jpg b/doc/img/uv-step-response-data-sel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa3c638b985000c8764fd34856a923ac179fa69b GIT binary patch literal 8171 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 literal 15953 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 literal 16825 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 diff --git a/doc/img/y-delay-pipe-control.jpg b/doc/img/y-delay-pipe-control.jpg index 49218882e1a5ec502cb31eb54baba65fa534353d..df5a0a024d2e3c93369239b311326f544ae2cfe2 100644 GIT binary patch literal 20371 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%0ASwq>! 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 QfzRf`p#nH14pwm!01D|Ivj6}9 literal 33822 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�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

    OUt`q|)6Fbu&@KSL8zw=z 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 AzW@LL diff --git a/doc/tv5725_programming_guide.pdf b/doc/tv5725_programming_guide.pdf index 4371aaf9aad2b3572bd37feef261d83aeb0c6ba1..5f166aaed18f7b3b9b96c11bbca6be09dd0ddc19 100644 GIT binary patch delta 5709 zcmZWteT-Gb6)(#cm$xhXfy?d!^Y%&sYmnXfzB7Dmh2<$&Kd2VtM;3~*T3y&(U{$2p zx9An)M^V8t)>MPW5^QUu)MiauTZq;e8#lJ8v5APNNvl{;s5Gq&rf1%J_s&^)f894{ z&Y5$5=bYc1dr!T(>D_;A8cxO~Rmu3II{A7sAvq(dNhT(_q&BHb&P*mH^+`k0m^3Am zle3cMWJ=PKv?guI)MQ#R{ROh@!Ev#xuOmb5=5XUK$DQ-l!wf z^JsxaJ-M!~sH-d2+rMVux|?%?di7gtx#5vgHsV&hhw2DBlhf1;=hBVVk!ek1mU2B{ zWrXI)p>ZSAA0|hutKyQWA$RZbiYMb4Sbw>W%q~5A0wzYjXdqK_?mSHn4&j zYa$Vsmmbe6NbS!}X*E*5dNou7=VM zQ`xb+ft)=jGt8)8_J*&G7^BP^g``%}=~vv!&&k{i8RaDrWE%jzeki&&(jw9-?hq1C zQqpu7YU7-?tV2=5qMoSplIWXD<^iyhYUTl!in*88k=u)=!&+-}lx?4~JX7h5t>Qpf@lp+5Y2;pcWuafHh!r;i&=VboE1B~Or4<}oDy>B8 z`uict&z>Z8EoD$VcncOpofr4^-#GOBNJv*(oj-RxqteCIc~z7~m9PN`1j(5NYyifM zLmPTmugh&3cgc?V{jbovB|mul&T|gm*S>7c<1e7mkcy^6{} zqo;PCxMf%l-S)};;!;*X^8!pWb#a^G7&+IMw+M1AL}JGS>U%^i8>w@bfx z?{MSszkK}Y-oo_tgO9ZC+&bEN)r)kscy_{;S9iaEyst8X)y;jEYK~ z3mK#GmhRL5X@_Jf*FH$5!-H{MgJjluu#z=K=d$kZ#j7{=uJJ8WYS}R@qDLMaB#-8% zGU|KRmjl;~qeF~)vLV04+)!~e%I+9X>&f`E{6>E|*1Na0T zQ;|%tk_u>n;Vq;Y9wl^F*u^u4ff5Arlk?0QNn^uYM^nC~&jMCKSwNqbfs+627^x24F1ARfW1Q1tE524 z3jihcMQO%de=}5X?62e$L?J?EmG#$tkOUYs#q}p-fI-95gmh#`wH8o+pLut+!u2O$ zKuDd^8rPpt0R|2Cvg?}Sn@yw43b-Is<(M&yA>53aglmi;{K+Je;Sd80$yjOS_D=zK z^6tEhSfBr4nE3m|CQ0HX1e3X&ilO>vB(z?OPR#ax`({GR#@begvhf!FxMcvs1U6-$SDa|LZ)Ld zYe?veOaf!ouDeKcQBejZ7yJz+swl^_A%TZ0+KNg{8*rrriGmp`Sc9(0bYe^+vQo1P z;C_QK5c7x(MXO+N!a;|tPcar7N86x2n1D+m92tsMF^PFZs;qJpj91G2u+4WLuwhWv zAx35~jmW^bic?G@GB7Um6-UM9Z|yXCE@HZCDtOBk%yr?wz_@U^fTbV-NHS%^Vt47( zQuE>33WTc!^DhkkSE{-|xJqysmxCk_F1*G7&ml?3qEMQS?l%ybOL)SzsrUMO1Q8uH+- zQGj}u9F3~iXp0I(qw0lOiMy3~-)wLt1m!R-D9a?O6CI`n@DF@PIw3?W@r0p)1k&KG zGO;@h?iOJ}M5PZD74|?V$S%yT6>SZZHx3bS%p?rY)Ec&B5*X=_HMk>6lKIR65I9E~ z;>?sZ&XJbcT>`_1q3*eM-+g!x*D{My!`l)@3|cWY%Q$?j`LZ3VnTfG`LX1p}u?rV^ zrmgXS?>`J=5`zbP7;J*X#<3fYpgdp@M|j7fcVUXc16GXeat;2DM)}q$@cI!zgq#C< z@HNY=yPvcaVG|xM%2HAKOysMh^vXryO5x>68s2em?3L{Tzuc7&1ztl9c5h!)%?{%B;3|tT?1-G#p!j6Rx5h?!GPFlki`bqZ~0(& zUqM||UW0c3${{fJaQvoP*(ad5itvn~F#>mcX(JFM9_7+CT;u5)e!r@$jd@+ItQn|x zc=YEMEAYo`%w$vE$OR^)%GwxKPS=CRzYS%u3k$o(IB5c_%n delta 3863 zcmZWsOKes}6b?wG{uQifTM+N{Zb06h*O^CDLRCmu2n5|2qhZ6s&=e9`pg~%6d?!F+ z!t4x*ZdDd0|IV;-Nl094aN)uiHa561CVtcY|IDfEZf4HReCIpgcV_MnOXvRm?%YCL z6W7N3;<`8z?~m)_XnY{{;#hnzZipM>LvcJl95=;B;-hgQPR6OYIc|xM#jWx2Z<@oG z`%m?n@7MIlK5hP3*Z*g{+0yH8_`LaTfB(+Q&B^uY&)=Jk{qw&xi=*qEAZ3l}zwuXd zaP8PjZ=N~XP0!5Doj#jRTyCb;^j`e~_|OpB+Q4QbQe=2H4{scF*9yUo`0^HTFf zfAsI>*CuV)-X7jzTqk=%2pP0fiaLA>(am)|YwLs!GJUq%dYB^5VSvrD#%WG1wk|W?t8{H=JJkp+8NN{Y)6$EyxQq{V2%?3~8Uf z-35HcLh%)a3MFIXEn_JwYsdu&$ym~$xy(q%il zcqilYl0w?I7X*4RU$-=Zg|DiFk@YZ?p25gyhXB2U;tN2-H6O6kia^OQI+GM zbh!F1I-&{Mb5Klnfix4OVX_OBTRppb2r77P_1uxmOyE{GgT9|TVivJZ3;RH*P^eAK zsopFkjF#yZ5RZ@`xcer;XN3dY8eVlr!gI5msymW`o88!=1(K4R-9Rz}>?F0KbZi;` zrEyFz1`;kYR_SytW`NQ;l|DoGtPF|?#MI6Qi9^j5dhL9ql;la(&PPgHUMgP%P6}tH zP5_{SXV|`>CZQn2bmqMbPz7t!oLIIDQx`}s>1YLJ3O?{zXR$}Q1-<=>(YVuGd?59ru`BG8ZDS}0lbDATy*uYs!lRi@T96b(eL;>0-d++ z7KBVUWVQ_P9BNM_k|Ct=4>CSNA<{+#d>CaOp?dcctttf7yO#)sV94v;ON6@cnc`Qn zQtEUCC${L!yfA2xLj_tCCf!~JXiCoFJENAJ#2A1 z4%zWANfHJCz2zRZa9fG-@bJP%8K4jF@CDOO9h2O`79D&T9Tc}Pa;r0VAu)V-K9)5Q z_L`5I$q@?R@+!3xEd>B#(dhSsXp1*>I+~-ckk+On1itX-VFtGlbcr_H`j(3It+1=t zlpH|nsx`RI%5DMe;ud8`a8X)d9fp7zow`pz7l^hhwYHsnL86b=Y#i2>aL><@0sz&@ ze}h$m+X$7F0b}ISMcYnoR?4uH2eT?rx{ld-Wdb96FiZUDDn*vPAD-p-ExZzsF2lOg za18f3K3D!_24lwje{3EP8GaG31mfw<+Q@K>cb~zSLSw)uKg6he4|b~_dMj&TQ_wQM zdNCR;qkj-+xLt;0<{s8u?q7Mk<-fN4ade-XvH8J!0ymK^R)AaX2i^M z-ad;b%0X$&j66j7w?g=t=WWpYyH~sE`7!Uve diff --git a/doc/tv5725_registers_definition_v1.1.pdf b/doc/tv5725_registers_definition_v1.1.pdf index 315ea4988b06c4dd440e70a0371f249d35913067..a1bb3434665e23558cec5a24f002fdda024cbafc 100644 GIT binary patch delta 8769 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 delta 7027 zcmZWu&Cgy{5s!RTUu&%&&jW;pz8f?wz;kBKXC$O8$VNq7xDi8eA%=#K#;}v{baB_z zRnG>Lu*Db_CfyiP6JuCFEm%OIwB=)CLJIK@ApXwt+%-yU8^bq;Zw=r6%j%`y zmHW=DzE@5?vvTKF&#ZpdWA&YL zPrtVM^!o>r@z%I-?l(8Buf9-@zOnxK9US*f{n>wNf6vms-NWzJnPd}{GjFVKy@Qfc zNTT4PD}RH+<77mEoG8Q))Q2b^GR|pdvS}Z(@#-vQ`9Q{%`!B#4ug>Bu3ND9o3JM#i zwsu|=l5ujT6E||!TY5XKu*PI%zHfe6L;4Kg{IZ5qx?K(l%`s~{yK?lOusrv$tU4=+W7hjnE>vTTIxC4EHo0{6;(GOj z%~|c8TRbdTudo45lbOVN&)foJ$pP~gb6_Y-JVN*E#r16`5iX@6o>0#oJ@HYYfqBO3KS&K2)K65A~F)Lm`H_-a3R~S zSp!Q}{7bmF<=7Dh3Zre73-8X5WnmJ;K_kn!Q*CY1$g*$=oTiaQnzl90 z0@=1sez9I9f#X!q@lM=|(AU8{=$3!fmDbTMEd6yy!X@+sCHLDIBx!9pO& zGx@UrAMB1=DH=g+_W^xMeUae!7^yskwI@m2E);@-K|0G?;SdyRaZz6+HUZG9FTx@y zcpJ;-)mF{&SZD-=gz(F*NQ?=^kOS!4d$1LCPicrZ5jN>B5*xG~<)0HGLD7S8wcVVN z+>1!da{j$~mo&kwJ544fgR(7)g-H;+2<6cGFcv$C21svPi^i?LNVpPOp#CBbrie19 zb`u9v2C%<>zuqN{Y%L+vff@WuEoO;VW*~c|8mp0YPD(=#8d)dYf^zDR6>dSG78+UK z9AsmG>|>W<2Z4vQ89K#K~BcV|A~ckPF83^5u0Ld<21L z+k4Z}55+F?*(Z-GwEf`l8CIFOpd(wXR&Rrn#uC$75=WCu*&_qFz`6 zN_Mp6zH4*Tu+g+OAalzpX!NKFC%_w{LrpjV2iR6#y#~{QPBkz)**@u1^TG)@;5}Oo zemGAxY&4k$TFK=YG`d`?g{o=P4I64f7y!qJTzl?An3i;|1(_RwEbCkg!T=Z(g;*|E z({!$(_q2oY?)2sGM=(ua&>;OD*{UySkbcj2Bc}4`M=;H3)X>1%_PLTz@k<&$X9jA2 z!ol4I4KhFAj3-37R!!446irZe&mC$qFmQF8QtthDR_B7u2b}3T2wphTuFiBFr1sh| zN~o&3&V|tKg#!n(%Hh;1eux+wxNSjI=-_JF#hP1 zIgBzmaG=p#PD7)IQ3eHgC2JU?^mj)dFkbisGoGN6FUrMq=wYfjN7V0}ck?VTI-PaM z0$W)g9<(hXMp-S~b6L`S&}?>#lg58soOQpNWbl8sVTigX?(_mK=2A}=iBT_Y^!RKi zj8>=RD06z)G|Fnz!LPe<-ze)+Y?3YZ^LQTauFqyWE8HqVsOjz~a~O!=S9OR-Z=4_O z4M^8q&(@L2Y%Myvy0-@STjy;@IIvc47;r1;Kb_UOZ*&!I*sMHzPTH765&v4Ff z78bgwUsL1aj{c4^aJ$99x%aLff}CC;gKjXQx~Zeu-G(U03kze^O>d`{FoK*P+)oik zJ*S!8C_^Lc)^1=SnC%?aVC#DiYgF7J(-WTUhLGtiKFUxU7Hgw!13Ntw5VM&pQk@Cn zyFQreOl2WkT-kuZ@f<yauB zvm1x^@FFuI)19{}R=p`{TF!(N^$T&QhspcG=*;@nJ?d35kNSrn*$@--dF2WygmVZZ zMhg>!6M~TGXZrRKjN%rKK!!3up1T>dACJUEt&SLF%%O&C;axK*AIU3(BA(6Tf>M@ diff --git a/gbs-control.ino b/gbs-control.ino index 5e02ec48..31db2ef1 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -1,14 +1,14 @@ //! This is autogenerated file //! Please do not edit if you're using PlatformIO -#define VERSION "24.0615" +#define VERSION "24.0620" /* ########################################################################### # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Tuesday, 18th June 2024 12:42:27 am # +# Last Modified: Wednesday, 19th June 2024 12:38:05 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -61,15 +61,15 @@ DNSServer dnsServer; WebSocketsServer webSocket(81); SSD1306Wire display(0x3c, D2, D1); // inits I2C address & pins for OLED -struct runTimeOptions rtos; -struct runTimeOptions *rto = &rtos; -struct userOptions uopts; -struct userOptions *uopt = &uopts; -struct adcOptions adcopts; -struct adcOptions *adco = &adcopts; +// runTimeOptions rtos; +runTimeOptions rto; // = &rtos; +// userOptions uopts; +userOptions uopt; // = &uopts; +// struct adcOptions adcopts; +adcOptions adco; // = &adcopts; char serialCommand = '@'; // Serial / Web Server commands char userCommand = '@'; // Serial / Web Server commands -unsigned long lastVsyncLock = millis(); +unsigned long lastVsyncLock = 0; unsigned long resetCountdown = 0; /** @@ -98,74 +98,72 @@ void resetInMSec(unsigned long ms) { */ void setup() { - unsigned long initDelay = millis(); + unsigned long initDelay = 0; bool retryExtClockDetect = false; // bool powerOrWireIssue = false; + lastVsyncLock = millis(); Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); - rto->systemInitOK = false; - prefsLoadDefaults(); - rto->allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface - rto->enableDebugPings = false; - rto->autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing - rto->syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) - rto->forceRetime = false; - rto->syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation - rto->phaseADC = 16; - rto->phaseSP = 16; - rto->failRetryAttempts = 0; - rto->isCustomPreset = false; - rto->HPLLState = 0; - rto->motionAdaptiveDeinterlaceActive = false; - rto->deinterlaceAutoEnabled = true; - // rto->scanlinesEnabled = false; - rto->boardHasPower = true; - rto->presetIsPalForce60 = false; - rto->syncTypeCsync = false; - rto->isValidForScalingRGBHV = false; - rto->medResLineCount = 0x33; // 51*8=408 - rto->osr = 0; - rto->useHdmiSyncFix = 0; - rto->notRecognizedCounter = 0; - - rto->inputIsYPbPr = false; - rto->videoStandardInput = 0; - // rto->outModeHdBypass = false; - // rto->videoIsFrozen = false; - rto->printInfos = false; - rto->sourceDisconnected = true; - rto->isInLowPowerMode = false; - rto->applyPresetDoneStage = 0; - rto->presetVlineShift = 0; - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - rto->continousStableCounter = 0; - rto->currentLevelSOG = 5; - rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run - - // dev - uopt->invertSync = false; - uopt->debugView = false; - uopt->developerMode = false; - uopt->freezeCapture = false; - uopt->adcFilter = true; - - adco->r_gain = 0; - adco->g_gain = 0; - adco->b_gain = 0; - adco->r_off = 0; - adco->g_off = 0; - adco->b_off = 0; + // prefsLoadDefaults(); + // rto.systemInitOK = false; + // rto.allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface + // // rto.enableDebugPings = false; + // rto.autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing + // rto.syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) + // rto.forceRetime = false; + // rto.syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation + // rto.phaseADC = 16; + // rto.phaseSP = 16; + // rto.failRetryAttempts = 0; + // rto.isCustomPreset = false; + // rto.HPLLState = 0; + // rto.motionAdaptiveDeinterlaceActive = false; + // rto.deinterlaceAutoEnabled = true; + // // rto.scanlinesEnabled = false; + // rto.boardHasPower = true; + // rto.presetIsPalForce60 = false; + // rto.syncTypeCsync = false; + // rto.isValidForScalingRGBHV = false; + // rto.medResLineCount = 0x33; // 51*8=408 + // rto.osr = 0; + // rto.useHdmiSyncFix = 0; + // rto.notRecognizedCounter = 0; + // rto.presetDisplayClock = 0; + // rto.inputIsYPbPr = false; + // rto.videoStandardInput = 0; + // // rto.outModeHdBypass = false; + // // rto.videoIsFrozen = false; + // rto.printInfos = false; + // rto.sourceDisconnected = true; + // rto.isInLowPowerMode = false; + // rto.applyPresetDoneStage = 0; + // rto.presetVlineShift = 0; + // rto.clampPositionIsSet = 0; + // rto.coastPositionIsSet = 0; + // rto.continousStableCounter = 0; + // rto.currentLevelSOG = 5; + // rto.thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run + // // dev + // uopt.invertSync = false; + // uopt.debugView = false; + // uopt.developerMode = false; + // uopt.freezeCapture = false; + // uopt.adcFilter = true; + // adco.r_gain = 0; + // adco.g_gain = 0; + // adco.b_gain = 0; + // adco.r_off = 0; + // adco.g_off = 0; + // adco.b_off = 0; pinMode(DEBUG_IN_PIN, INPUT); pinMode(LED_BUILTIN, OUTPUT); - LEDON; // enable the LED, lets users know the board is starting up - pinMode(PIN_CLK, INPUT_PULLUP); pinMode(PIN_DATA, INPUT_PULLUP); pinMode(PIN_SWITCH, INPUT_PULLUP); + LEDON; // enable the LED, lets users know the board is starting up // filesystem (web page, custom presets, etc) if (!LittleFS.begin()) { @@ -187,16 +185,13 @@ void setup() writeOneByte(0x00, 0); GBS::STATUS_00::read(); -#ifdef HAVE_PINGER_LIBRARY - pingLastTime = millis(); -#endif - #if WEB_SERVER_ENABLE == 1 wifiInit(); serverWebSocketInit(); serverInit(); #ifdef HAVE_PINGER_LIBRARY + pingLastTime = millis(); // pinger library pinger.OnReceive([](const PingerResponse &response) { if (response.ReceivedResponse) { @@ -224,20 +219,20 @@ void setup() wifiDisable(); #endif // WEB_SERVER_ENABLE - // delay 1 of 2 + // Splash screen delay + initDelay = millis(); // upped from < 500 to < 1500, allows more time for wifi and GBS startup while (millis() - initDelay < 1500) { display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); display.display(); - // wifiLoop(0); - delay(1); + optimistic_yield(1000); } display.clear(); - // if i2c established and chip running, issue software reset now - GBS::RESET_CONTROL_0x46::write(0); - GBS::RESET_CONTROL_0x47::write(0); - GBS::PLLAD_VCORST::write(1); - GBS::PLLAD_PDZ::write(0); // AD PLL off + + // software reset + resetAllOffline(); + delay(100); + resetAllOnline(); // load user preferences file if(!prefsLoad()) @@ -256,19 +251,18 @@ void setup() // delay 2 of 2 // ? WHY? - initDelay = millis(); - while (millis() - initDelay < 1000) { - // wifiLoop(0); - delay(10); - } + // initDelay = millis(); + // while (millis() - initDelay < 1000) { + // // wifiLoop(0); + // delay(10); + // } // dummy commands - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); - // check board vitals - if (!checkBoardPower()) { + /* if (!checkBoardPower()) { _DBGN(F("(!) board has no power")); int i = 0; stopWire(); // sets pinmodes SDA, SCL to INPUT @@ -293,47 +287,47 @@ void setup() if (!checkBoardPower()) { stopWire(); - rto->syncWatcherEnabled = false; + rto.syncWatcherEnabled = false; _DBGN(F("(!) timeout, unable to init board connection")); } else { - rto->syncWatcherEnabled = true; - _DBGN(F("(!) power is recovered")); + rto.syncWatcherEnabled = true; + _DBGN(F("board power is OK")); } - } + } */ // if (powerOrWireIssue == 0) { - if (rto->boardHasPower) { + if (checkBoardPower()) { // second init, in cases where i2c got stuck earlier but has recovered // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running - if (!rto->extClockGenDetected && retryExtClockDetect) + if (!rto.extClockGenDetected && retryExtClockDetect) externalClockGenDetectAndInitialize(); zeroAll(); setResetParameters(); prepareSyncProcessor(); - if (uopt->enableCalibrationADC) { + if (uopt.enableCalibrationADC) { // enabled by default calibrateAdcOffset(); } // prefs data loaded, load current slot - if(!slotLoad(uopt->slotID)) - slotResetFlush(uopt->slotID); + if(!slotLoad(uopt.slotID)) + slotResetFlush(uopt.slotID); - // rto->syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here + // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here // inputAndSyncDetect(); - // if (rto->syncWatcherEnabled == true) { - // rto->isInLowPowerMode = true; // just for initial detection; simplifies code later + // if (rto.syncWatcherEnabled == true) { + // rto.isInLowPowerMode = true; // just for initial detection; simplifies code later // for (uint8_t i = 0; i < 3; i++) { // if (inputAndSyncDetect()) { // break; // } // } - // rto->isInLowPowerMode = false; + // rto.isInLowPowerMode = false; // } } else { - _WSN(F("Please check board power and cabling or restart!")); + _WSN(F("\n (!) Please check board power and cabling or restart\n")); return; } @@ -348,14 +342,14 @@ void setup() GBS::CHIP_ID_REVISION::read() ); // system init is OK - rto->systemInitOK = true; + rto.systemInitOK = true; } void loop() { // stay in loop_wrapper if setup has not been completed - if(!rto->systemInitOK) return; + if(!rto.systemInitOK) return; static unsigned long lastTimeSyncWatcher = millis(); // 500 to start right away (after setup it will be 2790ms when we get here) @@ -366,10 +360,10 @@ void loop() wifiLoop(); // run FrameTimeLock if enabled - if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false - && rto->autoBestHtotalEnabled && rto->syncWatcherEnabled + if (uopt.enableFrameTimeLock && rto.sourceDisconnected == false + && rto.autoBestHtotalEnabled && rto.syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval - && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) + && rto.continousStableCounter > 20 && rto.noSyncCounter == 0) { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); @@ -382,15 +376,15 @@ void loop() // unsigned long startTime = millis(); _DBGF( PSTR("running frame sync, clock gen enabled = %d\n"), - rto->extClockGenDetected + rto.extClockGenDetected ); - bool success = rto->extClockGenDetected ? FrameSync::runFrequency() : FrameSync::runVsync(uopt->frameTimeLockMethod); + bool success = rto.extClockGenDetected ? FrameSync::runFrequency() : FrameSync::runVsync(uopt.frameTimeLockMethod); if (!success) { - if (rto->syncLockFailIgnore-- == 0) { - FrameSync::reset(uopt->frameTimeLockMethod); // in case run() failed because we lost sync signal + if (rto.syncLockFailIgnore-- == 0) { + FrameSync::reset(uopt.frameTimeLockMethod); // in case run() failed because we lost sync signal } - } else if (rto->syncLockFailIgnore > 0) { - rto->syncLockFailIgnore = 16; + } else if (rto.syncLockFailIgnore > 0) { + rto.syncLockFailIgnore = 16; } // _WSN(millis() - startTime); @@ -403,7 +397,7 @@ _DBGN(F("11")); } // syncWatcherEnabled is enabled by-default - if (rto->syncWatcherEnabled && rto->boardHasPower) { + if (rto.syncWatcherEnabled && rto.boardHasPower) { if ((millis() - lastTimeInterruptClear) > 3000) { GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD GBS::INTERRUPT_CONTROL_00::write(0x00); @@ -412,29 +406,29 @@ _DBGN(F("11")); } // TODO heavy load for serial and WS. to reimplement - if (rto->printInfos == true) { + if (rto.printInfos == true) { printInfo(); } // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; // if (testbus >= 0x0FFD){ // _WSN(testbus,HEX); // } - // if (rto->videoIsFrozen && (rto->continousStableCounter >= 2)) { + // if (rto.videoIsFrozen && (rto.continousStableCounter >= 2)) { // unfreezeVideo(); // } // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes - if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true + if (rto.sourceDisconnected == false && rto.syncWatcherEnabled == true && (millis() - lastTimeSyncWatcher) > 20) { runSyncWatcher(); lastTimeSyncWatcher = millis(); // auto adc gain - if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected - && rto->videoStandardInput > 0 && rto->clampPositionIsSet - && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 - && rto->boardHasPower) + if (uopt.enableAutoGain == 1 && !rto.sourceDisconnected + && rto.videoStandardInput > 0 && rto.clampPositionIsSet + && rto.noSyncCounter == 0 && rto.continousStableCounter > 90 + && rto.boardHasPower) { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); @@ -456,10 +450,10 @@ _DBGN(F("11")); // init frame sync + besthtotal routine // autoBestHtotalEnabled is enabled by default - if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { - if (rto->continousStableCounter >= 10 && rto->coastPositionIsSet && + if (rto.autoBestHtotalEnabled && !FrameSync::ready() && rto.syncWatcherEnabled) { + if (rto.continousStableCounter >= 10 && rto.coastPositionIsSet && ((millis() - lastVsyncLock) > 500)) { - if ((rto->continousStableCounter % 5) == 0) { // 5, 10, 15, .., 255 + if ((rto.continousStableCounter % 5) == 0) { // 5, 10, 15, .., 255 uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { @@ -470,12 +464,12 @@ _DBGN(F("11")); } // update clamp + coast positions after preset change // do it quickly - if ((rto->videoStandardInput <= 14 && rto->videoStandardInput != 0) && - rto->syncWatcherEnabled && !rto->coastPositionIsSet) { - if (rto->continousStableCounter >= 7) { - if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto->videoStandardInput)) { + if ((rto.videoStandardInput <= 14 && rto.videoStandardInput != 0) && + rto.syncWatcherEnabled && !rto.coastPositionIsSet) { + if (rto.continousStableCounter >= 7) { + if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto.videoStandardInput)) { updateCoastPosition(0); - if (rto->coastPositionIsSet && videoStandardInputIsPalNtscSd()) { + if (rto.coastPositionIsSet && videoStandardInputIsPalNtscSd()) { // TODO: verify for other csync formats GBS::SP_DIS_SUB_COAST::write(0); // enable 5_3e 5 GBS::SP_H_PROTECT::write(0); // no 5_3e 4 @@ -485,42 +479,42 @@ _DBGN(F("11")); } // don't exclude modes 13 / 14 / 15 (rgbhv bypass) - if ((rto->videoStandardInput != 0) && (rto->continousStableCounter >= 4) && - !rto->clampPositionIsSet && rto->syncWatcherEnabled) { + if ((rto.videoStandardInput != 0) && (rto.continousStableCounter >= 4) && + !rto.clampPositionIsSet && rto.syncWatcherEnabled) { updateClampPosition(); - if (rto->clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { + if (rto.clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { GBS::SP_NO_CLAMP_REG::write(0); _DBGN(F("6")); } } // later stage post preset adjustments - if ((rto->applyPresetDoneStage == 1) && - ((rto->continousStableCounter > 35 && rto->continousStableCounter < 45) || // this - !rto->syncWatcherEnabled)) // or that + if ((rto.applyPresetDoneStage == 1) && + ((rto.continousStableCounter > 35 && rto.continousStableCounter < 45) || // this + !rto.syncWatcherEnabled)) // or that { - if (rto->applyPresetDoneStage == 1) { + if (rto.applyPresetDoneStage == 1) { // 2nd chance GBS::DAC_RGBS_PWDNZ::write(1); // 2nd chance - if (!uopt->wantOutputComponent) { + if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 2nd chance _DBGN(F("72")); } - if (!rto->syncWatcherEnabled) { + if (!rto.syncWatcherEnabled) { updateClampPosition(); GBS::SP_NO_CLAMP_REG::write(0); // 5_57 0 _DBGN(F("73")); } - if (rto->extClockGenDetected && rto->videoStandardInput != 14) { + if (rto.extClockGenDetected && rto.videoStandardInput != 14) { // switch to ext clock - // if (!rto->outModeHdBypass) { - if (uopt->resolutionID != OutputHdBypass) { + // if (!rto.outModeHdBypass) { + if (uopt.resolutionID != OutputHdBypass) { uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D // GBS::GBS_PRESET_DISPLAY_CLOCK::write(pll648_value); - rto->presetDisplayClock = pll648_value; + rto.presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -533,49 +527,49 @@ _DBGN(F("75")); externalClockGenSyncInOutRate(); _DBGN(F("74")); } - rto->applyPresetDoneStage = 0; + rto.applyPresetDoneStage = 0; _DBGN(F("71")); } - } else if (rto->applyPresetDoneStage == 1 && (rto->continousStableCounter > 35)) { + } else if (rto.applyPresetDoneStage == 1 && (rto.continousStableCounter > 35)) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance - if (!uopt->wantOutputComponent) { + if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 3rd chance _DBGN(F("81")); } // sync clocks now externalClockGenSyncInOutRate(); - rto->applyPresetDoneStage = 0; // timeout + rto.applyPresetDoneStage = 0; // timeout _DBGN(F("8")); } - if (rto->applyPresetDoneStage == 10) { - rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets + if (rto.applyPresetDoneStage == 10) { + rto.applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutputHdBypassMode(false); _DBGN(F("9")); } // Input signal detection - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { + if (rto.syncWatcherEnabled == true && rto.sourceDisconnected == true && rto.boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { if (checkBoardPower()) { inputAndSyncDetect(); } else { - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - rto->syncWatcherEnabled = false; + // rto.boardHasPower = false; + rto.continousStableCounter = 0; + rto.syncWatcherEnabled = false; } lastTimeSourceCheck = millis(); // vary SOG slicer level from 2 to 6 uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); if (currentSOG >= 3) { - rto->currentLevelSOG = currentSOG - 1; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + rto.currentLevelSOG = currentSOG - 1; + GBS::ADC_SOGCTRL::write(rto.currentLevelSOG); } else { - rto->currentLevelSOG = 6; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + rto.currentLevelSOG = 6; + GBS::ADC_SOGCTRL::write(rto.currentLevelSOG); } } } @@ -583,23 +577,22 @@ _DBGN(F("9")); // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues - if ((rto->noSyncCounter == 61 || rto->noSyncCounter == 62) && rto->boardHasPower) { + if ((rto.noSyncCounter == 61 || rto.noSyncCounter == 62) && rto.boardHasPower) { if (!checkBoardPower()) { - rto->noSyncCounter = 1; // some neutral "no sync" value - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - // rto->syncWatcherEnabled = false; + rto.noSyncCounter = 1; // some neutral "no sync" value + rto.continousStableCounter = 0; + // rto.syncWatcherEnabled = false; stopWire(); // sets pinmodes SDA, SCL to INPUT - _DBGN(F("(!) board has lost power")); + _DBGN(F("(!) TWI has been stopped")); } else { - rto->noSyncCounter = 63; // avoid checking twice + rto.noSyncCounter = 63; // avoid checking twice } } // power good now? // added syncWatcherEnabled check to enable passive mode // (passive mode = watching OFW without interrupting) - if (!rto->boardHasPower && rto->syncWatcherEnabled) { // then check if power has come on + if (!rto.boardHasPower && rto.syncWatcherEnabled) { // then check if power has come on if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { @@ -614,8 +607,8 @@ _DBGN(F("9")); writeOneByte(0x00, 0); // update cached segment GBS::STATUS_00::read(); } - rto->syncWatcherEnabled = true; - rto->boardHasPower = true; + rto.syncWatcherEnabled = true; + rto.boardHasPower = true; delay(100); goLowPowerWithInputDetection(); } @@ -625,7 +618,7 @@ _DBGN(F("9")); #ifdef HAVE_PINGER_LIBRARY // periodic pings for debugging WiFi issues if (WiFi.status() == WL_CONNECTED) { - if (rto->enableDebugPings && millis() - pingLastTime > 1000) { + if (rto.enableDebugPings && millis() - pingLastTime > 1000) { // regular interval pings if (pinger.Ping(WiFi.gatewayIP(), 1, 750) == false) { _WSN(F("Error during last ping command.")); @@ -648,7 +641,7 @@ _DBGN(F("9")); // websocket event handler webSocket.loop(); // handle ArduinoIDE - if (rto->allowUpdatesOTA) { + if (rto.allowUpdatesOTA) { ArduinoOTA.handle(); } #endif diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index 66dfdbb5..07940636 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -64,31 +64,31 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen break; } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) { - videoMode = rto->videoStandardInput; + videoMode = rto.videoStandardInput; } - uopt->resolutionID = preset; + uopt.resolutionID = preset; if (item->tag != MT_BYPASS) { - // uopt->presetPreference = preset; - // rto->presetID= preset; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = preset; + // rto.presetID= preset; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); } } else { setOutputHdBypassMode(false); - // uopt->presetPreference = preset; - // rto->presetID = preset; - if (rto->videoStandardInput != 15) { - rto->autoBestHtotalEnabled = 0; - if (rto->applyPresetDoneStage == 11) { - rto->applyPresetDoneStage = 1; + // uopt.presetPreference = preset; + // rto.presetID = preset; + if (rto.videoStandardInput != 15) { + rto.autoBestHtotalEnabled = 0; + if (rto.applyPresetDoneStage == 11) { + rto.applyPresetDoneStage = 1; } else { - rto->applyPresetDoneStage = 10; + rto.applyPresetDoneStage = 10; } } else { - rto->applyPresetDoneStage = 1; + rto.applyPresetDoneStage = 1; } } // saveUserPrefs(); @@ -123,20 +123,20 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL display->drawString(OLED_MENU_WIDTH / 2, 16, item->str); display->drawXbm((OLED_MENU_WIDTH - TEXT_LOADED_WIDTH) / 2, OLED_MENU_HEIGHT / 2, IMAGE_ITEM(TEXT_LOADED)); display->display(); - // uopt->slotID = 'A' + item->tag; // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:, - uopt->slotID = item->tag; + // uopt.slotID = 'A' + item->tag; // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:, + uopt.slotID = item->tag; // now we're free to load new slot data - if(!slotLoad(uopt->slotID)) { + if(!slotLoad(uopt.slotID)) { _DBGF(PSTR("unable to read %s\n"), FPSTR(slotsFile)); } - // uopt->presetPreference = OutputResolution::OutputCustomized; + // uopt.presetPreference = OutputResolution::OutputCustomized; // saveUserPrefs(); - if (rto->videoStandardInput == 14) { + if (rto.videoStandardInput == 14) { // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; + rto.videoStandardInput = 15; } else { // normal path - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); savePresetToFS(); } // saveUserPrefs(); @@ -274,7 +274,7 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav display.clear(); display.setColor(OLEDDISPLAY_COLOR::WHITE); display.setFont(ArialMT_Plain_16); - if (rto->sourceDisconnected || !rto->boardHasPower) { + if (rto.sourceDisconnected || !rto.boardHasPower) { if (millis() - oledMenuFreezeStartTime >= oledMenuFreezeTimeoutInMS) { manager->unfreeze(); return false; @@ -287,32 +287,32 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav bool hsyncActive = 0; float ofr = getOutputFrameRate(); uint8_t currentInput = GBS::ADC_INPUT_SEL::read(); - // rto->presetID = static_cast(GBS::GBS_PRESET_ID::read()); - // uopt->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); + // rto.presetID = static_cast(GBS::GBS_PRESET_ID::read()); + // uopt.resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); // display.setFont(URW_Gothic_L_Book_20); display.setTextAlignment(TEXT_ALIGN_LEFT); - // if (rto->presetID == 0x01 || rto->presetID == 0x11) { - if (uopt->resolutionID == Output960p || uopt->resolutionID == Output960p50) { + // if (rto.presetID == 0x01 || rto.presetID == 0x11) { + if (uopt.resolutionID == Output960p || uopt.resolutionID == Output960p50) { display.drawString(0, 0, "1280x960"); - // } else if (rto->presetID == 0x02 || rto->presetID == 0x12) { - } else if (uopt->resolutionID == Output1024p || uopt->resolutionID == Output1024p50) { + // } else if (rto.presetID == 0x02 || rto.presetID == 0x12) { + } else if (uopt.resolutionID == Output1024p || uopt.resolutionID == Output1024p50) { display.drawString(0, 0, "1280x1024"); - // } else if (rto->presetID == 0x03 || rto->presetID == 0x13) { - } else if (uopt->resolutionID == Output720p || uopt->resolutionID == Output720p50) { + // } else if (rto.presetID == 0x03 || rto.presetID == 0x13) { + } else if (uopt.resolutionID == Output720p || uopt.resolutionID == Output720p50) { display.drawString(0, 0, "1280x720"); - // } else if (rto->presetID == 0x05 || rto->presetID == 0x15) { - } else if (uopt->resolutionID == Output1080p || uopt->resolutionID == Output1080p50) { + // } else if (rto.presetID == 0x05 || rto.presetID == 0x15) { + } else if (uopt.resolutionID == Output1080p || uopt.resolutionID == Output1080p50) { display.drawString(0, 0, "1920x1080"); - // } else if (rto->presetID == 0x06 || rto->presetID == 0x16) { - } else if (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50) { + // } else if (rto.presetID == 0x06 || rto.presetID == 0x16) { + } else if (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50) { display.drawString(0, 0, "Downscale"); - // } else if (rto->presetID == 0x04) { - } else if (uopt->resolutionID == Output720p) { + // } else if (rto.presetID == 0x04) { + } else if (uopt.resolutionID == Output720p) { display.drawString(0, 0, "720x480"); - // } else if (rto->presetID == 0x14) { - } else if (uopt->resolutionID == Output576p50) { + // } else if (rto.presetID == 0x14) { + } else if (uopt.resolutionID == Output576p50) { display.drawString(0, 0, "768x576"); } else if (utilsIsPassThroughMode()) { display.drawString(0, 0, "bypass"); @@ -372,61 +372,61 @@ bool settingsMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuN // active slot parameters case MT_SSET_AUTOGAIN: serialCommand = 'T'; - uopt->enableAutoGain == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.enableAutoGain == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_SCANLINES: userCommand = '7'; - uopt->wantScanlines == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.wantScanlines == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_LINFILTR: userCommand = 'm'; - uopt->wantVdsLineFilter == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.wantVdsLineFilter == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_PEAKING: serialCommand = 'f'; - uopt->wantPeaking == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.wantPeaking == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_STPRESP: serialCommand = 'V'; - uopt->wantStepResponse == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.wantStepResponse == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_FULHEIGHT: userCommand = 'v'; - uopt->wantFullHeight == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.wantFullHeight == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_F50FREQ60: userCommand = '0'; - uopt->PalForce60 == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.PalForce60 == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_FTL: userCommand = '5'; - uopt->enableFrameTimeLock == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.enableFrameTimeLock == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_SSET_FTLMETHOD: userCommand = 'i'; - uopt->frameTimeLockMethod == 0 ? display.drawXbm(CENTER_IMAGE(OM_FTL_METHOD_0)) : display.drawXbm(CENTER_IMAGE(OM_FTL_METHOD_1)); + uopt.frameTimeLockMethod == 0 ? display.drawXbm(CENTER_IMAGE(OM_FTL_METHOD_0)) : display.drawXbm(CENTER_IMAGE(OM_FTL_METHOD_1)); break; case MT_SSET_DEINT_BOB_MAD: userCommand = 'q'; - uopt->deintMode != 1 ? display.drawXbm(CENTER_IMAGE(OM_BOB_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_MAD_ENABLED)); + uopt.deintMode != 1 ? display.drawXbm(CENTER_IMAGE(OM_BOB_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_MAD_ENABLED)); break; // common settings case MT_CPRM_UPSCALE: userCommand = 'x'; - uopt->preferScalingRgbhv != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.preferScalingRgbhv != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_CPRM_FORCECOMPOSITE: serialCommand = 'L'; - uopt->wantOutputComponent != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.wantOutputComponent != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; case MT_CPRM_DISEXTCLK: userCommand = 'X'; - uopt->disableExternalClockGenerator != 1 ? display.drawXbm(CENTER_IMAGE(OM_DISABLED)) : display.drawXbm(CENTER_IMAGE(OM_ENABLED)); + uopt.disableExternalClockGenerator != 1 ? display.drawXbm(CENTER_IMAGE(OM_DISABLED)) : display.drawXbm(CENTER_IMAGE(OM_ENABLED)); break; case MT_CPRM_ADCCALIBR: userCommand = 'w'; - uopt->enableCalibrationADC != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + uopt.enableCalibrationADC != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); break; } display.display(); diff --git a/src/OSDManager.cpp b/src/OSDManager.cpp index 9d575ef7..1a78a820 100644 --- a/src/OSDManager.cpp +++ b/src/OSDManager.cpp @@ -27,11 +27,11 @@ bool osdAutoGain(OSDMenuConfig &config) { config.barLength = 2; if (config.onChange) { - uopt->enableAutoGain = config.inc ? 1 : 0; + uopt.enableAutoGain = config.inc ? 1 : 0; slotFlush(); // saveUserPrefs(); } - if (uopt->enableAutoGain == 1) { + if (uopt.enableAutoGain == 1) { config.barActiveLength = 2; } else { config.barActiveLength = 0; @@ -42,27 +42,27 @@ bool osdScanlines(OSDMenuConfig &config) { if (config.onChange) { if (config.inc) { - if (uopt->scanlineStrength > 0) { - uopt->scanlineStrength -= 0x10; + if (uopt.scanlineStrength > 0) { + uopt.scanlineStrength -= 0x10; } } else { - uopt->scanlineStrength = MIN(uopt->scanlineStrength + 0x10, 0x50); + uopt.scanlineStrength = MIN(uopt.scanlineStrength + 0x10, 0x50); } - if (uopt->scanlineStrength == 0x50) { - uopt->wantScanlines = 0; + if (uopt.scanlineStrength == 0x50) { + uopt.wantScanlines = 0; } else { - uopt->wantScanlines = 1; + uopt.wantScanlines = 1; } - GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); + GBS::MADPT_Y_MI_OFFSET::write(uopt.scanlineStrength); // saveUserPrefs(); savePresetToFS(); slotFlush(); } config.barLength = 128; - if (uopt->scanlineStrength == 0) { + if (uopt.scanlineStrength == 0) { config.barActiveLength = 128; } else { - config.barActiveLength = (5 - uopt->scanlineStrength / 0x10) * 25; + config.barActiveLength = (5 - uopt.scanlineStrength / 0x10) * 25; } return true; } @@ -70,12 +70,12 @@ bool osdLineFilter(OSDMenuConfig &config) { config.barLength = 2; if (config.onChange) { - uopt->wantVdsLineFilter = config.inc ? 1 : 0; - GBS::VDS_D_RAM_BYPS::write(!uopt->wantVdsLineFilter); + uopt.wantVdsLineFilter = config.inc ? 1 : 0; + GBS::VDS_D_RAM_BYPS::write(!uopt.wantVdsLineFilter); // saveUserPrefs(); slotFlush(); } - if (uopt->wantVdsLineFilter == 1) { + if (uopt.wantVdsLineFilter == 1) { config.barActiveLength = 2; } else { config.barActiveLength = 0; @@ -154,12 +154,12 @@ bool osdContrast(OSDMenuConfig &config) const uint8_t STEP = 8; int16_t cur = GBS::ADC_RGCTRL::read(); if (config.onChange) { - if (uopt->enableAutoGain) { - uopt->enableAutoGain = false; + if (uopt.enableAutoGain) { + uopt.enableAutoGain = false; // saveUserPrefs(); slotFlush(); }/* else { - uopt->enableAutoGain = 0; + uopt.enableAutoGain = 0; } */ if (config.inc) { cur = MAX(0, cur - STEP); diff --git a/src/framesync.cpp b/src/framesync.cpp index f638acb9..80ddcd99 100644 --- a/src/framesync.cpp +++ b/src/framesync.cpp @@ -3,7 +3,7 @@ # File: framesync.cpp # # File Created: Sunday, 5th May 2024 12:52:08 pm # # Author: # -# Last Modified: Tuesday, 18th June 2024 12:16:32 am # +# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -303,11 +303,11 @@ bool FrameSyncManager::runFrequency() return true; } - // if (rto->outModeHdBypass) - if (uopt->resolutionID == OutputHdBypass) + // if (rto.outModeHdBypass) + if (uopt.resolutionID == OutputHdBypass) { // #ifdef FRAMESYNC_DEBUG - // _DBGN(F("Skipping FrameSyncManager::runFrequency(), rto->outModeHdBypass")); + // _DBGN(F("Skipping FrameSyncManager::runFrequency(), rto.outModeHdBypass")); // #endif return true; } @@ -439,7 +439,7 @@ bool FrameSyncManager::runFrequency() // This has floating-point conversion round-trip rounding errors, which // is suboptimal, but it's not a big deal. - const float prevFpsOutput = (float)rto->freqExtClockGen / maybeFreqExt_per_videoFps; + const float prevFpsOutput = (float)rto.freqExtClockGen / maybeFreqExt_per_videoFps; // In case fpsInput is measured incorrectly, rawFpsOutput may be // drastically different from the previous frame's output FPS. To limit @@ -468,7 +468,7 @@ bool FrameSyncManager::runFrequency() #ifdef FRAMESYNC_DEBUG _DBGF(PSTR("Setting clock frequency from %u to %u\n"), - rto->freqExtClockGen, freqExtClockGen); + rto.freqExtClockGen, freqExtClockGen); #endif setExternalClockGenFrequencySmooth(freqExtClockGen); diff --git a/src/main.cpp b/src/main.cpp index 38c743be..f6ef4509 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Tuesday, 18th June 2024 12:42:27 am # +# Last Modified: Wednesday, 19th June 2024 1:02:38 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -56,15 +56,15 @@ DNSServer dnsServer; WebSocketsServer webSocket(81); SSD1306Wire display(0x3c, D2, D1); // inits I2C address & pins for OLED -struct runTimeOptions rtos; -struct runTimeOptions *rto = &rtos; -struct userOptions uopts; -struct userOptions *uopt = &uopts; -struct adcOptions adcopts; -struct adcOptions *adco = &adcopts; +// runTimeOptions rtos; +runTimeOptions rto; // = &rtos; +// userOptions uopts; +userOptions uopt; // = &uopts; +// struct adcOptions adcopts; +adcOptions adco; // = &adcopts; char serialCommand = '@'; // Serial / Web Server commands char userCommand = '@'; // Serial / Web Server commands -unsigned long lastVsyncLock = millis(); +unsigned long lastVsyncLock = 0; unsigned long resetCountdown = 0; /** @@ -93,74 +93,72 @@ void resetInMSec(unsigned long ms) { */ void setup() { - unsigned long initDelay = millis(); + unsigned long initDelay = 0; bool retryExtClockDetect = false; // bool powerOrWireIssue = false; + lastVsyncLock = millis(); Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); - rto->systemInitOK = false; - prefsLoadDefaults(); - rto->allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface - rto->enableDebugPings = false; - rto->autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing - rto->syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) - rto->forceRetime = false; - rto->syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation - rto->phaseADC = 16; - rto->phaseSP = 16; - rto->failRetryAttempts = 0; - rto->isCustomPreset = false; - rto->HPLLState = 0; - rto->motionAdaptiveDeinterlaceActive = false; - rto->deinterlaceAutoEnabled = true; - // rto->scanlinesEnabled = false; - rto->boardHasPower = true; - rto->presetIsPalForce60 = false; - rto->syncTypeCsync = false; - rto->isValidForScalingRGBHV = false; - rto->medResLineCount = 0x33; // 51*8=408 - rto->osr = 0; - rto->useHdmiSyncFix = 0; - rto->notRecognizedCounter = 0; - - rto->inputIsYPbPr = false; - rto->videoStandardInput = 0; - // rto->outModeHdBypass = false; - // rto->videoIsFrozen = false; - rto->printInfos = false; - rto->sourceDisconnected = true; - rto->isInLowPowerMode = false; - rto->applyPresetDoneStage = 0; - rto->presetVlineShift = 0; - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - rto->continousStableCounter = 0; - rto->currentLevelSOG = 5; - rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run - - // dev - uopt->invertSync = false; - uopt->debugView = false; - uopt->developerMode = false; - uopt->freezeCapture = false; - uopt->adcFilter = true; - - adco->r_gain = 0; - adco->g_gain = 0; - adco->b_gain = 0; - adco->r_off = 0; - adco->g_off = 0; - adco->b_off = 0; + // prefsLoadDefaults(); + // rto.systemInitOK = false; + // rto.allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface + // // rto.enableDebugPings = false; + // rto.autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing + // rto.syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) + // rto.forceRetime = false; + // rto.syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation + // rto.phaseADC = 16; + // rto.phaseSP = 16; + // rto.failRetryAttempts = 0; + // rto.isCustomPreset = false; + // rto.HPLLState = 0; + // rto.motionAdaptiveDeinterlaceActive = false; + // rto.deinterlaceAutoEnabled = true; + // // rto.scanlinesEnabled = false; + // rto.boardHasPower = true; + // rto.presetIsPalForce60 = false; + // rto.syncTypeCsync = false; + // rto.isValidForScalingRGBHV = false; + // rto.medResLineCount = 0x33; // 51*8=408 + // rto.osr = 0; + // rto.useHdmiSyncFix = 0; + // rto.notRecognizedCounter = 0; + // rto.presetDisplayClock = 0; + // rto.inputIsYPbPr = false; + // rto.videoStandardInput = 0; + // // rto.outModeHdBypass = false; + // // rto.videoIsFrozen = false; + // rto.printInfos = false; + // rto.sourceDisconnected = true; + // rto.isInLowPowerMode = false; + // rto.applyPresetDoneStage = 0; + // rto.presetVlineShift = 0; + // rto.clampPositionIsSet = 0; + // rto.coastPositionIsSet = 0; + // rto.continousStableCounter = 0; + // rto.currentLevelSOG = 5; + // rto.thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run + // // dev + // uopt.invertSync = false; + // uopt.debugView = false; + // uopt.developerMode = false; + // uopt.freezeCapture = false; + // uopt.adcFilter = true; + // adco.r_gain = 0; + // adco.g_gain = 0; + // adco.b_gain = 0; + // adco.r_off = 0; + // adco.g_off = 0; + // adco.b_off = 0; pinMode(DEBUG_IN_PIN, INPUT); pinMode(LED_BUILTIN, OUTPUT); - LEDON; // enable the LED, lets users know the board is starting up - pinMode(PIN_CLK, INPUT_PULLUP); pinMode(PIN_DATA, INPUT_PULLUP); pinMode(PIN_SWITCH, INPUT_PULLUP); + LEDON; // enable the LED, lets users know the board is starting up // filesystem (web page, custom presets, etc) if (!LittleFS.begin()) { @@ -182,16 +180,13 @@ void setup() writeOneByte(0x00, 0); GBS::STATUS_00::read(); -#ifdef HAVE_PINGER_LIBRARY - pingLastTime = millis(); -#endif - #if WEB_SERVER_ENABLE == 1 wifiInit(); serverWebSocketInit(); serverInit(); #ifdef HAVE_PINGER_LIBRARY + pingLastTime = millis(); // pinger library pinger.OnReceive([](const PingerResponse &response) { if (response.ReceivedResponse) { @@ -219,20 +214,20 @@ void setup() wifiDisable(); #endif // WEB_SERVER_ENABLE - // delay 1 of 2 + // Splash screen delay + initDelay = millis(); // upped from < 500 to < 1500, allows more time for wifi and GBS startup while (millis() - initDelay < 1500) { display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); display.display(); - // wifiLoop(0); - delay(1); + optimistic_yield(1000); } display.clear(); - // if i2c established and chip running, issue software reset now - GBS::RESET_CONTROL_0x46::write(0); - GBS::RESET_CONTROL_0x47::write(0); - GBS::PLLAD_VCORST::write(1); - GBS::PLLAD_PDZ::write(0); // AD PLL off + + // software reset + resetAllOffline(); + delay(100); + resetAllOnline(); // load user preferences file if(!prefsLoad()) @@ -251,19 +246,18 @@ void setup() // delay 2 of 2 // ? WHY? - initDelay = millis(); - while (millis() - initDelay < 1000) { - // wifiLoop(0); - delay(10); - } + // initDelay = millis(); + // while (millis() - initDelay < 1000) { + // // wifiLoop(0); + // delay(10); + // } // dummy commands - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); - // check board vitals - if (!checkBoardPower()) { + /* if (!checkBoardPower()) { _DBGN(F("(!) board has no power")); int i = 0; stopWire(); // sets pinmodes SDA, SCL to INPUT @@ -288,47 +282,47 @@ void setup() if (!checkBoardPower()) { stopWire(); - rto->syncWatcherEnabled = false; + rto.syncWatcherEnabled = false; _DBGN(F("(!) timeout, unable to init board connection")); } else { - rto->syncWatcherEnabled = true; - _DBGN(F("(!) power is recovered")); + rto.syncWatcherEnabled = true; + _DBGN(F("board power is OK")); } - } + } */ // if (powerOrWireIssue == 0) { - if (rto->boardHasPower) { + if (checkBoardPower()) { // second init, in cases where i2c got stuck earlier but has recovered // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running - if (!rto->extClockGenDetected && retryExtClockDetect) + if (!rto.extClockGenDetected && retryExtClockDetect) externalClockGenDetectAndInitialize(); zeroAll(); setResetParameters(); prepareSyncProcessor(); - if (uopt->enableCalibrationADC) { + if (uopt.enableCalibrationADC) { // enabled by default calibrateAdcOffset(); } // prefs data loaded, load current slot - if(!slotLoad(uopt->slotID)) - slotResetFlush(uopt->slotID); + if(!slotLoad(uopt.slotID)) + slotResetFlush(uopt.slotID); - // rto->syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here + // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here // inputAndSyncDetect(); - // if (rto->syncWatcherEnabled == true) { - // rto->isInLowPowerMode = true; // just for initial detection; simplifies code later + // if (rto.syncWatcherEnabled == true) { + // rto.isInLowPowerMode = true; // just for initial detection; simplifies code later // for (uint8_t i = 0; i < 3; i++) { // if (inputAndSyncDetect()) { // break; // } // } - // rto->isInLowPowerMode = false; + // rto.isInLowPowerMode = false; // } } else { - _WSN(F("Please check board power and cabling or restart!")); + _WSN(F("\n (!) Please check board power and cabling or restart\n")); return; } @@ -337,20 +331,20 @@ void setup() // some debug tools leave garbage in the serial rx buffer discardSerialRxData(); - _DBGF(PSTR("\n\n GBS-Control v.%s\n\n\nTV id: 0x%02X rev: 0x%02X\n"), + _DBGF(PSTR("\n GBS-Control v.%s\n\n\nTV id: 0x%02X rev: 0x%02X\n"), STRING(VERSION), GBS::CHIP_ID_PRODUCT::read(), GBS::CHIP_ID_REVISION::read() ); // system init is OK - rto->systemInitOK = true; + rto.systemInitOK = true; } void loop() { // stay in loop_wrapper if setup has not been completed - if(!rto->systemInitOK) return; + if(!rto.systemInitOK) return; static unsigned long lastTimeSyncWatcher = millis(); // 500 to start right away (after setup it will be 2790ms when we get here) @@ -361,10 +355,10 @@ void loop() wifiLoop(); // run FrameTimeLock if enabled - if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false - && rto->autoBestHtotalEnabled && rto->syncWatcherEnabled + if (uopt.enableFrameTimeLock && rto.sourceDisconnected == false + && rto.autoBestHtotalEnabled && rto.syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval - && rto->continousStableCounter > 20 && rto->noSyncCounter == 0) + && rto.continousStableCounter > 20 && rto.noSyncCounter == 0) { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); @@ -377,15 +371,15 @@ void loop() // unsigned long startTime = millis(); _DBGF( PSTR("running frame sync, clock gen enabled = %d\n"), - rto->extClockGenDetected + rto.extClockGenDetected ); - bool success = rto->extClockGenDetected ? FrameSync::runFrequency() : FrameSync::runVsync(uopt->frameTimeLockMethod); + bool success = rto.extClockGenDetected ? FrameSync::runFrequency() : FrameSync::runVsync(uopt.frameTimeLockMethod); if (!success) { - if (rto->syncLockFailIgnore-- == 0) { - FrameSync::reset(uopt->frameTimeLockMethod); // in case run() failed because we lost sync signal + if (rto.syncLockFailIgnore-- == 0) { + FrameSync::reset(uopt.frameTimeLockMethod); // in case run() failed because we lost sync signal } - } else if (rto->syncLockFailIgnore > 0) { - rto->syncLockFailIgnore = 16; + } else if (rto.syncLockFailIgnore > 0) { + rto.syncLockFailIgnore = 16; } // _WSN(millis() - startTime); @@ -398,7 +392,7 @@ _DBGN(F("11")); } // syncWatcherEnabled is enabled by-default - if (rto->syncWatcherEnabled && rto->boardHasPower) { + if (rto.syncWatcherEnabled && rto.boardHasPower) { if ((millis() - lastTimeInterruptClear) > 3000) { GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD GBS::INTERRUPT_CONTROL_00::write(0x00); @@ -407,29 +401,29 @@ _DBGN(F("11")); } // TODO heavy load for serial and WS. to reimplement - if (rto->printInfos == true) { + if (rto.printInfos == true) { printInfo(); } // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; // if (testbus >= 0x0FFD){ // _WSN(testbus,HEX); // } - // if (rto->videoIsFrozen && (rto->continousStableCounter >= 2)) { + // if (rto.videoIsFrozen && (rto.continousStableCounter >= 2)) { // unfreezeVideo(); // } // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes - if (rto->sourceDisconnected == false && rto->syncWatcherEnabled == true + if (rto.sourceDisconnected == false && rto.syncWatcherEnabled == true && (millis() - lastTimeSyncWatcher) > 20) { runSyncWatcher(); lastTimeSyncWatcher = millis(); // auto adc gain - if (uopt->enableAutoGain == 1 && !rto->sourceDisconnected - && rto->videoStandardInput > 0 && rto->clampPositionIsSet - && rto->noSyncCounter == 0 && rto->continousStableCounter > 90 - && rto->boardHasPower) + if (uopt.enableAutoGain == 1 && !rto.sourceDisconnected + && rto.videoStandardInput > 0 && rto.clampPositionIsSet + && rto.noSyncCounter == 0 && rto.continousStableCounter > 90 + && rto.boardHasPower) { uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); @@ -451,10 +445,10 @@ _DBGN(F("11")); // init frame sync + besthtotal routine // autoBestHtotalEnabled is enabled by default - if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { - if (rto->continousStableCounter >= 10 && rto->coastPositionIsSet && + if (rto.autoBestHtotalEnabled && !FrameSync::ready() && rto.syncWatcherEnabled) { + if (rto.continousStableCounter >= 10 && rto.coastPositionIsSet && ((millis() - lastVsyncLock) > 500)) { - if ((rto->continousStableCounter % 5) == 0) { // 5, 10, 15, .., 255 + if ((rto.continousStableCounter % 5) == 0) { // 5, 10, 15, .., 255 uint16_t htotal = GBS::STATUS_SYNC_PROC_HTOTAL::read(); uint16_t pllad = GBS::PLLAD_MD::read(); if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { @@ -465,12 +459,12 @@ _DBGN(F("11")); } // update clamp + coast positions after preset change // do it quickly - if ((rto->videoStandardInput <= 14 && rto->videoStandardInput != 0) && - rto->syncWatcherEnabled && !rto->coastPositionIsSet) { - if (rto->continousStableCounter >= 7) { - if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto->videoStandardInput)) { + if ((rto.videoStandardInput <= 14 && rto.videoStandardInput != 0) && + rto.syncWatcherEnabled && !rto.coastPositionIsSet) { + if (rto.continousStableCounter >= 7) { + if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto.videoStandardInput)) { updateCoastPosition(0); - if (rto->coastPositionIsSet && videoStandardInputIsPalNtscSd()) { + if (rto.coastPositionIsSet && videoStandardInputIsPalNtscSd()) { // TODO: verify for other csync formats GBS::SP_DIS_SUB_COAST::write(0); // enable 5_3e 5 GBS::SP_H_PROTECT::write(0); // no 5_3e 4 @@ -480,42 +474,42 @@ _DBGN(F("11")); } // don't exclude modes 13 / 14 / 15 (rgbhv bypass) - if ((rto->videoStandardInput != 0) && (rto->continousStableCounter >= 4) && - !rto->clampPositionIsSet && rto->syncWatcherEnabled) { + if ((rto.videoStandardInput != 0) && (rto.continousStableCounter >= 4) && + !rto.clampPositionIsSet && rto.syncWatcherEnabled) { updateClampPosition(); - if (rto->clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { + if (rto.clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { GBS::SP_NO_CLAMP_REG::write(0); _DBGN(F("6")); } } // later stage post preset adjustments - if ((rto->applyPresetDoneStage == 1) && - ((rto->continousStableCounter > 35 && rto->continousStableCounter < 45) || // this - !rto->syncWatcherEnabled)) // or that + if ((rto.applyPresetDoneStage == 1) && + ((rto.continousStableCounter > 35 && rto.continousStableCounter < 45) || // this + !rto.syncWatcherEnabled)) // or that { - if (rto->applyPresetDoneStage == 1) { + if (rto.applyPresetDoneStage == 1) { // 2nd chance GBS::DAC_RGBS_PWDNZ::write(1); // 2nd chance - if (!uopt->wantOutputComponent) { + if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 2nd chance _DBGN(F("72")); } - if (!rto->syncWatcherEnabled) { + if (!rto.syncWatcherEnabled) { updateClampPosition(); GBS::SP_NO_CLAMP_REG::write(0); // 5_57 0 _DBGN(F("73")); } - if (rto->extClockGenDetected && rto->videoStandardInput != 14) { + if (rto.extClockGenDetected && rto.videoStandardInput != 14) { // switch to ext clock - // if (!rto->outModeHdBypass) { - if (uopt->resolutionID != OutputHdBypass) { + // if (!rto.outModeHdBypass) { + if (uopt.resolutionID != OutputHdBypass) { uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D // GBS::GBS_PRESET_DISPLAY_CLOCK::write(pll648_value); - rto->presetDisplayClock = pll648_value; + rto.presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -528,49 +522,49 @@ _DBGN(F("75")); externalClockGenSyncInOutRate(); _DBGN(F("74")); } - rto->applyPresetDoneStage = 0; + rto.applyPresetDoneStage = 0; _DBGN(F("71")); } - } else if (rto->applyPresetDoneStage == 1 && (rto->continousStableCounter > 35)) { + } else if (rto.applyPresetDoneStage == 1 && (rto.continousStableCounter > 35)) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance - if (!uopt->wantOutputComponent) { + if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 3rd chance _DBGN(F("81")); } // sync clocks now externalClockGenSyncInOutRate(); - rto->applyPresetDoneStage = 0; // timeout + rto.applyPresetDoneStage = 0; // timeout _DBGN(F("8")); } - if (rto->applyPresetDoneStage == 10) { - rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets + if (rto.applyPresetDoneStage == 10) { + rto.applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutputHdBypassMode(false); _DBGN(F("9")); } // Input signal detection - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { + if (rto.syncWatcherEnabled == true && rto.sourceDisconnected == true && rto.boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { if (checkBoardPower()) { inputAndSyncDetect(); } else { - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - rto->syncWatcherEnabled = false; + // rto.boardHasPower = false; + rto.continousStableCounter = 0; + rto.syncWatcherEnabled = false; } lastTimeSourceCheck = millis(); // vary SOG slicer level from 2 to 6 uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); if (currentSOG >= 3) { - rto->currentLevelSOG = currentSOG - 1; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + rto.currentLevelSOG = currentSOG - 1; + GBS::ADC_SOGCTRL::write(rto.currentLevelSOG); } else { - rto->currentLevelSOG = 6; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + rto.currentLevelSOG = 6; + GBS::ADC_SOGCTRL::write(rto.currentLevelSOG); } } } @@ -578,23 +572,22 @@ _DBGN(F("9")); // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues - if ((rto->noSyncCounter == 61 || rto->noSyncCounter == 62) && rto->boardHasPower) { + if ((rto.noSyncCounter == 61 || rto.noSyncCounter == 62) && rto.boardHasPower) { if (!checkBoardPower()) { - rto->noSyncCounter = 1; // some neutral "no sync" value - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - // rto->syncWatcherEnabled = false; + rto.noSyncCounter = 1; // some neutral "no sync" value + rto.continousStableCounter = 0; + // rto.syncWatcherEnabled = false; stopWire(); // sets pinmodes SDA, SCL to INPUT - _DBGN(F("(!) board has lost power")); + _DBGN(F("(!) TWI has been stopped")); } else { - rto->noSyncCounter = 63; // avoid checking twice + rto.noSyncCounter = 63; // avoid checking twice } } // power good now? // added syncWatcherEnabled check to enable passive mode // (passive mode = watching OFW without interrupting) - if (!rto->boardHasPower && rto->syncWatcherEnabled) { // then check if power has come on + if (!rto.boardHasPower && rto.syncWatcherEnabled) { // then check if power has come on if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { @@ -609,9 +602,9 @@ _DBGN(F("9")); writeOneByte(0x00, 0); // update cached segment GBS::STATUS_00::read(); } - rto->syncWatcherEnabled = true; - rto->boardHasPower = true; - delay(100); + rto.syncWatcherEnabled = true; + rto.boardHasPower = true; + // delay(100); goLowPowerWithInputDetection(); } } @@ -620,7 +613,7 @@ _DBGN(F("9")); #ifdef HAVE_PINGER_LIBRARY // periodic pings for debugging WiFi issues if (WiFi.status() == WL_CONNECTED) { - if (rto->enableDebugPings && millis() - pingLastTime > 1000) { + if (rto.enableDebugPings && millis() - pingLastTime > 1000) { // regular interval pings if (pinger.Ping(WiFi.gatewayIP(), 1, 750) == false) { _WSN(F("Error during last ping command.")); @@ -643,7 +636,7 @@ _DBGN(F("9")); // websocket event handler webSocket.loop(); // handle ArduinoIDE - if (rto->allowUpdatesOTA) { + if (rto.allowUpdatesOTA) { ArduinoOTA.handle(); } #endif diff --git a/src/menu.cpp b/src/menu.cpp index 0d17a9b6..21eb116f 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Sunday, 16th June 2024 2:32:56 am # +# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -193,12 +193,12 @@ void settingsMenuOLED() display.display(); } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; - // uopt->presetPreference = Output960P; - uopt->resolutionID = Output960p; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + videoMode = rto.videoStandardInput; + // uopt.presetPreference = Output960P; + uopt.resolutionID = Output960p; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // saveUserPrefs(); @@ -217,12 +217,12 @@ void settingsMenuOLED() display.display(); } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; - // uopt->presetPreference = Output1024P; - uopt->resolutionID = Output1024p; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + videoMode = rto.videoStandardInput; + // uopt.presetPreference = Output1024P; + uopt.resolutionID = Output1024p; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // saveUserPrefs(); @@ -241,12 +241,12 @@ void settingsMenuOLED() display.display(); } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; - // uopt->presetPreference = Output720P; - uopt->resolutionID = Output720p; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + videoMode = rto.videoStandardInput; + // uopt.presetPreference = Output720P; + uopt.resolutionID = Output720p; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // saveUserPrefs(); @@ -265,12 +265,12 @@ void settingsMenuOLED() display.display(); } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; - // uopt->presetPreference = Output1080P; - uopt->resolutionID = Output1080p; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + videoMode = rto.videoStandardInput; + // uopt.presetPreference = Output1080P; + uopt.resolutionID = Output1080p; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // saveUserPrefs(); @@ -289,11 +289,11 @@ void settingsMenuOLED() display.display(); } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; - uopt->resolutionID = Output480p; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + videoMode = rto.videoStandardInput; + uopt.resolutionID = Output480p; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // saveUserPrefs(); @@ -312,12 +312,12 @@ void settingsMenuOLED() display.display(); } if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; - // uopt->presetPreference = OutputDownscale; - uopt->resolutionID = Output15kHz; - rto->useHdmiSyncFix = 1; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + videoMode = rto.videoStandardInput; + // uopt.presetPreference = OutputDownscale; + uopt.resolutionID = Output15kHz; + rto.useHdmiSyncFix = 1; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // saveUserPrefs(); @@ -336,17 +336,17 @@ void settingsMenuOLED() display.display(); } setOutputHdBypassMode(false); - // uopt->presetPreference = OutputBypass; - // if (uopt->presetPreference == 10 && rto->videoStandardInput != 15) { - if (rto->videoStandardInput != 15) { - rto->autoBestHtotalEnabled = 0; - if (rto->applyPresetDoneStage == 11) { - rto->applyPresetDoneStage = 1; + // uopt.presetPreference = OutputBypass; + // if (uopt.presetPreference == 10 && rto.videoStandardInput != 15) { + if (rto.videoStandardInput != 15) { + rto.autoBestHtotalEnabled = 0; + if (rto.applyPresetDoneStage == 11) { + rto.applyPresetDoneStage = 1; } else { - rto->applyPresetDoneStage = 10; + rto.applyPresetDoneStage = 10; } } else { - rto->applyPresetDoneStage = 1; + rto.applyPresetDoneStage = 1; } // saveUserPrefs(); savePresetToFS(); @@ -389,10 +389,10 @@ void settingsMenuOLED() if (oled_menuItem == 2) { if (oled_pointer_count == 0 && oled_selectOption == 2) { oled_subsetFrame = 3; - uopt->slotID = 0; - // uopt->slotID = 'A'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + uopt.slotID = 0; + // uopt.slotID = 'A'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -402,12 +402,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); // display loading conf } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -417,9 +417,9 @@ void settingsMenuOLED() } if (oled_pointer_count == 1 && oled_selectOption == 2) { oled_subsetFrame = 3; - // uopt->slotID = 'B'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + // uopt.slotID = 'B'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -429,12 +429,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -444,9 +444,9 @@ void settingsMenuOLED() } if (oled_pointer_count == 2 && oled_selectOption == 2) { oled_subsetFrame = 3; - // uopt->slotID = 'C'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + // uopt.slotID = 'C'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -456,12 +456,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -471,9 +471,9 @@ void settingsMenuOLED() } if (oled_pointer_count == 3 && oled_selectOption == 2) { oled_subsetFrame = 3; - // uopt->slotID = 'D'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + // uopt.slotID = 'D'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -483,12 +483,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -498,9 +498,9 @@ void settingsMenuOLED() } if (oled_pointer_count == 4 && oled_selectOption == 2) { oled_subsetFrame = 3; - // uopt->slotID = 'E'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + // uopt.slotID = 'E'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -510,12 +510,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -525,9 +525,9 @@ void settingsMenuOLED() } if (oled_pointer_count == 5 && oled_selectOption == 2) { oled_subsetFrame = 3; - // uopt->slotID = 'F'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + // uopt.slotID = 'F'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -537,12 +537,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -552,9 +552,9 @@ void settingsMenuOLED() } if (oled_pointer_count == 6 && oled_selectOption == 2) { oled_subsetFrame = 3; - // uopt->slotID = 'G'; - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; + // uopt.slotID = 'G'; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; // saveUserPrefs(); for (int i = 0; i <= 280; i++) { display.clear(); @@ -564,12 +564,12 @@ void settingsMenuOLED() display.drawString(64, 15, "Loaded!"); display.display(); } - // uopt->presetPreference = OutputCustomized; - uopt->resolutionID = OutputCustom; - if (rto->videoStandardInput == 14) { - rto->videoStandardInput = 15; + // uopt.presetPreference = OutputCustomized; + uopt.resolutionID = OutputCustom; + if (rto.videoStandardInput == 14) { + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // saveUserPrefs(); savePresetToFS(); } @@ -651,8 +651,8 @@ void settingsMenuOLED() bool hsyncActive = 0; float ofr = getOutputFrameRate(); uint8_t currentInput = GBS::ADC_INPUT_SEL::read(); - // rto->presetID = GBS::GBS_PRESET_ID::read(); - uopt->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); + // rto.presetID = GBS::GBS_PRESET_ID::read(); + uopt.resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); oled_page = 1; oled_pointer_count = 0; @@ -663,26 +663,26 @@ void settingsMenuOLED() display.setFont(URW_Gothic_L_Book_20); display.setTextAlignment(TEXT_ALIGN_LEFT); - // if (rto->presetID == 0x01 || rto->presetID == 0x11) { - if (uopt->resolutionID == Output960p || uopt->resolutionID == Output960p50) { + // if (rto.presetID == 0x01 || rto.presetID == 0x11) { + if (uopt.resolutionID == Output960p || uopt.resolutionID == Output960p50) { display.drawString(0, 0, "1280x960"); - // } else if (rto->presetID == 0x02 || rto->presetID == 0x12) { - } else if (uopt->resolutionID == Output1024p || uopt->resolutionID == Output1024p50) { + // } else if (rto.presetID == 0x02 || rto.presetID == 0x12) { + } else if (uopt.resolutionID == Output1024p || uopt.resolutionID == Output1024p50) { display.drawString(0, 0, "1280x1024"); - // } else if (rto->presetID == 0x03 || rto->presetID == 0x13) { - } else if (uopt->resolutionID == Output720p || uopt->resolutionID == Output720p50) { + // } else if (rto.presetID == 0x03 || rto.presetID == 0x13) { + } else if (uopt.resolutionID == Output720p || uopt.resolutionID == Output720p50) { display.drawString(0, 0, "1280x720"); - // } else if (rto->presetID == 0x05 || rto->presetID == 0x15) { - } else if (uopt->resolutionID == Output1080p || uopt->resolutionID == Output1080p50) { + // } else if (rto.presetID == 0x05 || rto.presetID == 0x15) { + } else if (uopt.resolutionID == Output1080p || uopt.resolutionID == Output1080p50) { display.drawString(0, 0, "1920x1080"); - // } else if (rto->presetID == 0x06 || rto->presetID == 0x16) { - } else if (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50) { + // } else if (rto.presetID == 0x06 || rto.presetID == 0x16) { + } else if (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50) { display.drawString(0, 0, "Downscale"); - // } else if (rto->presetID == 0x04) { - } else if (uopt->resolutionID == Output480p) { + // } else if (rto.presetID == 0x04) { + } else if (uopt.resolutionID == Output480p) { display.drawString(0, 0, "720x480"); - // } else if (rto->presetID == 0x14) { - } else if (uopt->resolutionID == Output576p50) { + // } else if (rto.presetID == 0x14) { + } else if (uopt.resolutionID == Output576p50) { display.drawString(0, 0, "768x576"); } else if (utilsIsPassThroughMode()) { display.drawString(0, 0, "bypass"); diff --git a/src/options.h b/src/options.h index 2916158f..ce53f604 100644 --- a/src/options.h +++ b/src/options.h @@ -150,48 +150,48 @@ enum OutputResolution : uint8_t { }; // userOptions holds user preferences / customizations -struct userOptions +typedef struct { - OutputResolution resolutionID; - uint8_t slotID; - bool enableFrameTimeLock; - uint8_t frameTimeLockMethod; - bool enableAutoGain; - bool wantScanlines; - bool wantOutputComponent; - uint8_t deintMode; - bool wantVdsLineFilter; - bool wantPeaking; - bool wantTap6; - bool preferScalingRgbhv; - bool PalForce60; - bool disableExternalClockGenerator; + OutputResolution resolutionID = OutputHdBypass; + uint8_t slotID = 0; + bool enableFrameTimeLock = false; + uint8_t frameTimeLockMethod = 0; + bool enableAutoGain = false; + bool wantScanlines = false; + bool wantOutputComponent = false; + uint8_t deintMode = 1; + bool wantVdsLineFilter = false; + bool wantPeaking = false; + bool wantTap6 = false; + bool preferScalingRgbhv = true; + bool PalForce60 = false; + bool disableExternalClockGenerator = false; // uint8_t matchPresetSource; - bool wantStepResponse; - bool wantFullHeight; - bool enableCalibrationADC; - uint8_t scanlineStrength; + bool wantStepResponse = true; + bool wantFullHeight = true; + bool enableCalibrationADC = true; + uint8_t scanlineStrength = SCANLINE_STRENGTH_INIT; // dev - bool invertSync; - bool debugView; - bool developerMode; - bool freezeCapture; - bool adcFilter; -}; + bool invertSync = false; + bool debugView = false; + bool developerMode = false; + bool freezeCapture = false; + bool adcFilter = true; +} userOptions; // runTimeOptions holds system variables -struct runTimeOptions +typedef struct { // system state - bool systemInitOK; + bool systemInitOK = false; // source identification - bool boardHasPower; - uint8_t continousStableCounter; - bool syncWatcherEnabled; - bool inputIsYPbPr; - uint8_t currentLevelSOG; - bool isInLowPowerMode; - bool sourceDisconnected; + bool boardHasPower = true; // ambigous, it is enough to checkBoardPower at all times + uint8_t continousStableCounter = 0; + bool syncWatcherEnabled = true; + bool inputIsYPbPr = false; + uint8_t currentLevelSOG = 5; + bool isInLowPowerMode = false; + bool sourceDisconnected = true; /** * @brief This variable is used to store an active videoID (of the last detection). * Video input ID (see: getVideoMode()): @@ -212,70 +212,76 @@ struct runTimeOptions * 14 - ? RGB/HV (setOutputRGBHVBypassMode) <---------⨼ * 15 - RGB/HV (setOutputRGBHVBypassMode) <--- RGBHV Bypass */ - uint8_t videoStandardInput; - bool syncTypeCsync; + uint8_t videoStandardInput = 0; + bool syncTypeCsync = false; uint8_t thisSourceMaxLevelSOG; - uint8_t medResLineCount; + uint8_t medResLineCount = 0x33; // 51*8=408; // - bool isCustomPreset; - uint8_t presetDisplayClock; - uint32_t freqExtClockGen; - uint16_t noSyncCounter; // is always at least 1 when checking value in syncwatcher - uint8_t presetVlineShift; - uint8_t phaseSP; - uint8_t phaseADC; - uint8_t syncLockFailIgnore; - uint8_t applyPresetDoneStage; - uint8_t failRetryAttempts; - uint8_t HPLLState; - uint8_t osr; - uint8_t notRecognizedCounter; - bool clampPositionIsSet; - bool coastPositionIsSet; - bool phaseIsSet; + bool isCustomPreset = false; + uint8_t presetDisplayClock = 0; + uint32_t freqExtClockGen = 0; + uint16_t noSyncCounter = 0; // is always at least 1 when checking value in syncwatcher + uint8_t presetVlineShift = 0; + uint8_t phaseSP = 16; + uint8_t phaseADC = 16; + uint8_t syncLockFailIgnore = 16; + uint8_t applyPresetDoneStage = 0; + uint8_t failRetryAttempts = 0; + uint8_t HPLLState = 0; + uint8_t osr = 0; + uint8_t notRecognizedCounter = 0; + bool clampPositionIsSet = false; + bool coastPositionIsSet = false; + bool phaseIsSet = false; // bool outModeHdBypass; - bool printInfos; - bool allowUpdatesOTA; - bool enableDebugPings; - bool autoBestHtotalEnabled; - bool videoIsFrozen; - bool forceRetime; - bool motionAdaptiveDeinterlaceActive; - bool deinterlaceAutoEnabled; + bool printInfos = false; + bool allowUpdatesOTA = false; +#ifdef HAVE_PINGER_LIBRARY + bool enableDebugPings = false; +#endif + bool autoBestHtotalEnabled = true; + // bool videoIsFrozen = false; + bool forceRetime = false; + bool motionAdaptiveDeinterlaceActive = false; + bool deinterlaceAutoEnabled = true; // bool scanlinesEnabled; - bool presetIsPalForce60; - bool isValidForScalingRGBHV; - bool useHdmiSyncFix; - bool extClockGenDetected; -}; + bool presetIsPalForce60 = false; + bool isValidForScalingRGBHV = false; + bool useHdmiSyncFix = false; + bool extClockGenDetected = false; +} runTimeOptions; + // remember adc options across presets -struct adcOptions +typedef struct { - // If `uopt->enableAutoGain == 1` and we're not before/during - // doPostPresetLoadSteps(), `adco->r_gain` must match `GBS::ADC_RGCTRL`. + // If `uopt.enableAutoGain == 1` and we're not before/during + // doPostPresetLoadSteps(), `adco.r_gain` must match `GBS::ADC_RGCTRL`. // - // When we either set `uopt->enableAutoGain = 1` or call + // When we either set `uopt.enableAutoGain = 1` or call // `GBS::ADC_RGCTRL::write()`, we must either call - // `GBS::ADC_RGCTRL::write(adco->r_gain)`, or set `adco->r_gain = + // `GBS::ADC_RGCTRL::write(adco.r_gain)`, or set `adco.r_gain = // GBS::ADC_RGCTRL::read()`. - uint8_t r_gain; - uint8_t g_gain; - uint8_t b_gain; - uint8_t r_off; - uint8_t g_off; - uint8_t b_off; -}; + uint8_t r_gain = 0; + uint8_t g_gain = 0; + uint8_t b_gain = 0; + uint8_t r_off = 0; + uint8_t g_off = 0; + uint8_t b_off = 0; +} adcOptions; /// Video processing mode, loaded into register GBS_PRESET_ID by applyPresets() -/// and read to rto->presetID by doPostPresetLoadSteps(). Shown on web UI. +/// and read to rto.presetID by doPostPresetLoadSteps(). Shown on web UI. // enum PresetID : uint8_t { // OutputHdBypass = 0x21, // OutputRGBHVBypass = 0x22, // }; -extern struct runTimeOptions *rto; -extern struct userOptions *uopt; -extern struct adcOptions *adco; +// extern struct runTimeOptions *rto; +extern runTimeOptions rto; +// extern struct userOptions *uopt; +extern userOptions uopt; +// extern struct adcOptions *adco; +extern adcOptions adco; // const char preset_ntsc[] PROGMEM = "/preset_ntsc."; // const char preset_pal[] PROGMEM = "/preset_pal."; diff --git a/src/prefs.cpp b/src/prefs.cpp index 3ce0c6f2..b159a19b 100644 --- a/src/prefs.cpp +++ b/src/prefs.cpp @@ -3,7 +3,7 @@ # File: prefs.cpp # # File Created: Thursday, 13th June 2024 12:16:38 am # # Author: Sergey Ko # -# Last Modified: Sunday, 16th June 2024 1:45:22 am # +# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -18,26 +18,26 @@ */ void prefsLoadDefaults() { - // uopt->resolutionID = Output240p; - // uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! - // uopt->slotID = 0; // - // uopt->frameTimeLockMethod = 0; // compatibility with more displays - // uopt->enableAutoGain = 0; - // uopt->wantScanlines = 0; - // uopt->scanlineStrength = 0x30; // #18 - // uopt->deintMode = 0; - // uopt->wantVdsLineFilter = 0; - // uopt->wantPeaking = 1; - // uopt->wantTap6 = 1; - // uopt->PalForce60 = 0; - // uopt->matchPresetSource = 1; // #14 - // uopt->wantStepResponse = 1; // #15 - // uopt->wantFullHeight = 1; // #16 + // uopt.resolutionID = Output240p; + // uopt.enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! + // uopt.slotID = 0; // + // uopt.frameTimeLockMethod = 0; // compatibility with more displays + // uopt.enableAutoGain = 0; + // uopt.wantScanlines = 0; + // uopt.scanlineStrength = 0x30; // #18 + // uopt.deintMode = 0; + // uopt.wantVdsLineFilter = 0; + // uopt.wantPeaking = 1; + // uopt.wantTap6 = 1; + // uopt.PalForce60 = 0; + // uopt.matchPresetSource = 1; // #14 + // uopt.wantStepResponse = 1; // #15 + // uopt.wantFullHeight = 1; // #16 - uopt->wantOutputComponent = 0; - uopt->preferScalingRgbhv = 1; - uopt->enableCalibrationADC = 1; // #17 - uopt->disableExternalClockGenerator = 0; // #19 + uopt.wantOutputComponent = false; + uopt.preferScalingRgbhv = true; + uopt.enableCalibrationADC = true; // #17 + uopt.disableExternalClockGenerator = false; // #19 } /** @@ -50,15 +50,15 @@ bool prefsLoad() { fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); if (!f) { _WSN(F("no preferences file yet, create new")); - prefsLoadDefaults(); + // prefsLoadDefaults(); prefsSave(); return false; } - uopt->slotID = f.read(); - uopt->wantOutputComponent = static_cast(f.read()); - uopt->preferScalingRgbhv = static_cast(f.read()); - uopt->enableCalibrationADC = static_cast(f.read()); - uopt->disableExternalClockGenerator = static_cast(f.read()); + uopt.slotID = f.read(); + uopt.wantOutputComponent = static_cast(f.read()); + uopt.preferScalingRgbhv = static_cast(f.read()); + uopt.enableCalibrationADC = static_cast(f.read()); + uopt.disableExternalClockGenerator = static_cast(f.read()); f.close(); return true; @@ -77,11 +77,11 @@ bool prefsSave() { _WSF(PSTR("open %s file failed\n"), FPSTR(preferencesFile)); return false; } - f.write(uopt->slotID); - f.write((uopt->wantOutputComponent ? 1 : 0)); - f.write((uopt->preferScalingRgbhv ? 1 : 0)); - f.write((uopt->enableCalibrationADC ? 1 : 0)); - f.write((uopt->disableExternalClockGenerator ? 1 : 0)); + f.write(uopt.slotID); + f.write((uopt.wantOutputComponent ? 1 : 0)); + f.write((uopt.preferScalingRgbhv ? 1 : 0)); + f.write((uopt.enableCalibrationADC ? 1 : 0)); + f.write((uopt.disableExternalClockGenerator ? 1 : 0)); f.close(); _WSF(PSTR("%s update success\n"), FPSTR(preferencesFile)); diff --git a/src/presets.cpp b/src/presets.cpp index 68db3f59..560f57e2 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Tuesday, 18th June 2024 12:42:27 am # +# Last Modified: Wednesday, 19th June 2024 12:43:23 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -39,51 +39,50 @@ void loadPresetMdSection() */ void setResetParameters() { - // TODO: do we reset resolution here? - rto->videoStandardInput = 0; - rto->presetDisplayClock = 0; - // rto->videoIsFrozen = false; - rto->applyPresetDoneStage = 0; - rto->presetVlineShift = 0; - rto->sourceDisconnected = true; - // rto->outModeHdBypass = 0; - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - rto->phaseIsSet = 0; - rto->continousStableCounter = 0; - rto->noSyncCounter = 0; - rto->isInLowPowerMode = false; - rto->currentLevelSOG = 5; - rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run - rto->failRetryAttempts = 0; - rto->HPLLState = 0; - rto->motionAdaptiveDeinterlaceActive = false; - // rto->scanlinesEnabled = false; - rto->syncTypeCsync = false; - rto->isValidForScalingRGBHV = false; - rto->medResLineCount = 0x33; // 51*8=408 - rto->osr = 0; - rto->useHdmiSyncFix = 0; - rto->notRecognizedCounter = 0; + rto.videoStandardInput = 0; + rto.presetDisplayClock = 0; + // rto.videoIsFrozen = false; + rto.applyPresetDoneStage = 0; + rto.presetVlineShift = 0; + rto.sourceDisconnected = true; + // rto.outModeHdBypass = 0; + rto.clampPositionIsSet = 0; + rto.coastPositionIsSet = 0; + rto.phaseIsSet = 0; + rto.continousStableCounter = 0; + rto.noSyncCounter = 0; + rto.isInLowPowerMode = false; + rto.currentLevelSOG = 5; + rto.thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run + rto.failRetryAttempts = 0; + rto.HPLLState = 0; + rto.motionAdaptiveDeinterlaceActive = false; + // rto.scanlinesEnabled = false; + rto.syncTypeCsync = false; + rto.isValidForScalingRGBHV = false; + rto.medResLineCount = 0x33; // 51*8=408 + rto.osr = 0; + rto.useHdmiSyncFix = 0; + rto.notRecognizedCounter = 0; // this may not be reset here - // uopt->invertSync = false; - // uopt->debugView = false; - // uopt->developerMode = false; + // uopt.invertSync = false; + // uopt.debugView = false; + // uopt.developerMode = false; - adco->r_gain = 0; - adco->g_gain = 0; - adco->b_gain = 0; + adco.r_gain = 0; + adco.g_gain = 0; + adco.b_gain = 0; // clear temp storage - GBS::ADC_UNUSED_64::write(0); - GBS::ADC_UNUSED_65::write(0); - GBS::ADC_UNUSED_66::write(0); - GBS::ADC_UNUSED_67::write(0); + // GBS::ADC_UNUSED_64::write(0); + // GBS::ADC_UNUSED_65::write(0); + // GBS::ADC_UNUSED_66::write(0); + // GBS::ADC_UNUSED_67::write(0); // GBS::GBS_PRESET_CUSTOM::write(0); - GBS::GBS_PRESET_ID::write(0); // GBS::GBS_OPTION_SCALING_RGBHV::write(0); // GBS::GBS_OPTION_PALFORCED60_ENABLED::write(0); + GBS::GBS_PRESET_ID::write(0); // set minimum IF parameters GBS::IF_VS_SEL::write(1); @@ -105,7 +104,7 @@ void setResetParameters() GBS::SP_SOG_MODE::write(1); GBS::ADC_INPUT_SEL::write(1); // 1 = RGBS / RGBHV adc data input GBS::ADC_POWDZ::write(1); // ADC on - setAndUpdateSogLevel(rto->currentLevelSOG); + setAndUpdateSogLevel(rto.currentLevelSOG); GBS::RESET_CONTROL_0x46::write(0x00); // all units off GBS::RESET_CONTROL_0x47::write(0x00); GBS::GPIO_CONTROL_00::write(0x67); // most GPIO pins regular GPIO @@ -150,10 +149,10 @@ void setResetParameters() GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status GBS::INTERRUPT_CONTROL_00::write(0x00); GBS::PAD_SYNC_OUT_ENZ::write(0); // sync output enabled, will be low (HC125 fix) - rto->clampPositionIsSet = 0; // some functions override these, so make sure - rto->coastPositionIsSet = 0; - rto->phaseIsSet = 0; - rto->continousStableCounter = 0; + rto.clampPositionIsSet = 0; // some functions override these, so make sure + rto.coastPositionIsSet = 0; + rto.phaseIsSet = 0; + rto.continousStableCounter = 0; serialCommand = '@'; userCommand = '@'; @@ -167,19 +166,19 @@ void doPostPresetLoadSteps() { // unsigned long postLoadTimer = millis(); // delay(10); - // adco->r_gain gets applied if uopt->enableAutoGain is set. - if (uopt->enableAutoGain) + // adco.r_gain gets applied if uopt.enableAutoGain is set. + if (uopt.enableAutoGain) { - // if (uopt->presetPreference == OutputCustomized) { - if (rto->isCustomPreset) { + // if (uopt.presetPreference == OutputCustomized) { + if (rto.isCustomPreset) { // Loaded custom preset, we want to keep newly loaded gain. Save // gain written by loadPresetFromFS -> writeProgramArrayNew. - adco->r_gain = GBS::ADC_RGCTRL::read(); - adco->g_gain = GBS::ADC_GGCTRL::read(); - adco->b_gain = GBS::ADC_BGCTRL::read(); + adco.r_gain = GBS::ADC_RGCTRL::read(); + adco.g_gain = GBS::ADC_GGCTRL::read(); + adco.b_gain = GBS::ADC_BGCTRL::read(); } // else { - // Loaded fixed preset. Keep adco->r_gain from before + // Loaded fixed preset. Keep adco.r_gain from before // overwriting registers // } } @@ -188,34 +187,34 @@ void doPostPresetLoadSteps() // GBS::DAC_RGBS_PWDNZ::write(0); // no DAC // GBS::SFTRST_MEM_FF_RSTZ::write(0); // mem fifos keep in reset - if (rto->videoStandardInput == 0) + if (rto.videoStandardInput == 0) { uint8_t videoMode = getVideoMode(); - _WSF(PSTR("post preset: rto->videoStandardInput 0 > %d\n"), videoMode); + _WSF(PSTR("post preset: rto.videoStandardInput 0 > %d\n"), videoMode); if (videoMode > 0) { - rto->videoStandardInput = videoMode; + rto.videoStandardInput = videoMode; } } // set output resolution - // rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); - - GBS::ADC_UNUSED_64::write(0); - GBS::ADC_UNUSED_65::write(0); // clear temp storage - GBS::ADC_UNUSED_66::write(0); - GBS::ADC_UNUSED_67::write(0); // clear temp storage - GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) + // rto.isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); + // not existent and not used + // GBS::ADC_UNUSED_64::write(0); + // GBS::ADC_UNUSED_65::write(0); // clear temp storage + // GBS::ADC_UNUSED_66::write(0); + // GBS::ADC_UNUSED_67::write(0); // clear temp storage + // GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) // if preset is not loaded from FS - if (!rto->isCustomPreset) + if (!rto.isCustomPreset) { prepareSyncProcessor(); // todo: handle modes 14 and 15 better, now that they support scaling } - if (rto->videoStandardInput == 14) + if (rto.videoStandardInput == 14) { // copy of code in setOutputRGBHVBypassMode - if (rto->syncTypeCsync == false) + if (rto.syncTypeCsync == false) { GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: from hs // use ADC and turn it off = no SOG GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG // having it 0 drags down the SOG (hsync) input; = 1: need to supress SOG decoding @@ -230,8 +229,8 @@ void doPostPresetLoadSteps() GBS::SP_VS_POL_ATO::write(1); // 5_55 6 GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS GBS::SP_H_PROTECT::write(0); // 5_3e 4 disable for H/V - rto->phaseADC = 16; - rto->phaseSP = 8; + rto.phaseADC = 16; + rto.phaseSP = 8; } else { @@ -248,20 +247,20 @@ void doPostPresetLoadSteps() GBS::SP_SYNC_BYPS::write(0); // use regular sync for decimator (and sync out) path GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS GBS::SP_H_PROTECT::write(1); // 5_3e 4 enable for SOG - rto->currentLevelSOG = 24; - rto->phaseADC = 16; - rto->phaseSP = 8; + rto.currentLevelSOG = 24; + rto.phaseADC = 16; + rto.phaseSP = 8; } } GBS::SP_H_PROTECT::write(0); GBS::SP_COAST_INV_REG::write(0); // just in case - // if (!rto->outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) - // if (!rto->outModeHdBypass && !uopt->preferScalingRgbhv) - if (uopt->resolutionID != OutputHdBypass && !uopt->preferScalingRgbhv) + // if (!rto.outModeHdBypass && GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) + // if (!rto.outModeHdBypass && !uopt.preferScalingRgbhv) + if (uopt.resolutionID != OutputHdBypass && !uopt.preferScalingRgbhv) { // setOutputHdBypassMode has it's own and needs to update later - updateStopPositionDynamic(false); // remember: rto->videoStandardInput for RGB(C/HV) in scaling is 1, 2 or 3 here + updateStopPositionDynamic(false); // remember: rto.videoStandardInput for RGB(C/HV) in scaling is 1, 2 or 3 here } GBS::SP_NO_CLAMP_REG::write(1); // (keep) clamp disabled, to be enabled when position determined @@ -272,9 +271,11 @@ void doPostPresetLoadSteps() GBS::ADC_AUTO_OFST_DELAY::write(0); // sample delay 0 (1 to 4 pipes) GBS::ADC_AUTO_OFST_STEP::write(0); // 0 = abs diff, then 1 to 3 steps GBS::ADC_AUTO_OFST_TEST::write(1); - GBS::ADC_AUTO_OFST_RANGE_REG::write(0x00); // 5_0f U/V ranges = 0 (full range, 1 to 15) + // U/V ranges to 0 + GBS::ADC_AUTO_OFST_U_RANGE::write(0); + GBS::ADC_AUTO_OFST_V_RANGE::write(0); - if (rto->inputIsYPbPr == true) + if (rto.inputIsYPbPr == true) { applyYuvPatches(); } @@ -283,63 +284,63 @@ void doPostPresetLoadSteps() applyRGBPatches(); } - // if (rto->outModeHdBypass) - if (uopt->resolutionID == OutputHdBypass) + // if (rto.outModeHdBypass) + if (uopt.resolutionID == OutputHdBypass) { GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP - rto->autoBestHtotalEnabled = false; + rto.autoBestHtotalEnabled = false; } else { - rto->autoBestHtotalEnabled = true; + rto.autoBestHtotalEnabled = true; } - rto->phaseADC = GBS::PA_ADC_S::read(); // we can't know which is right, get from preset - rto->phaseSP = 8; // get phase into global variables early: before latching + rto.phaseADC = GBS::PA_ADC_S::read(); // we can't know which is right, get from preset + rto.phaseSP = 8; // get phase into global variables early: before latching - if (rto->inputIsYPbPr) + if (rto.inputIsYPbPr) { - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 14; + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 14; } else { - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; // similar to yuv, allow variations + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 13; // similar to yuv, allow variations } - setAndUpdateSogLevel(rto->currentLevelSOG); + setAndUpdateSogLevel(rto.currentLevelSOG); - if (!rto->isCustomPreset) + if (!rto.isCustomPreset) { // Writes ADC_RGCTRL. If auto gain is enabled, ADC_RGCTRL will be - // overwritten further down at `uopt->enableAutoGain == 1`. + // overwritten further down at `uopt.enableAutoGain == 1`. setAdcParametersGainAndOffset(); } GBS::GPIO_CONTROL_00::write(0x67); // most GPIO pins regular GPIO GBS::GPIO_CONTROL_01::write(0x00); // all GPIO outputs disabled - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - rto->phaseIsSet = 0; - rto->continousStableCounter = 0; - rto->noSyncCounter = 0; - rto->motionAdaptiveDeinterlaceActive = false; - // rto->scanlinesEnabled = false; - rto->failRetryAttempts = 0; - // rto->videoIsFrozen = true; // ensures unfreeze - rto->sourceDisconnected = false; // this must be true if we reached here (no syncwatcher operation) - rto->boardHasPower = true; // same - - // if (rto->presetID == 0x06 || rto->presetID == 0x16) { + rto.clampPositionIsSet = 0; + rto.coastPositionIsSet = 0; + rto.phaseIsSet = 0; + rto.continousStableCounter = 0; + rto.noSyncCounter = 0; + rto.motionAdaptiveDeinterlaceActive = false; + // rto.scanlinesEnabled = false; + rto.failRetryAttempts = 0; + // rto.videoIsFrozen = true; // ensures unfreeze + rto.sourceDisconnected = false; // this must be true if we reached here (no syncwatcher operation) + rto.boardHasPower = true; // same + + // if (rto.presetID == 0x06 || rto.presetID == 0x16) { if (utilsIsDownscaleMode()) { // override so it applies section 2 deinterlacer settings - rto->isCustomPreset = false; + rto.isCustomPreset = false; } - if (!rto->isCustomPreset) + if (!rto.isCustomPreset) { - if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || - rto->videoStandardInput == 8 || rto->videoStandardInput == 9) + if (rto.videoStandardInput == 3 || rto.videoStandardInput == 4 || + rto.videoStandardInput == 8 || rto.videoStandardInput == 9) { GBS::IF_LD_RAM_BYPS::write(1); // 1_0c 0 no LD, do this before setIfHblankParameters } @@ -363,8 +364,8 @@ void doPostPresetLoadSteps() GBS::VDS_PK_LB_CORE::write(0); // 3_44 0-3 // 1 for anti source jailbars GBS::VDS_PK_LH_CORE::write(0); // 3_46 0-3 // 1 for anti source jailbars - // if (rto->presetID == 0x05 || rto->presetID == 0x15) { - if (uopt->resolutionID == Output1080p || uopt->resolutionID == Output1080p50) + // if (rto.presetID == 0x05 || rto.presetID == 0x15) { + if (uopt.resolutionID == Output1080p || uopt.resolutionID == Output1080p50) { GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 // peaking HF GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 @@ -387,12 +388,12 @@ void doPostPresetLoadSteps() setOverSampleRatio(2, true); // prepare only = true // full height option - if (uopt->wantFullHeight) + if (uopt.wantFullHeight) { - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) + if (rto.videoStandardInput == 1 || rto.videoStandardInput == 3) { // TODO Why is commented? - // if (rto->presetID == 0x5) + // if (rto.presetID == 0x5) //{ // out 1080p 60 // GBS::VDS_DIS_VB_ST::write(GBS::VDS_VSYNC_RST::read() - 1); // GBS::VDS_DIS_VB_SP::write(42); @@ -403,10 +404,10 @@ void doPostPresetLoadSteps() // _WSN(F("full height")); // } } - else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) + else if (rto.videoStandardInput == 2 || rto.videoStandardInput == 4) { - // if (rto->presetID == 0x15) { // out 1080p 50 - if (uopt->resolutionID == Output1080p50) + // if (rto.presetID == 0x15) { // out 1080p 50 + if (uopt.resolutionID == Output1080p50) { // out 1080p 50 GBS::VDS_VSCALE::write(455); GBS::VDS_DIS_VB_ST::write(GBS::VDS_VSYNC_RST::read()); // full = 1125 of 1125 @@ -418,7 +419,7 @@ void doPostPresetLoadSteps() } } - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) + if (rto.videoStandardInput == 1 || rto.videoStandardInput == 2) { // GBS::PLLAD_ICP::write(5); // 5 rather than 6 to work well with CVBS sync as well as CSync @@ -426,7 +427,7 @@ void doPostPresetLoadSteps() GBS::PLLAD_KS::write(2); // 5_16 setOverSampleRatio(4, true); // prepare only = true GBS::IF_SEL_WEN::write(0); // 1_02 0; 0 for SD, 1 for EDTV - if (rto->inputIsYPbPr) + if (rto.inputIsYPbPr) { // todo: check other videoStandardInput in component vs rgb GBS::IF_HS_TAP11_BYPS::write(0); // 1_02 4 Tap11 LPF bypass in YUV444to422 GBS::IF_HS_Y_PDELAY::write(2); // 1_02 5+6 delays @@ -435,8 +436,8 @@ void doPostPresetLoadSteps() } // downscale preset: source is SD - // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - if (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50) + // if (rto.presetID == 0x06 || rto.presetID == 0x16) { + if (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50) { setCsVsStart(2); // or 3, 0 setCsVsStop(0); // fixes field position @@ -451,14 +452,14 @@ void doPostPresetLoadSteps() GBS::MADPT_PD_RAM_BYPS::write(0); // 2_24 2 one line fifo for line phase adjust GBS::MADPT_VSCALE_DEC_FACTOR::write(1); // 2_31 0..1 GBS::MADPT_SEL_PHASE_INI::write(0); // 2_31 2 disable for SD (check 240p content) - if (rto->videoStandardInput == 1) + if (rto.videoStandardInput == 1) { GBS::IF_HB_ST2::write(0x490); // 1_18 GBS::IF_HB_SP2::write(0x80); // 1_1a GBS::IF_HB_SP::write(0x4A); // 1_12 deinterlace offset, green bar GBS::IF_HBIN_SP::write(0xD0); // 1_26 } - else if (rto->videoStandardInput == 2) + else if (rto.videoStandardInput == 2) { GBS::IF_HB_SP2::write(0x74); // 1_1a GBS::IF_HB_SP::write(0x50); // 1_12 deinterlace offset, green bar @@ -466,8 +467,8 @@ void doPostPresetLoadSteps() } } } - if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || - rto->videoStandardInput == 8 || rto->videoStandardInput == 9) + if (rto.videoStandardInput == 3 || rto.videoStandardInput == 4 || + rto.videoStandardInput == 8 || rto.videoStandardInput == 9) { // EDTV p-scan, need to either double adc data rate and halve vds scaling // or disable line doubler (better) (50 / 60Hz shared) @@ -475,8 +476,8 @@ void doPostPresetLoadSteps() GBS::ADC_FLTR::write(3); // 5_03 4/5 GBS::PLLAD_KS::write(1); // 5_16 - // if (rto->presetID != 0x06 && rto->presetID != 0x16) { - if (uopt->resolutionID != Output15kHz && uopt->resolutionID != Output15kHz50) + // if (rto.presetID != 0x06 && rto.presetID != 0x16) { + if (uopt.resolutionID != Output15kHz && uopt.resolutionID != Output15kHz50) { setCsVsStart(14); // pal // hm setCsVsStop(11); // probably setting these for modes 8,9 @@ -493,7 +494,7 @@ void doPostPresetLoadSteps() GBS::VDS_V_DELAY::write(1); // 3_24 2 // new 24.07.2019 : 1, also set 2_17 to 1 GBS::MADPT_Y_DELAY_UV_DELAY::write(1); // 2_17 : 1 GBS::VDS_Y_DELAY::write(3); // 3_24 4/5 delays (ps2 test saying 3 for 1_02 goes with 3 here) - if (rto->videoStandardInput == 9) + if (rto.videoStandardInput == 9) { if (GBS::STATUS_SYNC_PROC_VTOTAL::read() > 650) { @@ -507,8 +508,8 @@ void doPostPresetLoadSteps() } // downscale preset: source is EDTV - // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - if (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50) + // if (rto.presetID == 0x06 || rto.presetID == 0x16) { + if (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50) { GBS::MADPT_Y_VSCALE_BYPS::write(0); // 2_02 6 GBS::MADPT_UV_VSCALE_BYPS::write(0); // 2_02 7 @@ -518,86 +519,86 @@ void doPostPresetLoadSteps() GBS::MADPT_SEL_PHASE_INI::write(0); // 2_31 2 disable } } - // if (rto->videoStandardInput == 3 && rto->presetID != 0x06) { // ED YUV 60 - if (rto->videoStandardInput == 3 && uopt->resolutionID != Output15kHz50) + // if (rto.videoStandardInput == 3 && rto.presetID != 0x06) { // ED YUV 60 + if (rto.videoStandardInput == 3 && uopt.resolutionID != Output15kHz50) { // ED YUV 60 setCsVsStart(16); // ntsc setCsVsStop(13); // GBS::IF_HB_ST::write(30); // 1_10; magic number GBS::IF_HBIN_ST::write(0x20); // 1_24 GBS::IF_HBIN_SP::write(0x60); // 1_26 - // if (rto->presetID == 0x5) { // out 1080p - if (uopt->resolutionID == Output1080p) + // if (rto.presetID == 0x5) { // out 1080p + if (uopt.resolutionID == Output1080p) { // out 1080p GBS::IF_HB_SP2::write(0xB0); // 1_1a GBS::IF_HB_ST2::write(0x4BC); // 1_18 - // } else if (rto->presetID == 0x3) { // out 720p + // } else if (rto.presetID == 0x3) { // out 720p } - else if (uopt->resolutionID == Output720p) + else if (uopt.resolutionID == Output720p) { // out 720p GBS::VDS_VSCALE::write(683); // same as base preset GBS::IF_HB_ST2::write(0x478); // 1_18 GBS::IF_HB_SP2::write(0x84); // 1_1a - // } else if (rto->presetID == 0x2) { // out x1024 + // } else if (rto.presetID == 0x2) { // out x1024 } - else if (uopt->resolutionID == Output1024p) + else if (uopt.resolutionID == Output1024p) { // out x1024 GBS::IF_HB_SP2::write(0x84); // 1_1a GBS::IF_HB_ST2::write(0x478); // 1_18 - // } else if (rto->presetID == 0x1) { // out x960 + // } else if (rto.presetID == 0x1) { // out x960 } - else if (uopt->resolutionID == Output960p) + else if (uopt.resolutionID == Output960p) { // out x960 GBS::IF_HB_SP2::write(0x84); // 1_1a GBS::IF_HB_ST2::write(0x478); // 1_18 - // } else if (rto->presetID == 0x3) { // out x480 + // } else if (rto.presetID == 0x3) { // out x480 } - else if (uopt->resolutionID == Output720p) + else if (uopt.resolutionID == Output720p) { // out x480 GBS::IF_HB_ST2::write(0x478); // 1_18 GBS::IF_HB_SP2::write(0x90); // 1_1a } - // } else if (rto->videoStandardInput == 4 && rto->presetID != 0x16) { // ED YUV 50 + // } else if (rto.videoStandardInput == 4 && rto.presetID != 0x16) { // ED YUV 50 } - else if (rto->videoStandardInput == 4 && uopt->resolutionID != Output15kHz50) + else if (rto.videoStandardInput == 4 && uopt.resolutionID != Output15kHz50) { // ED YUV 50 GBS::IF_HBIN_SP::write(0x40); // 1_26 was 0x80 test: ps2 videomodetester 576p mode GBS::IF_HBIN_ST::write(0x20); // 1_24, odd but need to set this here (blue bar) GBS::IF_HB_ST::write(0x30); // 1_10 - // if (rto->presetID == 0x15) { // out 1080p - if (uopt->resolutionID == Output1080p50) + // if (rto.presetID == 0x15) { // out 1080p + if (uopt.resolutionID == Output1080p50) { // out 1080p GBS::IF_HB_ST2::write(0x4C0); // 1_18 GBS::IF_HB_SP2::write(0xC8); // 1_1a } - // } else if (rto->presetID == 0x13) { // out 720p - else if (uopt->resolutionID == Output720p50) + // } else if (rto.presetID == 0x13) { // out 720p + else if (uopt.resolutionID == Output720p50) { // out 720p GBS::IF_HB_ST2::write(0x478); // 1_18 GBS::IF_HB_SP2::write(0x88); // 1_1a } - // } else if (rto->presetID == 0x12) { // out x1024 - else if (uopt->resolutionID == Output1024p50) + // } else if (rto.presetID == 0x12) { // out x1024 + else if (uopt.resolutionID == Output1024p50) { // out x1024 // VDS_VB_SP -= 12 used to shift pic up, but seems not necessary anymore // GBS::VDS_VB_SP::write(GBS::VDS_VB_SP::read() - 12); GBS::IF_HB_ST2::write(0x454); // 1_18 GBS::IF_HB_SP2::write(0x88); // 1_1a } - // } else if (rto->presetID == 0x11) { // out x960 - else if (uopt->resolutionID == Output960p50) + // } else if (rto.presetID == 0x11) { // out x960 + else if (uopt.resolutionID == Output960p50) { // out x960 GBS::IF_HB_ST2::write(0x454); // 1_18 GBS::IF_HB_SP2::write(0x88); // 1_1a } - // } else if (rto->presetID == 0x14) { // out x576 - else if (uopt->resolutionID == Output576p50) + // } else if (rto.presetID == 0x14) { // out x576 + else if (uopt.resolutionID == Output576p50) { // out x576 GBS::IF_HB_ST2::write(0x478); // 1_18 GBS::IF_HB_SP2::write(0x90); // 1_1a } } - else if (rto->videoStandardInput == 5) + else if (rto.videoStandardInput == 5) { // 720p GBS::ADC_FLTR::write(1); // 5_03 GBS::IF_PRGRSV_CNTRL::write(1); // progressive @@ -605,7 +606,7 @@ void doPostPresetLoadSteps() GBS::INPUT_FORMATTER_02::write(0x74); GBS::VDS_Y_DELAY::write(3); } - else if (rto->videoStandardInput == 6 || rto->videoStandardInput == 7) + else if (rto.videoStandardInput == 6 || rto.videoStandardInput == 7) { // 1080i/p GBS::ADC_FLTR::write(1); // 5_03 GBS::PLLAD_KS::write(0); // 5_16 @@ -614,7 +615,7 @@ void doPostPresetLoadSteps() GBS::INPUT_FORMATTER_02::write(0x74); GBS::VDS_Y_DELAY::write(3); } - else if (rto->videoStandardInput == 8) + else if (rto.videoStandardInput == 8) { // 25khz // todo: this mode for HV sync uint32_t pllRate = 0; @@ -637,35 +638,35 @@ void doPostPresetLoadSteps() // GBS::IF_HB_ST2::write(0x60); // 1_18 // GBS::IF_HB_SP2::write(0x88); // 1_1a GBS::IF_HBIN_SP::write(0x60); // 1_26 works for all output presets - if (uopt->resolutionID == Output960p) + if (uopt.resolutionID == Output960p) { // out x960 GBS::VDS_VSCALE::write(410); } - else if (uopt->resolutionID == Output1024p) + else if (uopt.resolutionID == Output1024p) { // out x1024 GBS::VDS_VSCALE::write(402); } - else if (uopt->resolutionID == Output720p) + else if (uopt.resolutionID == Output720p) { // out 720p GBS::VDS_VSCALE::write(546); } - else if (uopt->resolutionID == Output1080p) + else if (uopt.resolutionID == Output1080p) { // out 1080p GBS::VDS_VSCALE::write(400); } } } - // if (rto->presetID == 0x06 || rto->presetID == 0x16) { - // if (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50) + // if (rto.presetID == 0x06 || rto.presetID == 0x16) { + // if (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50) // { - // rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); // override back + // rto.isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); // override back // } resetDebugPort(); bool avoidAutoBest = 0; - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) { if (GBS::TEST_BUS_2F::read() == 0) { @@ -681,10 +682,10 @@ void doPostPresetLoadSteps() latchPLLAD(); // besthtotal reliable with this (EDTV modes, possibly others) - if (rto->isCustomPreset) + if (rto.isCustomPreset) { // patch in segments not covered in custom preset files (currently seg 2) - if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4 || rto->videoStandardInput == 8) + if (rto.videoStandardInput == 3 || rto.videoStandardInput == 4 || rto.videoStandardInput == 8) { GBS::MADPT_Y_DELAY_UV_DELAY::write(1); // 2_17 : 1 } @@ -692,40 +693,40 @@ void doPostPresetLoadSteps() // get OSR if (GBS::DEC1_BYPS::read() && GBS::DEC2_BYPS::read()) { - rto->osr = 1; + rto.osr = 1; } else if (GBS::DEC1_BYPS::read() && !GBS::DEC2_BYPS::read()) { - rto->osr = 2; + rto.osr = 2; } else { - rto->osr = 4; + rto.osr = 4; } // always start with internal clock active first // if (GBS::PLL648_CONTROL_01::read() == 0x75 && GBS::GBS_PRESET_DISPLAY_CLOCK::read() != 0) - if (GBS::PLL648_CONTROL_01::read() == 0x75 && rto->presetDisplayClock != 0) + if (GBS::PLL648_CONTROL_01::read() == 0x75 && rto.presetDisplayClock != 0) { // GBS::PLL648_CONTROL_01::write(GBS::GBS_PRESET_DISPLAY_CLOCK::read()); - GBS::PLL648_CONTROL_01::write(rto->presetDisplayClock); + GBS::PLL648_CONTROL_01::write(rto.presetDisplayClock); } // else if (GBS::GBS_PRESET_DISPLAY_CLOCK::read() == 0) - else if (rto->presetDisplayClock == 0) + else if (rto.presetDisplayClock == 0) { _WSN(F("no stored display clock to use!")); } } - if (rto->presetIsPalForce60) + if (rto.presetIsPalForce60) { // if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() != 1) - if (!uopt->PalForce60) + if (!uopt.PalForce60) { _WSN(F("pal forced 60hz: apply vshift")); uint16_t vshift = 56; // default shift - // if (rto->presetID == 0x5) { - if (uopt->resolutionID == Output1080p) + // if (rto.presetID == 0x5) { + if (uopt.resolutionID == Output1080p) { GBS::IF_VB_SP::write(4); } // out 1080p @@ -734,8 +735,8 @@ void doPostPresetLoadSteps() GBS::IF_VB_SP::write(GBS::IF_VB_SP::read() + vshift); } GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); - // TODO enabling uopt->PalForce60 ? - uopt->PalForce60 = true; + // TODO enabling uopt.PalForce60 ? + uopt.PalForce60 = true; // GBS::GBS_OPTION_PALFORCED60_ENABLED::write(1); } } @@ -747,9 +748,9 @@ void doPostPresetLoadSteps() GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 // auto ADC gain - if (uopt->enableAutoGain == 1) + if (uopt.enableAutoGain == 1) { - if (adco->r_gain == 0) + if (adco.r_gain == 0) { // SerialM.printf("ADC gain: reset %x := %x\n", GBS::ADC_RGCTRL::read(), AUTO_GAIN_INIT); setAdcGain(AUTO_GAIN_INIT); @@ -757,10 +758,10 @@ void doPostPresetLoadSteps() } else { - // SerialM.printf("ADC gain: transferred %x := %x\n", GBS::ADC_RGCTRL::read(), adco->r_gain); - GBS::ADC_RGCTRL::write(adco->r_gain); - GBS::ADC_GGCTRL::write(adco->g_gain); - GBS::ADC_BGCTRL::write(adco->b_gain); + // SerialM.printf("ADC gain: transferred %x := %x\n", GBS::ADC_RGCTRL::read(), adco.r_gain); + GBS::ADC_RGCTRL::write(adco.r_gain); + GBS::ADC_GGCTRL::write(adco.g_gain); + GBS::ADC_BGCTRL::write(adco.b_gain); GBS::DEC_TEST_ENABLE::write(1); } } @@ -770,11 +771,11 @@ void doPostPresetLoadSteps() } // ADC offset if measured - if (adco->r_off != 0 && adco->g_off != 0 && adco->b_off != 0) + if (adco.r_off != 0 && adco.g_off != 0 && adco.b_off != 0) { - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_BOFCTRL::write(adco->b_off); + GBS::ADC_ROFCTRL::write(adco.r_off); + GBS::ADC_GOFCTRL::write(adco.g_off); + GBS::ADC_BOFCTRL::write(adco.b_off); } _WSF( @@ -794,7 +795,7 @@ void doPostPresetLoadSteps() // 5_06 + 5_08 will be the target center value, 5_07 sets general offset // s3s3as00 s3s3bs00 s3s3cs00 - if (uopt->wantVdsLineFilter) + if (uopt.wantVdsLineFilter) { GBS::VDS_D_RAM_BYPS::write(0); } @@ -803,7 +804,7 @@ void doPostPresetLoadSteps() GBS::VDS_D_RAM_BYPS::write(1); } - if (uopt->wantPeaking) + if (uopt.wantPeaking) { GBS::VDS_PK_Y_H_BYPS::write(0); } @@ -814,7 +815,7 @@ void doPostPresetLoadSteps() // unused now GBS::VDS_TAP6_BYPS::write(0); - /*if (uopt->wantTap6) { GBS::VDS_TAP6_BYPS::write(0); } + /*if (uopt.wantTap6) { GBS::VDS_TAP6_BYPS::write(0); } else { GBS::VDS_TAP6_BYPS::write(1); if (!isCustomPreset) { @@ -822,11 +823,11 @@ void doPostPresetLoadSteps() } }*/ - if (uopt->wantStepResponse) + if (uopt.wantStepResponse) { // step response requested, but exclude 1080p presets - // if (rto->presetID != 0x05 && rto->presetID != 0x15) { - if (uopt->resolutionID != Output1080p && uopt->resolutionID != Output1080p50) + // if (rto.presetID != 0x05 && rto.presetID != 0x15) { + if (uopt.resolutionID != Output1080p && uopt.resolutionID != Output1080p50) { GBS::VDS_UV_STEP_BYPS::write(0); } @@ -846,17 +847,17 @@ void doPostPresetLoadSteps() // unfreezeVideo(); Menu::init(); FrameSync::cleanup(); - rto->syncLockFailIgnore = 16; + rto.syncLockFailIgnore = 16; - // undo eventual rto->useHdmiSyncFix (not using this method atm) + // undo eventual rto.useHdmiSyncFix (not using this method atm) GBS::VDS_SYNC_EN::write(0); GBS::VDS_FLOCK_EN::write(0); - // if (!rto->outModeHdBypass && rto->autoBestHtotalEnabled && - if (uopt->resolutionID != OutputHdBypass && rto->autoBestHtotalEnabled && + // if (!rto.outModeHdBypass && rto.autoBestHtotalEnabled && + if (uopt.resolutionID != OutputHdBypass && rto.autoBestHtotalEnabled && // GBS::GBS_OPTION_SCALING_RGBHV::read() == 0 && !avoidAutoBest && - !uopt->preferScalingRgbhv && !avoidAutoBest && - (rto->videoStandardInput >= 1 && rto->videoStandardInput <= 4)) + !uopt.preferScalingRgbhv && !avoidAutoBest && + (rto.videoStandardInput >= 1 && rto.videoStandardInput <= 4)) { // autobesthtotal updateCoastPosition(0); @@ -865,7 +866,7 @@ void doPostPresetLoadSteps() resetInterruptSogBadBit(); delay(10); // works reliably now on my test HDMI dongle - if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) + if (rto.useHdmiSyncFix && !uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } @@ -882,17 +883,17 @@ void doPostPresetLoadSteps() else if (getStatus16SpHsStable() && getStatus16SpHsStable()) { delay(1); // wifi - if (getVideoMode() == rto->videoStandardInput) + if (getVideoMode() == rto.videoStandardInput) { bool ok = 0; float sfr = getSourceFieldRate(0); // _WSN(sfr, 3); - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 3) + if (rto.videoStandardInput == 1 || rto.videoStandardInput == 3) { if (sfr > 58.6f && sfr < 61.4f) ok = 1; } - else if (rto->videoStandardInput == 2 || rto->videoStandardInput == 4) + else if (rto.videoStandardInput == 2 || rto.videoStandardInput == 4) { if (sfr > 49.1f && sfr < 51.1f) ok = 1; @@ -913,7 +914,7 @@ void doPostPresetLoadSteps() // scaling rgbhv, HD modes, no autobesthtotal delay(10); // works reliably now on my test HDMI dongle - if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) + if (rto.useHdmiSyncFix && !uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } @@ -925,16 +926,16 @@ void doPostPresetLoadSteps() // _WS(F("pp time: ")); _WSN(millis() - postLoadTimer); // make sure - if (rto->useHdmiSyncFix && !uopt->wantOutputComponent) + if (rto.useHdmiSyncFix && !uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } // late adjustments that require some delay time first - if (!rto->isCustomPreset) + if (!rto.isCustomPreset) { - // if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) - if (videoStandardInputIsPalNtscSd() && uopt->resolutionID != OutputHdBypass) + // if (videoStandardInputIsPalNtscSd() && !rto.outModeHdBypass) + if (videoStandardInputIsPalNtscSd() && uopt.resolutionID != OutputHdBypass) { // SNES has less total lines and a slight offset (only relevant in 60Hz) if (GBS::VPERIOD_IF::read() == 523) @@ -964,7 +965,7 @@ void doPostPresetLoadSteps() resetPLLAD(); // also turns on pllad GBS::PLLAD_LEN::write(1); // 5_11 1 - if (!rto->isCustomPreset) + if (!rto.isCustomPreset) { GBS::VDS_IN_DREG_BYPS::write(0); // 3_40 2 // 0 = input data triggered on falling clock edge, 1 = bypass GBS::PLLAD_R::write(3); @@ -984,7 +985,7 @@ void doPostPresetLoadSteps() GBS::PB_REQ_SEL::write(3); // PlayBack 11 High request Low request // 4_2C, 4_2D should be set by preset GBS::RFF_WFF_OFFSET::write(0x0); // scanline fix - if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4) + if (rto.videoStandardInput == 3 || rto.videoStandardInput == 4) { // this also handles mode 14 csync rgbhv GBS::PB_CAP_OFFSET::write(GBS::PB_FETCH_NUM::read() + 4); // 4_37 to 4_39 (green bar) @@ -992,16 +993,16 @@ void doPostPresetLoadSteps() // 4_12 should be set by preset } - // if (!rto->outModeHdBypass) - if (uopt->resolutionID != OutputHdBypass) + // if (!rto.outModeHdBypass) + if (uopt.resolutionID != OutputHdBypass) { ResetSDRAM(); } - setAndUpdateSogLevel(rto->currentLevelSOG); // use this to cycle SP / ADPLL latches + setAndUpdateSogLevel(rto.currentLevelSOG); // use this to cycle SP / ADPLL latches - // if (rto->presetID != 0x06 && rto->presetID != 0x16) { - if (uopt->resolutionID != Output15kHz && uopt->resolutionID != Output15kHz50) + // if (rto.presetID != 0x06 && rto.presetID != 0x16) { + if (uopt.resolutionID != Output15kHz && uopt.resolutionID != Output15kHz50) { // IF_VS_SEL = 1 for SD/HD SP mode in HD mode (5_3e 1) GBS::IF_VS_SEL::write(0); // 0 = "VCR" IF sync, requires VS_FLIP to be on, more stable? @@ -1012,7 +1013,7 @@ void doPostPresetLoadSteps() GBS::SP_CS_CLP_ST::write(32); GBS::SP_CS_CLP_SP::write(48); // same as reset parameters - if (!uopt->wantOutputComponent) + if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out if needed } @@ -1021,25 +1022,25 @@ void doPostPresetLoadSteps() GBS::DAC_RGBS_S0ENZ::write(0); // GBS::DAC_RGBS_S1EN::write(1); // these 2 also help - rto->useHdmiSyncFix = 0; // reset flag + rto.useHdmiSyncFix = 0; // reset flag GBS::SP_H_PROTECT::write(0); - if (rto->videoStandardInput >= 5) + if (rto.videoStandardInput >= 5) { GBS::SP_DIS_SUB_COAST::write(1); // might not disable it at all soon } - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) { GBS::SP_EXT_SYNC_SEL::write(1); // 5_20 3 disconnect HV input // stays disconnected until reset condition } - rto->coastPositionIsSet = false; // re-arm these - rto->clampPositionIsSet = false; + rto.coastPositionIsSet = false; // re-arm these + rto.clampPositionIsSet = false; - // if (rto->outModeHdBypass) - if (uopt->resolutionID == OutputHdBypass) + // if (rto.outModeHdBypass) + if (uopt.resolutionID == OutputHdBypass) { GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status @@ -1050,9 +1051,9 @@ void doPostPresetLoadSteps() } // if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) - if (uopt->preferScalingRgbhv) + if (uopt.preferScalingRgbhv) { - rto->videoStandardInput = 14; + rto.videoStandardInput = 14; } else // if (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0) { @@ -1077,7 +1078,7 @@ void doPostPresetLoadSteps() } if (timeout >= 1500) { - if (rto->currentLevelSOG >= 7) + if (rto.currentLevelSOG >= 7) { optimizeSogLevel(); delay(300); @@ -1087,7 +1088,7 @@ void doPostPresetLoadSteps() // early attempt updateClampPosition(); - if (rto->clampPositionIsSet) + if (rto.clampPositionIsSet) { if (GBS::SP_NO_CLAMP_REG::read() == 1) { @@ -1097,7 +1098,7 @@ void doPostPresetLoadSteps() updateStopPositionDynamic(false); - if (!rto->syncWatcherEnabled) + if (!rto.syncWatcherEnabled) { GBS::SP_NO_CLAMP_REG::write(0); } @@ -1108,7 +1109,7 @@ void doPostPresetLoadSteps() // advancePhase(); //} - setAndUpdateSogLevel(rto->currentLevelSOG); // use this to cycle SP / ADPLL latches + setAndUpdateSogLevel(rto.currentLevelSOG); // use this to cycle SP / ADPLL latches // optimizePhaseSP(); // do this later in run loop GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts @@ -1123,108 +1124,108 @@ void doPostPresetLoadSteps() // are introduced to break out of it. // also need to check for mode 15 // also make sure to turn off autoBestHtotal - // if (uopt->presetPreference == 10 && rto->videoStandardInput != 15) { - if (utilsIsPassThroughMode() && rto->videoStandardInput != 15) + // if (uopt.presetPreference == 10 && rto.videoStandardInput != 15) { + if (utilsIsPassThroughMode() && rto.videoStandardInput != 15) { - rto->autoBestHtotalEnabled = 0; - if (rto->applyPresetDoneStage == 11) + rto.autoBestHtotalEnabled = 0; + if (rto.applyPresetDoneStage == 11) { // we were here before, stop the loop - rto->applyPresetDoneStage = 1; + rto.applyPresetDoneStage = 1; } else { - rto->applyPresetDoneStage = 10; + rto.applyPresetDoneStage = 10; } } else { // normal modes - rto->applyPresetDoneStage = 1; + rto.applyPresetDoneStage = 1; } unfreezeVideo(); - if (uopt->enableFrameTimeLock) + if (uopt.enableFrameTimeLock) { activeFrameTimeLockInitialSteps(); } _WS(F("\npreset applied: ")); - if (uopt->resolutionID == Output960p || uopt->resolutionID == Output960p50) + if (uopt.resolutionID == Output960p || uopt.resolutionID == Output960p50) _WS(F("1280x960")); - else if (uopt->resolutionID == Output1024p || uopt->resolutionID == Output1024p50) + else if (uopt.resolutionID == Output1024p || uopt.resolutionID == Output1024p50) _WS(F("1280x1024")); - else if (uopt->resolutionID == Output720p || uopt->resolutionID == Output720p50) + else if (uopt.resolutionID == Output720p || uopt.resolutionID == Output720p50) _WS(F("1280x720")); - else if (uopt->resolutionID == Output1080p || uopt->resolutionID == Output1080p50) + else if (uopt.resolutionID == Output1080p || uopt.resolutionID == Output1080p50) _WS(F("1920x1080")); - else if (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50) + else if (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50) _WS(F("downscale")); - else if (uopt->resolutionID == Output480p) + else if (uopt.resolutionID == Output480p) _WS(F("720x480")); - else if (uopt->resolutionID == Output576p50) + else if (uopt.resolutionID == Output576p50) _WS(F("720x576")); // else else if (utilsIsPassThroughMode()) _WS(F("bypass")); - else if (uopt->resolutionID == Output240p) + else if (uopt.resolutionID == Output240p) _WS(F("240p")); else _WS(F("UNKNOWN")); - // if (rto->outModeHdBypass) + // if (rto.outModeHdBypass) if (utilsIsPassThroughMode()) { _WS(F(" (bypass)")); } - // else if (rto->isCustomPreset) + // else if (rto.isCustomPreset) // { // _WS(F(" (custom)")); // } _WS(F(" for ")); - if (rto->videoStandardInput == 1) + if (rto.videoStandardInput == 1) _WS(F("NTSC 60Hz ")); - else if (rto->videoStandardInput == 2) + else if (rto.videoStandardInput == 2) _WS(F("PAL 50Hz ")); - else if (rto->videoStandardInput == 3) + else if (rto.videoStandardInput == 3) _WS(F("EDTV 60Hz")); - else if (rto->videoStandardInput == 4) + else if (rto.videoStandardInput == 4) _WS(F("EDTV 50Hz")); - else if (rto->videoStandardInput == 5) + else if (rto.videoStandardInput == 5) _WS(F("720p 60Hz HDTV ")); - else if (rto->videoStandardInput == 6) + else if (rto.videoStandardInput == 6) _WS(F("1080i 60Hz HDTV ")); - else if (rto->videoStandardInput == 7) + else if (rto.videoStandardInput == 7) _WS(F("1080p 60Hz HDTV ")); - else if (rto->videoStandardInput == 8) + else if (rto.videoStandardInput == 8) _WS(F("Medium Res ")); - else if (rto->videoStandardInput == 13) + else if (rto.videoStandardInput == 13) _WS(F("VGA/SVGA/XGA/SXGA")); - else if (rto->videoStandardInput == 14) + else if (rto.videoStandardInput == 14) { - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) _WSN(F("scaling RGB (CSync)")); else _WSN(F("scaling RGB (HV Sync)")); } - else if (rto->videoStandardInput == 15) + else if (rto.videoStandardInput == 15) { - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) _WSN(F("RGB Bypass (CSync)")); else _WSN(F("RGB Bypass (HV Sync)")); } - else if (rto->videoStandardInput == 0) + else if (rto.videoStandardInput == 0) _WSN(F("!should not go here!")); // TODO ??? - // if (rto->presetID == 0x05 || rto->presetID == 0x15) { - if (uopt->resolutionID == Output1080p || uopt->resolutionID == Output1080p50) + // if (rto.presetID == 0x05 || rto.presetID == 0x15) { + if (uopt.resolutionID == Output1080p || uopt.resolutionID == Output1080p50) { _WSN(F("(set your TV aspect ratio to 16:9)")); } - if (rto->videoStandardInput == 14) + if (rto.videoStandardInput == 14) { _WSN(F("\nNote: scaling RGB is still in development")); } @@ -1243,7 +1244,7 @@ void applyPresets(uint8_t videoMode) bool waitExtra = 0; // TODO replace videoMode with VideoStandardInput enum - if (!rto->boardHasPower) + if (!rto.boardHasPower) { _WSN(F("(!) board not responding!")); return; @@ -1255,20 +1256,20 @@ void applyPresets(uint8_t videoMode) { if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { - rto->inputIsYPbPr = 0; + rto.inputIsYPbPr = 0; if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) { - rto->syncTypeCsync = 1; + rto.syncTypeCsync = 1; } else { - rto->syncTypeCsync = 0; + rto.syncTypeCsync = 0; } } } - // if (rto->outModeHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) - if (uopt->resolutionID == OutputHdBypass || rto->videoStandardInput == 15 || rto->videoStandardInput == 0) + // if (rto.outModeHdBypass || rto.videoStandardInput == 15 || rto.videoStandardInput == 0) + if (uopt.resolutionID == OutputHdBypass || rto.videoStandardInput == 15 || rto.videoStandardInput == 0) { waitExtra = 1; if (videoMode <= 4 || videoMode == 14 || videoMode == 8 || videoMode == 9) @@ -1278,20 +1279,20 @@ void applyPresets(uint8_t videoMode) GBS::SFTRST_DEC_RSTZ::write(1); } } - rto->presetIsPalForce60 = 0; // the default - // rto->outModeHdBypass = 0; // the default at this stage + rto.presetIsPalForce60 = 0; // the default + // rto.outModeHdBypass = 0; // the default at this stage // in case it is set; will get set appropriately later in doPostPresetLoadSteps() // GBS::GBS_PRESET_CUSTOM::write(0); - // rto->isCustomPreset = false; + // rto.isCustomPreset = false; // carry over debug view if possible // if (GBS::ADC_UNUSED_62::read() != 0x00) // { // only if the preset to load isn't custom // (else the command will instantly disable debug view) - // if (rto->presetID != OutputCustom) { - // if (uopt->resolutionID != OutputCustom) { + // if (rto.presetID != OutputCustom) { + // if (uopt.resolutionID != OutputCustom) { // serialCommand = 'D'; // debug view // } // } @@ -1302,22 +1303,22 @@ void applyPresets(uint8_t videoMode) _WSF( PSTR("(!) source format not properly recognized, videoMode: %d, resolutionID: %c\n"), videoMode, - uopt->resolutionID + uopt.resolutionID ); videoMode = 3; // in case of success: override to 480p60 GBS::ADC_INPUT_SEL::write(1); // RGB delay(10); if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { - rto->inputIsYPbPr = false; - rto->syncWatcherEnabled = true; + rto.inputIsYPbPr = false; + rto.syncWatcherEnabled = true; if (GBS::STATUS_SYNC_PROC_VSACT::read() == 0) { - rto->syncTypeCsync = true; + rto.syncTypeCsync = true; } else { - rto->syncTypeCsync = false; + rto.syncTypeCsync = false; } } else @@ -1326,9 +1327,9 @@ void applyPresets(uint8_t videoMode) delay(10); if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { - rto->inputIsYPbPr = true; - rto->syncTypeCsync = true; - rto->syncWatcherEnabled = true; + rto.inputIsYPbPr = true; + rto.syncTypeCsync = true; + rto.syncWatcherEnabled = true; } else { @@ -1345,18 +1346,18 @@ void applyPresets(uint8_t videoMode) // doPostPresetLoadSteps() to select the right resolution, since // it *enables* the output (showing a green screen) even if // previously disabled, and we want to *disable* it. - // rto->presetID = Output240p; - uopt->resolutionID = Output240p; + // rto.presetID = Output240p; + uopt.resolutionID = Output240p; return; } } } - if (uopt->PalForce60 == 1) + if (uopt.PalForce60 == 1) { // not equal to custom, saved as pal preset has ntsc customization - // if (uopt->presetPreference != 2) { - if (!rto->isCustomPreset) { + // if (uopt.presetPreference != 2) { + if (!rto.isCustomPreset) { _DBG(F("not a custom preset, ")); if (videoMode == 2 || videoMode == 4) { @@ -1364,7 +1365,7 @@ void applyPresets(uint8_t videoMode) PSTR("video mode %d, set PAL@50 to 60Hz\n"), videoMode ); - rto->presetIsPalForce60 = 1; + rto.presetIsPalForce60 = 1; } if (videoMode == 2) { @@ -1379,7 +1380,7 @@ void applyPresets(uint8_t videoMode) } } - /// If uopt->presetPreference == OutputCustomized and we load a custom + /// If uopt.presetPreference == OutputCustomized and we load a custom /// preset, check if it's intended to bypass scaling at the current input /// resolution. If so, setup bypass and skip the rest of applyPresets(). auto applySavedBypassPreset = [&videoMode]() -> bool @@ -1394,22 +1395,22 @@ void applyPresets(uint8_t videoMode) - GBS_PRESET_ID @ S1_2B[0:6] - GBS_PRESET_CUSTOM @ S1_2B[7] - uopt is source of truth, rto is derived cached state??? - - uopt->presetPreference + - uopt.presetPreference - Read by applyPresets() to pick an output resolution. - - rto->presetID + - rto.presetID - Written by applyPresets() -> doPostPresetLoadSteps(). - = register GBS_PRESET_ID. - - rto->isCustomPreset + - rto.isCustomPreset - Written by applyPresets() -> doPostPresetLoadSteps(). - = register GBS_PRESET_CUSTOM. - - rto->isCustomPreset and rto->presetID control which button is + - rto.isCustomPreset and rto.presetID control which button is highlighted in the web UI (updateWebSocketData() -> GBSControl.buttonMapping). Control flow: applyPresets(): - - If uopt->presetPreference == OutputCustomized (yes): + - If uopt.presetPreference == OutputCustomized (yes): - loadPresetFromFS() - All custom presets are saved with GBS_PRESET_CUSTOM = 1. - writeProgramArrayNew() @@ -1417,38 +1418,38 @@ void applyPresets(uint8_t videoMode) - GBS_PRESET_CUSTOM = 1 - applySavedBypassPreset(): - If GBS_PRESET_ID == OutputHdBypass (yes): - - rto->videoStandardInput = videoMode; (not sure why) + - rto.videoStandardInput = videoMode; (not sure why) - setOutputHdBypassMode(regsInitialized=true) - - rto->outModeHdBypass = 1; + - rto.outModeHdBypass = 1; - loadHdBypassSection() - Overwrites S1_30..5F. - GBS::GBS_PRESET_ID::write(OutputHdBypass); - if (!regsInitialized) (false) - ~~GBS::GBS_PRESET_CUSTOM::write(0);~~ (skipped) - doPostPresetLoadSteps() - - rto->presetID = GBS::GBS_PRESET_ID::read(); + - rto.presetID = GBS::GBS_PRESET_ID::read(); - OutputHdBypass - - rto->isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); + - rto.isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); - true - - Branches based on rto->presetID - - if (rto->outModeHdBypass) (yes) return. + - Branches based on rto.presetID + - if (rto.outModeHdBypass) (yes) return. - ... - - rto->outModeHdBypass = 1; (again?!) + - rto.outModeHdBypass = 1; (again?!) */ // uint8_t rawPresetId = GBS::GBS_PRESET_ID::read(); // if (rawPresetId == OutputHdBypass) - if (uopt->resolutionID == OutputHdBypass) + if (uopt.resolutionID == OutputHdBypass) { // Required for switching from 240p to 480p to work. - rto->videoStandardInput = videoMode; + rto.videoStandardInput = videoMode; // Setup video mode passthrough. setOutputHdBypassMode(true); _DBGN(F("OutputHDBypass mode active")); return true; } // if (rawPresetId == OutputRGBHVBypass) - if (uopt->resolutionID == OutputRGBHVBypass) + if (uopt.resolutionID == OutputRGBHVBypass) { // TODO implement setOutputRGBHVBypassMode (I don't have RGBHV inputs to verify) } @@ -1458,7 +1459,7 @@ void applyPresets(uint8_t videoMode) // if we're using ESP8266, check if there is saved preset data first #if defined(ESP8266) // skip loading from FS if we changing resolution - if(uopt->resolutionID == (OutputResolution)GBS::GBS_PRESET_ID::read()) { + if(uopt.resolutionID == (OutputResolution)GBS::GBS_PRESET_ID::read()) { const uint8_t *preset = loadPresetFromFS(videoMode); if(preset != nullptr) { writeProgramArrayNew(preset, false); @@ -1471,11 +1472,11 @@ void applyPresets(uint8_t videoMode) goto apply_presets_skip_preset_loading; } } - // else if (uopt->presetPreference == OutputCustomized) { + // else if (uopt.presetPreference == OutputCustomized) { // { // - // } else if (uopt->presetPreference == 4) { - // else if (uopt->resolutionID == Output1024p) + // } else if (uopt.presetPreference == 4) { + // else if (uopt.resolutionID == Output1024p) // { // writeProgramArrayNew(pal_1280x1024, false); // _WSN(F("pal_1280x1024 is now active")); @@ -1484,7 +1485,7 @@ void applyPresets(uint8_t videoMode) if (videoMode == 1 || videoMode == 3 || videoMode == 8 || videoMode == 9 || videoMode == 14) { - // if (uopt->presetPreference == OutputCustomized) { + // if (uopt.presetPreference == OutputCustomized) { // { // const uint8_t *preset = loadPresetFromFS(videoMode); // writeProgramArrayNew(preset, false); @@ -1494,11 +1495,11 @@ void applyPresets(uint8_t videoMode) // return; // } // } - // } else if (uopt->presetPreference == 4) { - // else if (uopt->resolutionID == Output1024p) + // } else if (uopt.presetPreference == 4) { + // else if (uopt.resolutionID == Output1024p) // { // comments are misleading, the functionality is unknown - // if (uopt->matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) + // if (uopt.matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) // { // writeProgramArrayNew(ntsc_240p, false); // pref = x1024 override to x960 // _WSN(F("ntsc_240p is now active")); @@ -1512,31 +1513,31 @@ void applyPresets(uint8_t videoMode) // ! // ! NTSC input // ! - // if (uopt->presetPreference == 0) { - if (uopt->resolutionID == Output240p) + // if (uopt.presetPreference == 0) { + if (uopt.resolutionID == Output240p) { writeProgramArrayNew(ntsc_240p, false); _WSN(F("ntsc_240p is now active")); - // } else if (uopt->presetPreference == 1) { + // } else if (uopt.presetPreference == 1) { } - else if (uopt->resolutionID == Output480p) + else if (uopt.resolutionID == Output480p) { writeProgramArrayNew(ntsc_720x480, false); _WSN(F("ntsc_720x480 is now active")); - // } else if (uopt->presetPreference == 3) { + // } else if (uopt.presetPreference == 3) { } - else if (uopt->resolutionID == Output720p) + else if (uopt.resolutionID == Output720p) { writeProgramArrayNew(ntsc_1280x720, false); _WSN(F("ntsc_1280x720 is now active")); - } // else if (uopt->presetPreference == 5) { - else if (uopt->resolutionID == Output1080p) + } // else if (uopt.presetPreference == 5) { + else if (uopt.resolutionID == Output1080p) { writeProgramArrayNew(ntsc_1920x1080, false); _WSN(F("ntsc_1920x1080 is now active")); - // } else if (uopt->presetPreference == 6) { + // } else if (uopt.presetPreference == 6) { } - else if (uopt->resolutionID == Output15kHz) + else if (uopt.resolutionID == Output15kHz) { writeProgramArrayNew(ntsc_downscale, false); _WSN(F("ntsc_downscale is now active")); @@ -1547,10 +1548,10 @@ void applyPresets(uint8_t videoMode) // ! // ! PAL input // ! - // if (uopt->presetPreference == 0) { - if (uopt->resolutionID == Output240p) + // if (uopt.presetPreference == 0) { + if (uopt.resolutionID == Output240p) { - // if (uopt->matchPresetSource) + // if (uopt.matchPresetSource) // { // writeProgramArrayNew(pal_1280x1024, false); // pref = x960 override to x1024 // _WSN(F("pal_1280x1024 is now active")); @@ -1560,27 +1561,27 @@ void applyPresets(uint8_t videoMode) writeProgramArrayNew(pal_240p, false); _WSN(F("pal_240p is now active")); // } - // } else if (uopt->presetPreference == 1) { + // } else if (uopt.presetPreference == 1) { } - else if (uopt->resolutionID == Output576p50) + else if (uopt.resolutionID == Output576p50) { writeProgramArrayNew(pal_768x576, false); // 4:3 square pixel _WSN(F("pal_768x576 is now active")); - // } else if (uopt->presetPreference == 3) { + // } else if (uopt.presetPreference == 3) { } - else if (uopt->resolutionID == Output720p) + else if (uopt.resolutionID == Output720p) { writeProgramArrayNew(pal_1280x720, false); _WSN(F("pal_1280x720 is now active")); } - // else if (uopt->presetPreference == 5) { - else if (uopt->resolutionID == Output1080p) + // else if (uopt.presetPreference == 5) { + else if (uopt.resolutionID == Output1080p) { writeProgramArrayNew(pal_1920x1080, false); _WSN(F("pal_1920x1080 is now active")); - // } else if (uopt->presetPreference == 6) { + // } else if (uopt.presetPreference == 6) { } - else if (uopt->resolutionID == Output15kHz) + else if (uopt.resolutionID == Output15kHz) { writeProgramArrayNew(pal_downscale, false); _WSN(F("pal_downscale is now active")); @@ -1589,7 +1590,7 @@ void applyPresets(uint8_t videoMode) else if (videoMode == 5 || videoMode == 6 || videoMode == 7 || videoMode == 13) { // use bypass mode for these HD sources - rto->videoStandardInput = videoMode; + rto.videoStandardInput = videoMode; _WSN(F("HD Bypass is now active")); setOutputHdBypassMode(false); // don't go through doPostPresetLoadSteps @@ -1598,11 +1599,11 @@ void applyPresets(uint8_t videoMode) else if (videoMode == 15) { _WS(F("RGB/HV ")); - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) { _WS(F("(CSync) ")); } - if (uopt->preferScalingRgbhv) { + if (uopt.preferScalingRgbhv) { _WS(F("(prefer scaling mode")); } _WSN(); @@ -1612,7 +1613,7 @@ void applyPresets(uint8_t videoMode) } apply_presets_skip_preset_loading: - rto->videoStandardInput = videoMode; + rto.videoStandardInput = videoMode; _DBGF(PSTR("video mode set: %d\n"), videoMode); if (waitExtra) { @@ -1661,7 +1662,7 @@ const uint8_t *loadPresetFromFS(byte forVideoMode) uint16_t i = 0; // let's assume there is no preset file yet or it is unavailable // we may change this assumption below the code - rto->isCustomPreset = false; + rto.isCustomPreset = false; f = LittleFS.open(FPSTR(preferencesFile), "r"); if (f) @@ -1744,7 +1745,7 @@ const uint8_t *loadPresetFromFS(byte forVideoMode) tmp = strtok(NULL, ","); // yield(); // wifi stack } - rto->isCustomPreset = true; + rto.isCustomPreset = true; load_preset_from_fs_end: return preset; @@ -1780,41 +1781,41 @@ void savePresetToFS() // return; // } - if (rto->videoStandardInput == 1) + if (rto.videoStandardInput == 1) { - sprintf(buffer, PSTR("/preset_ntsc.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_ntsc.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 2) + else if (rto.videoStandardInput == 2) { - sprintf(buffer, PSTR("/preset_pal.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_pal.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 3) + else if (rto.videoStandardInput == 3) { - sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 4) + else if (rto.videoStandardInput == 4) { - sprintf(buffer, PSTR("/preset_pal_576p.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_pal_576p.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 5) + else if (rto.videoStandardInput == 5) { - sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 6) + else if (rto.videoStandardInput == 6) { - sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 8) + else if (rto.videoStandardInput == 8) { - sprintf(buffer, PSTR("/preset_medium_res.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_medium_res.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 14) + else if (rto.videoStandardInput == 14) { - sprintf(buffer, PSTR("/preset_vga_upscale.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_vga_upscale.%d"), uopt.slotID); } - else if (rto->videoStandardInput == 0) + else if (rto.videoStandardInput == 0) { - sprintf(buffer, PSTR("/preset_unknown.%d"), uopt->slotID); + sprintf(buffer, PSTR("/preset_unknown.%d"), uopt.slotID); } // open preset file @@ -1830,16 +1831,16 @@ void savePresetToFS() // GBS::GBS_PRESET_CUSTOM::write(1); // use one reserved bit to mark this as a custom preset // TODO don't store scanlines - WHY? // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - // if (uopt->wantScanlines) + // if (uopt.wantScanlines) // { // disableScanlines(); // } - if (!rto->extClockGenDetected) + if (!rto.extClockGenDetected) { - if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) + if (uopt.enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); } } diff --git a/src/slot.cpp b/src/slot.cpp index 24b5b2d7..7b9a4084 100644 --- a/src/slot.cpp +++ b/src/slot.cpp @@ -3,7 +3,7 @@ # File: slot.cpp # # File Created: Friday, 31st May 2024 8:41:15 am # # Author: Sergey Ko # -# Last Modified: Sunday, 16th June 2024 1:45:22 am # +# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -21,28 +21,28 @@ */ bool slotLoad(const uint8_t & slotIndex) { SlotMetaArray slotsObject; - uopt->slotID = slotIndex; + uopt.slotID = slotIndex; fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); if (slotsBinaryFile) { slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); slotsBinaryFile.close(); // update parameters - uopt->resolutionID = slotsObject.slot[slotIndex].resolutionID; - GBS::GBS_PRESET_ID::write((uint8_t)uopt->resolutionID); - uopt->wantScanlines = (bool)slotsObject.slot[slotIndex].scanlines; - uopt->scanlineStrength = slotsObject.slot[slotIndex].scanlinesStrength; - uopt->wantVdsLineFilter = (bool)slotsObject.slot[slotIndex].wantVdsLineFilter; - uopt->wantStepResponse = (bool)slotsObject.slot[slotIndex].wantStepResponse; - uopt->wantPeaking = (bool)slotsObject.slot[slotIndex].wantPeaking; - uopt->enableAutoGain = (bool)slotsObject.slot[slotIndex].enableAutoGain; - uopt->enableFrameTimeLock = (bool)slotsObject.slot[slotIndex].enableFrameTimeLock; - uopt->frameTimeLockMethod = slotsObject.slot[slotIndex].frameTimeLockMethod; - uopt->deintMode = slotsObject.slot[slotIndex].deintMode; - uopt->wantTap6 = (bool)slotsObject.slot[slotIndex].wantTap6; - uopt->wantFullHeight = (bool)slotsObject.slot[slotIndex].wantFullHeight; - // uopt->matchPresetSource = slotsObject.slot[slotIndex].matchPresetSource; - uopt->PalForce60 = (bool)slotsObject.slot[slotIndex].PalForce60; + uopt.resolutionID = slotsObject.slot[slotIndex].resolutionID; + GBS::GBS_PRESET_ID::write((uint8_t)uopt.resolutionID); + uopt.wantScanlines = (bool)slotsObject.slot[slotIndex].scanlines; + uopt.scanlineStrength = slotsObject.slot[slotIndex].scanlinesStrength; + uopt.wantVdsLineFilter = (bool)slotsObject.slot[slotIndex].wantVdsLineFilter; + uopt.wantStepResponse = (bool)slotsObject.slot[slotIndex].wantStepResponse; + uopt.wantPeaking = (bool)slotsObject.slot[slotIndex].wantPeaking; + uopt.enableAutoGain = (bool)slotsObject.slot[slotIndex].enableAutoGain; + uopt.enableFrameTimeLock = (bool)slotsObject.slot[slotIndex].enableFrameTimeLock; + uopt.frameTimeLockMethod = slotsObject.slot[slotIndex].frameTimeLockMethod; + uopt.deintMode = slotsObject.slot[slotIndex].deintMode; + uopt.wantTap6 = (bool)slotsObject.slot[slotIndex].wantTap6; + uopt.wantFullHeight = (bool)slotsObject.slot[slotIndex].wantFullHeight; + // uopt.matchPresetSource = slotsObject.slot[slotIndex].matchPresetSource; + uopt.PalForce60 = (bool)slotsObject.slot[slotIndex].PalForce60; return true; } return false; @@ -67,20 +67,20 @@ void slotUpdate(SlotMetaArray & slotsObject, const uint8_t & slotIndex, String * k ++; } } - slotsObject.slot[slotIndex].resolutionID = uopt->resolutionID; - slotsObject.slot[slotIndex].scanlines = (uopt->wantScanlines ? 1 : 0); - slotsObject.slot[slotIndex].scanlinesStrength = uopt->scanlineStrength; - slotsObject.slot[slotIndex].wantVdsLineFilter = (uopt->wantVdsLineFilter ? 1 : 0); - slotsObject.slot[slotIndex].wantStepResponse = (uopt->wantStepResponse ? 1 : 0); - slotsObject.slot[slotIndex].wantPeaking = (uopt->wantPeaking ? 1 : 0); - slotsObject.slot[slotIndex].enableAutoGain = (uopt->enableAutoGain ? 1 : 0); - slotsObject.slot[slotIndex].enableFrameTimeLock = (uopt->enableFrameTimeLock ? 1 : 0); - slotsObject.slot[slotIndex].frameTimeLockMethod = uopt->frameTimeLockMethod; - slotsObject.slot[slotIndex].deintMode = uopt->deintMode; - slotsObject.slot[slotIndex].wantTap6 = (uopt->wantTap6 ? 1 : 0); - slotsObject.slot[slotIndex].wantFullHeight = (uopt->wantFullHeight ? 1 : 0); - // slotsObject.slot[slotIndex].matchPresetSource = uopt->matchPresetSource; - slotsObject.slot[slotIndex].PalForce60 = (uopt->PalForce60 ? 1 : 0); + slotsObject.slot[slotIndex].resolutionID = uopt.resolutionID; + slotsObject.slot[slotIndex].scanlines = (uopt.wantScanlines ? 1 : 0); + slotsObject.slot[slotIndex].scanlinesStrength = uopt.scanlineStrength; + slotsObject.slot[slotIndex].wantVdsLineFilter = (uopt.wantVdsLineFilter ? 1 : 0); + slotsObject.slot[slotIndex].wantStepResponse = (uopt.wantStepResponse ? 1 : 0); + slotsObject.slot[slotIndex].wantPeaking = (uopt.wantPeaking ? 1 : 0); + slotsObject.slot[slotIndex].enableAutoGain = (uopt.enableAutoGain ? 1 : 0); + slotsObject.slot[slotIndex].enableFrameTimeLock = (uopt.enableFrameTimeLock ? 1 : 0); + slotsObject.slot[slotIndex].frameTimeLockMethod = uopt.frameTimeLockMethod; + slotsObject.slot[slotIndex].deintMode = uopt.deintMode; + slotsObject.slot[slotIndex].wantTap6 = (uopt.wantTap6 ? 1 : 0); + slotsObject.slot[slotIndex].wantFullHeight = (uopt.wantFullHeight ? 1 : 0); + // slotsObject.slot[slotIndex].matchPresetSource = uopt.matchPresetSource; + slotsObject.slot[slotIndex].PalForce60 = (uopt.PalForce60 ? 1 : 0); } /** @@ -170,12 +170,12 @@ bool slotFlush() { if(slotGetData(slotObject) == -1) return false; // update current slot - slotUpdate(slotObject, uopt->slotID); + slotUpdate(slotObject, uopt.slotID); // write back the data if(!slotSetData(slotObject)) return false; - _DBGF(PSTR("slotID: %d has been updated\n"), uopt->slotID); + _DBGF(PSTR("slotID: %d has been updated\n"), uopt.slotID); return true; } @@ -230,26 +230,26 @@ void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex) { ); // if that was current slot, also reset the runtime paramters // TODO: see prefsLoadDefaults() - if(slotIndex == uopt->slotID) { - uopt->resolutionID = Output240p; - GBS::GBS_PRESET_ID::write((uint8_t)uopt->resolutionID); - uopt->wantScanlines = false; - uopt->scanlineStrength = SCANLINE_STRENGTH_INIT; - uopt->wantVdsLineFilter = false; - uopt->wantStepResponse = true; - uopt->wantPeaking = true; - uopt->enableAutoGain = false; - uopt->enableFrameTimeLock = false; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! - uopt->frameTimeLockMethod = false; // compatibility with more displays - uopt->deintMode = false; - uopt->wantTap6 = true; - uopt->wantFullHeight = true; - // uopt->matchPresetSource = 1; - uopt->PalForce60 = false; + if(slotIndex == uopt.slotID) { + uopt.resolutionID = Output240p; + GBS::GBS_PRESET_ID::write((uint8_t)uopt.resolutionID); + uopt.wantScanlines = false; + uopt.scanlineStrength = SCANLINE_STRENGTH_INIT; + uopt.wantVdsLineFilter = false; + uopt.wantStepResponse = true; + uopt.wantPeaking = true; + uopt.enableAutoGain = false; + uopt.enableFrameTimeLock = false; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! + uopt.frameTimeLockMethod = false; // compatibility with more displays + uopt.deintMode = false; + uopt.wantTap6 = true; + uopt.wantFullHeight = true; + // uopt.matchPresetSource = 1; + uopt.PalForce60 = false; - // uopt->wantOutputComponent = 0; - // uopt->preferScalingRgbhv = 1; - // uopt->enableCalibrationADC = 1; - // uopt->disableExternalClockGenerator = 0; + // uopt.wantOutputComponent = 0; + // uopt.preferScalingRgbhv = 1; + // uopt.enableCalibrationADC = 1; + // uopt.disableExternalClockGenerator = 0; } } diff --git a/src/tv5725.h b/src/tv5725.h index 2105e941..67c9c1af 100644 --- a/src/tv5725.h +++ b/src/tv5725.h @@ -192,7 +192,7 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x00, 0x43, 0, 2> PLL_R; // Skew control for testing typedef UReg<0x00, 0x43, 2, 2> PLL_S; // Skew control for testing typedef UReg<0x00, 0x43, 4, 1> PLL_LEN; // Lock Enable - typedef UReg<0x00, 0x43, 5, 1> PLL_VCORST; // VCO control voltage reset bit (When =1, reset VCO control voltage) + typedef UReg<0x00, 0x43, 5, 1> PLL_VCORST; // VCO control voltage reset bit (When = 1, reset VCO control voltage) typedef UReg<0x00, 0x44, 0, 1> DAC_RGBS_PWDNZ; // DAC enable (When = 0, DAC (R,G,B,S) in power down mode When = 1, DAC (R,G,B,S) is enable) typedef UReg<0x00, 0x44, 1, 1> DAC_RGBS_RPD; // RPD, RDAC power down control (When = 0, RDAC work normally; When = 1, RDAC is in power down mode) typedef UReg<0x00, 0x44, 2, 1> DAC_RGBS_R0ENZ; // R0ENZ, DAC min output bypass (When = 0, RDAC output Min voltage; When = 1, RDAC output follow input R data) @@ -209,7 +209,7 @@ class TV5725 : public tw::SegmentedSlave // S0_45_5:1 - reserverd typedef UReg<0x00, 0x45, 6, 2> CKT_FF_CNTRL; // CKT used to control FIFO typedef UReg<0x00, 0x46, 0, 8> RESET_CONTROL_0x46; // CONTROL 00 - typedef UReg<0x00, 0x46, 0, 1> SFTRST_IF_RSTZ; // Input formatter reset control (When = 0, input formatter is in reset status When = 1, input formatter work normally) + typedef UReg<0x00, 0x46, 0, 1> SFTRST_IF_RSTZ; // Input formatter reset control (When = 0, input formatter is in reset status; When = 1, input formatter work normally) typedef UReg<0x00, 0x46, 1, 1> SFTRST_DEINT_RSTZ; // Deint_madpt3 reset control (When = 0, deint_madpt3 is in reset status; When = 1, deint_madpt3 work normally) typedef UReg<0x00, 0x46, 2, 1> SFTRST_MEM_FF_RSTZ; // Mem_ff (wff/rff/playback/capture) reset control (When = 0, mem_ff is in reset status; When = 1, mem_ff work normally) typedef UReg<0x00, 0x46, 3, 1> SFTRST_MEM_RSTZ; // Mem controller reset control (When = 0, mem controller is in reset status; When = 1, mem controller work normally) @@ -690,427 +690,710 @@ class TV5725 : public tw::SegmentedSlave // // Video Processor Registers (all registers R/W) // - typedef UReg<0x03, 0x00, 0, 1> VDS_SYNC_EN; - typedef UReg<0x03, 0x00, 1, 1> VDS_FIELDAB_EN; - typedef UReg<0x03, 0x00, 2, 1> VDS_DFIELD_EN; - typedef UReg<0x03, 0x00, 3, 1> VDS_FIELD_FLIP; - typedef UReg<0x03, 0x00, 4, 1> VDS_HSCALE_BYPS; - typedef UReg<0x03, 0x00, 5, 1> VDS_VSCALE_BYPS; - typedef UReg<0x03, 0x00, 6, 1> VDS_HALF_EN; - typedef UReg<0x03, 0x00, 7, 1> VDS_SRESET; - typedef UReg<0x03, 0x01, 0, 12> VDS_HSYNC_RST; - typedef UReg<0x03, 0x02, 4, 11> VDS_VSYNC_RST; - typedef UReg<0x03, 0x04, 0, 12> VDS_HB_ST; - typedef UReg<0x03, 0x05, 4, 12> VDS_HB_SP; - typedef UReg<0x03, 0x07, 0, 11> VDS_VB_ST; - typedef UReg<0x03, 0x08, 4, 11> VDS_VB_SP; - typedef UReg<0x03, 0x0A, 0, 12> VDS_HS_ST; - typedef UReg<0x03, 0x0B, 4, 12> VDS_HS_SP; - typedef UReg<0x03, 0x0D, 0, 11> VDS_VS_ST; - typedef UReg<0x03, 0x0E, 4, 11> VDS_VS_SP; - typedef UReg<0x03, 0x10, 0, 12> VDS_DIS_HB_ST; - typedef UReg<0x03, 0x11, 4, 12> VDS_DIS_HB_SP; - typedef UReg<0x03, 0x13, 0, 11> VDS_DIS_VB_ST; - typedef UReg<0x03, 0x14, 4, 11> VDS_DIS_VB_SP; - typedef UReg<0x03, 0x16, 0, 10> VDS_HSCALE; - typedef UReg<0x03, 0x17, 4, 10> VDS_VSCALE; - typedef UReg<0x03, 0x19, 0, 10> VDS_FRAME_RST; - typedef UReg<0x03, 0x1A, 4, 1> VDS_FLOCK_EN; - typedef UReg<0x03, 0x1A, 5, 1> VDS_FREERUN_FID; - typedef UReg<0x03, 0x1A, 6, 1> VDS_FID_AA_DLY; - typedef UReg<0x03, 0x1A, 7, 1> VDS_FID_RST; + typedef UReg<0x03, 0x00, 0, 1> VDS_SYNC_EN; // External sync enable, active high - This bit enable sync lock mode (see: DEVELOPER_NOTES.md -> S3_00) + typedef UReg<0x03, 0x00, 1, 1> VDS_FIELDAB_EN; // ABAB double field mode enable (In field double mode, when this bit is 1, VDS works in ABAB mode, otherwise it works in AABB mode.) + typedef UReg<0x03, 0x00, 2, 1> VDS_DFIELD_EN; // Double field mode enable active high (This bit enable field double mode, ex, frame rate from 50Hz to 100Hz, or from 60Hz to 120Hz. When this bit is 1, the output timing is interlaced) + typedef UReg<0x03, 0x00, 3, 1> VDS_FIELD_FLIP; // Flip field control (This bit is field flip control bit, it only used in interlace mode. When it is 1, it inverts the output field) + typedef UReg<0x03, 0x00, 4, 1> VDS_HSCALE_BYPS; // Horizontal scale up bypass control, active high (When this bit is 1, data will bypass horizontal scale up process) + typedef UReg<0x03, 0x00, 5, 1> VDS_VSCALE_BYPS; // Vertical scale up bypass control, active high (When this bit is 1, data will bypass vertical scale up process) + typedef UReg<0x03, 0x00, 6, 1> VDS_HALF_EN; // Horizontal scale up bypass control, active high + typedef UReg<0x03, 0x00, 7, 1> VDS_SRESET; // Horizontal scale up bypass control, active high (When this bit is 1, it reset the VDS_PROC internal module ds_video_enhance) + typedef UReg<0x03, 0x01, 0, 12> VDS_HSYNC_RST; // Internal Horizontal period control bit[7:0], Half of total pixels in field double mode. + // This field contains horizontal total value minus 1. + // EX: Horizontal pixels is A, then HSYNC_RST[9:0] = A-1, in field double mode, HSYNC_RST[9:0] = (A/2 –1)) + typedef UReg<0x03, 0x02, 4, 11> VDS_VSYNC_RST; // Internal Vertical period control bit (This field contains vertical total value minus 1) + // 02_7:1 - reserved + typedef UReg<0x03, 0x04, 0, 12> VDS_HB_ST; // Horizontal blanking start position control bit (This field is used to program horizontal blanking start position, this blanking is used to get data from memory) + typedef UReg<0x03, 0x05, 4, 12> VDS_HB_SP; // Horizontal blanking stop position control bit (This field is used to program horizontal blanking stop position, this blanking is used to get data from memory) + typedef UReg<0x03, 0x07, 0, 11> VDS_VB_ST; // Vertical blanking start position control bit (This field is used to program vertical blanking start position) + // 08_3:1 - reserved + typedef UReg<0x03, 0x08, 4, 11> VDS_VB_SP; // Vertical blanking stop position control bit (This field is used to program vertical blanking stop position) + // 09_7:1 - reserved + typedef UReg<0x03, 0x0A, 0, 12> VDS_HS_ST; // Horizontal sync start position control bit (This field is used to program horizontal sync start position) + typedef UReg<0x03, 0x0B, 4, 12> VDS_HS_SP; // Horizontal sync stop position control bit (This field is used to program horizontal sync stop position) + typedef UReg<0x03, 0x0D, 0, 11> VDS_VS_ST; // Vertical sync start position control bit (This field is used to program vertical sync start position) + // 0E_3:1 - reserved + typedef UReg<0x03, 0x0E, 4, 11> VDS_VS_SP; // Vertical sync stop position control bit (This field is used to program vertical sync stop position) + typedef UReg<0x03, 0x10, 0, 12> VDS_DIS_HB_ST; // Final display horizontal blanking start position control bit (This field contains final display horizontal blanking start position control, this blanking is used to clean the output data in blanking) + typedef UReg<0x03, 0x11, 4, 12> VDS_DIS_HB_SP; // Final display horizontal blanking stop position control bit (This field contains final display horizontal blanking stop position control, this blanking is used to clean the output data in blanking) + typedef UReg<0x03, 0x13, 0, 11> VDS_DIS_VB_ST; // Final display vertical blanking start position control bit (This field contains final display vertical blanking start position control, this blanking is used to clean the output data in blanking) + // 14_3:1 - reserved + typedef UReg<0x03, 0x14, 4, 11> VDS_DIS_VB_SP; // Final display vertical blanking stop position control bit (This field contains final display vertical blanking stop position control, this blanking is used to clean the output data in blanking) + typedef UReg<0x03, 0x16, 0, 10> VDS_HSCALE; // Horizontal scaling coefficient bit. + // This field indicates the ratio of scaling up. + // HSCALE = 1024 * (resolution of input) / (resolution of output) + // EX: 720 * 480 -> 800 * 480, HSCALE = 1024 * 720 / 800 + // 17_2:2 - reserved + typedef UReg<0x03, 0x17, 4, 10> VDS_VSCALE; // Vertical scaling up coefficient bit. + // This field indicates the ratio of vertical scaling up. + // VSCALE = 1024 * (resolution of input / resolution of output) + // EX: 720*480 -> 720*576, VSCALE = 1024 * 480 /576 + // 18_6:2 - reserved + typedef UReg<0x03, 0x19, 0, 10> VDS_FRAME_RST; // Frame reset period control bit + // This field indicates how many frames VSD_PROC locked at each time, it based on the input vertical sync. + // EX: FRAME_RST=4, this means VDS_PROC will lock every 5 frames, + // (This frame number is counts at every input vertical sync, the frame number of VDS_PROC output maybe different) + // 1A_2:2 - reserved + typedef UReg<0x03, 0x1A, 4, 1> VDS_FLOCK_EN; // Frame lock enable, active high + // This bit enables the frame lock mode, when this bit is 1, VDS_PROC output + // timing will lock with its input timing (from INPUT_FORMATTER) at every 2 or more frames. + typedef UReg<0x03, 0x1A, 5, 1> VDS_FREERUN_FID; // Enable internal free run field index generation, active high + // When this bit is 1, the output field index is internal free run field, + // otherwise the output field index is based on input field index. + typedef UReg<0x03, 0x1A, 6, 1> VDS_FID_AA_DLY; // Enable internal free run AABB field delay 1 frame, active high (When this bit is 1, the internal free run AABB field will delay 1 frame) + typedef UReg<0x03, 0x1A, 7, 1> VDS_FID_RST; // Enable internal free run field index reset, active high (When this bit is 1, internal free run field index will reset at every frame number is 0) - typedef UReg<0x03, 0x1B, 0, 32> VDS_FR_SELECT; - typedef UReg<0x03, 0x1F, 0, 4> VDS_FRAME_NO; - typedef UReg<0x03, 0x1F, 4, 1> VDS_DIF_FR_SEL_EN; - typedef UReg<0x03, 0x1F, 5, 1> VDS_EN_FR_NUM_RST; - typedef UReg<0x03, 0x20, 0, 11> VDS_VSYN_SIZE1; - typedef UReg<0x03, 0x22, 0, 11> VDS_VSYN_SIZE2; - typedef UReg<0x03, 0x24, 0, 8> VDS_3_24; // convenience - typedef UReg<0x03, 0x24, 0, 1> VDS_UV_FLIP; - typedef UReg<0x03, 0x24, 1, 1> VDS_U_DELAY; - typedef UReg<0x03, 0x24, 2, 1> VDS_V_DELAY; - typedef UReg<0x03, 0x24, 3, 1> VDS_TAP6_BYPS; - typedef UReg<0x03, 0x24, 4, 2> VDS_Y_DELAY; - typedef UReg<0x03, 0x24, 6, 2> VDS_WEN_DELAY; - typedef UReg<0x03, 0x25, 0, 10> VDS_D_SP; - typedef UReg<0x03, 0x26, 6, 1> VDS_D_RAM_BYPS; - typedef UReg<0x03, 0x26, 7, 1> VDS_BLEV_AUTO_EN; - typedef UReg<0x03, 0x27, 0, 4> VDS_USER_MIN; - typedef UReg<0x03, 0x27, 4, 4> VDS_USER_MAX; - typedef UReg<0x03, 0x28, 0, 8> VDS_BLEV_LEVEL; - typedef UReg<0x03, 0x29, 0, 8> VDS_BLEV_GAIN; - typedef UReg<0x03, 0x2A, 0, 1> VDS_BLEV_BYPS; - typedef UReg<0x03, 0x2A, 4, 2> VDS_STEP_DLY_CNTRL; - typedef UReg<0x03, 0x2A, 6, 2> VDS_0X2A_RESERVED_2BITS; - typedef UReg<0x03, 0x2B, 0, 4> VDS_STEP_GAIN; - typedef UReg<0x03, 0x2B, 4, 3> VDS_STEP_CLIP; - typedef UReg<0x03, 0x2B, 7, 1> VDS_UV_STEP_BYPS; + typedef UReg<0x03, 0x1B, 0, 32> VDS_FR_SELECT; // Frame size select control bit (FR_SELECT[2n+1:2n] is for frame n selection. 0 select VSYNC_RST; 1 select VSYNC_SIZE1; 2 select VSYNC_SIZE2) + typedef UReg<0x03, 0x1F, 0, 4> VDS_FRAME_NO; // Programmable repeat frame number control bit (This field defines the repeated frame number, EX: if frame_no = 2, then the frame will repeat every 3 frame) see: DEVELOPER_NOTES.md -> S3_1F + typedef UReg<0x03, 0x1F, 4, 1> VDS_DIF_FR_SEL_EN; // Enable the different frame size, active high (When this bit is 1, VDS_PROC can generate a sequence of different frame size) + typedef UReg<0x03, 0x1F, 5, 1> VDS_EN_FR_NUM_RST; // Enable frame number reset, active high (When this bit is 1, frame number will be reset to 1 when frame lock is occur) + // 1F_6:2 - reserved + typedef UReg<0x03, 0x20, 0, 11> VDS_VSYN_SIZE1; // Programmable vertical total size 1 control bit + // This field contains the vertical total line number minus 1. It can be the same + // as vsync_rst and vsync_size2, it also can different with them, and it + // can be used to define different frame size. + // 20_3:5 - reserved + typedef UReg<0x03, 0x22, 0, 11> VDS_VSYN_SIZE2; // Programmable vertical total size 2 control bit + // This field contains the vertical total line number minus 1. + // It can be the same as vsync_rst and vsync_size1, it also can different + // with them, and it can be used to define different frame size. + // 23_3:5 - reserved + typedef UReg<0x03, 0x24, 0, 8> VDS_3_24; // VDS_PROC 36 + typedef UReg<0x03, 0x24, 0, 1> VDS_UV_FLIP; // 422 to 444 conversion UV flip control (This bit is used to flip UV, when this bit is 1, UV position will be flipped) + typedef UReg<0x03, 0x24, 1, 1> VDS_U_DELAY; // UV 422 to 444 conversion U delay (When this bit is 1, U will delay 1 clock, otherwise, no delay for internal pipe) + typedef UReg<0x03, 0x24, 2, 1> VDS_V_DELAY; // UV 422 to 444 conversion V delay (When this bit is 1, V will delay 1 clock, otherwise, no delay for internal pipe) + typedef UReg<0x03, 0x24, 3, 1> VDS_TAP6_BYPS; // Tap6 filter in 422 to 444 conversion bypass control, active high (This bit is the UV interpolation filter enable control; when this bit is 1, UV bypass the filter) + typedef UReg<0x03, 0x24, 4, 2> VDS_Y_DELAY; // Y compensation delay control bit [1:0] in 422 to 444 conversion (To compensation the pipe of UV, program this field can delay Y from 1 to 4 clocks) (see: DEVELOPER_NOTES.md -> S3_24_4) + typedef UReg<0x03, 0x24, 6, 2> VDS_WEN_DELAY; // Compensation delay control bit [1:0] for horizontal write enable (This two-bit register defines the compensation delay of horizontal scale up write enable and phase) (see: DEVELOPER_NOTES.md -> S3_24_6) + typedef UReg<0x03, 0x25, 0, 10> VDS_D_SP; // Line buffer write reset position control bit (This field contains the write reset position of the line buffer, this position is also the write start position of the buffer) + // 26_2:4 - reserved + typedef UReg<0x03, 0x26, 6, 1> VDS_D_RAM_BYPS; // Line buffer one line delay data bypass, active high (When this bit is 1, data will bypass the line buffer) + typedef UReg<0x03, 0x26, 7, 1> VDS_BLEV_AUTO_EN; // Y minimum and maximum level auto detection enable, active high + // This bit is the Y min and max auto detection enable bit for black/white level expansion, + // when this bit is 1, the min and max value of Y in every frame will be detected, + // otherwise, the min and max value are defined by register + typedef UReg<0x03, 0x27, 0, 4> VDS_USER_MIN; // Programmable minimum value control bit (This field is the user defined min value for black level expansion, the actual min value in use is 2*blev_det_min+1) + typedef UReg<0x03, 0x27, 4, 4> VDS_USER_MAX; // Programmable maximum value control bit (This field is the user defined max value for black level expansion, the actual min value in use is 16*blev_det_max+15) + typedef UReg<0x03, 0x28, 0, 8> VDS_BLEV_LEVEL; // Black level expansion level control bit (This field defines the black level expansion threshold level value, data larger than this level will have no black level expansion process) + typedef UReg<0x03, 0x29, 0, 8> VDS_BLEV_GAIN; // Black level expansion gain control bit (This field contains the gain control of black level expansion, its range is (0~16)*16) + typedef UReg<0x03, 0x2A, 0, 1> VDS_BLEV_BYPS; // Black level expansion bypass control, active high (This bit is the bypass control bit of black level expansion, when it is 1, data will bypass black level expansion process) + // 2A_1:3 - reserved + typedef UReg<0x03, 0x2A, 4, 2> VDS_STEP_DLY_CNTRL; // UV step response data select control bit (see: DEVELOPER_NOTES.md -> S3_2A) + // 2A_6:2 - reserved + // typedef UReg<0x03, 0x2A, 6, 2> VDS_0X2A_RESERVED_2BITS; + typedef UReg<0x03, 0x2B, 0, 4> VDS_STEP_GAIN; // UV Step response gain control bit (This field register can adjust the UV edge improvement, the larger value of this register, the sharper edge will appear, the range of this gain is (0~4)*4) + typedef UReg<0x03, 0x2B, 4, 3> VDS_STEP_CLIP; // UV step response clip control bit (This filed contains the clip control value of UV step response) + typedef UReg<0x03, 0x2B, 7, 1> VDS_UV_STEP_BYPS; // UV step response bypass control, active high (When this bit is 1, UV data will don’t do step response) - typedef UReg<0x03, 0x2C, 0, 8> VDS_SK_U_CENTER; - typedef UReg<0x03, 0x2D, 0, 8> VDS_SK_V_CENTER; - typedef UReg<0x03, 0x2E, 0, 8> VDS_SK_Y_LOW_TH; - typedef UReg<0x03, 0x2F, 0, 8> VDS_SK_Y_HIGH_TH; - typedef UReg<0x03, 0x30, 0, 8> VDS_SK_RANGE; - typedef UReg<0x03, 0x31, 0, 4> VDS_SK_GAIN; - typedef UReg<0x03, 0x31, 4, 1> VDS_SK_Y_EN; - typedef UReg<0x03, 0x31, 5, 1> VDS_SK_BYPS; + typedef UReg<0x03, 0x2C, 0, 8> VDS_SK_U_CENTER; // Skin color correction U center position control bit (This field contains the skin color center position U value, the value is 2’s) + typedef UReg<0x03, 0x2D, 0, 8> VDS_SK_V_CENTER; // Skin color correction V center position control bit (This field contains the skin color center position U value, the value is 2’s) + typedef UReg<0x03, 0x2E, 0, 8> VDS_SK_Y_LOW_TH; // Skin color correction Y low threshold control bit (Y low threshold value for skin color correction, if y less than this threshold, no skin color correction done) + typedef UReg<0x03, 0x2F, 0, 8> VDS_SK_Y_HIGH_TH; // Skin color correction Y high threshold control bit (Y high threshold value for skin color correction, if y larger than this threshold, no skin color correction done) + typedef UReg<0x03, 0x30, 0, 8> VDS_SK_RANGE; // Skin color correction range control bit (The skin color correction will done just when the value abs(u-u_center)+abs(v- v_enter) less than this programmable range) + typedef UReg<0x03, 0x31, 0, 4> VDS_SK_GAIN; // Skin color correction gain control bit (This register defines the degree of the skin color correction, the higher the value, the more skin color correction done. Its range is (0~1)*16) + typedef UReg<0x03, 0x31, 4, 1> VDS_SK_Y_EN; // Skin color Y detect enable, active high (When this bit is 1, take the Y value as the condition of skin color correction, just when the Y value larger than y_low_th and less the y_high_th, the correction can be done) + typedef UReg<0x03, 0x31, 5, 1> VDS_SK_BYPS; // Skin color correction bypass control, active high (When this bit is 1, the skin color correction will be bypassed) + // 31_6:2 - reserved + typedef UReg<0x03, 0x32, 0, 2> VDS_SVM_BPF_CNTRL; // SVM data generation select control (see: DEVELOPER_NOTES.md -> S3_32) + typedef UReg<0x03, 0x32, 2, 1> VDS_SVM_POL_FLIP; // SVM polarity flip control bit (When this bit is 1, the SVM signal’s polarity will be flipped, otherwise, SVM remains the original phase) + typedef UReg<0x03, 0x32, 3, 1> VDS_SVM_2ND_BYPS; // 2nd order SVM signal generation bypass, active high (When this bit is 1, SVM signal is 1st order, otherwise, it is 2nd order derivative signal) + typedef UReg<0x03, 0x32, 4, 3> VDS_SVM_VCLK_DELAY; // To match YUV pipe, SVM data delay by VCLK control bit (This field define the SVM compensation delay from 1 to 8 VCLKs) + typedef UReg<0x03, 0x32, 7, 1> VDS_SVM_SIGMOID_BYPS; // SVM bypass the sigmoid function, active high (When this bit is 1, SVM signal bypass a sigmoid function. This function can make the SVM signal sharper) + typedef UReg<0x03, 0x33, 0, 8> VDS_SVM_GAIN; // SVM gain control bit (This field contains the gain value of SVM data., its range is (0~16)*16) + typedef UReg<0x03, 0x34, 0, 8> VDS_SVM_OFFSET; // SVM offset control bit (This field contains the offset value of SVM data, its range is 0~255) - typedef UReg<0x03, 0x32, 0, 2> VDS_SVM_BPF_CNTRL; - typedef UReg<0x03, 0x32, 2, 1> VDS_SVM_POL_FLIP; - typedef UReg<0x03, 0x32, 3, 1> VDS_SVM_2ND_BYPS; - typedef UReg<0x03, 0x32, 4, 3> VDS_SVM_VCLK_DELAY; - typedef UReg<0x03, 0x32, 7, 1> VDS_SVM_SIGMOID_BYPS; - typedef UReg<0x03, 0x33, 0, 8> VDS_SVM_GAIN; - typedef UReg<0x03, 0x34, 0, 8> VDS_SVM_OFFSET; + typedef UReg<0x03, 0x35, 0, 8> VDS_Y_GAIN; // Y dynamic range expansion gain control bit (This field contains the Y gain value in dynamic range expansion process, its range is (0 ~ 2)*128) + typedef UReg<0x03, 0x36, 0, 8> VDS_UCOS_GAIN; // U dynamic range expansion cos gain control bit (This field contains the U gain value in dynamic range expansion process, its range is (-4 ~ 4)*32) + typedef UReg<0x03, 0x37, 0, 8> VDS_VCOS_GAIN; // V dynamic range expansion gain control bit (This field contains the V gain value in dynamic range expansion process, its range is (-4 ~ 4)*32) + typedef UReg<0x03, 0x38, 0, 8> VDS_USIN_GAIN; // U dynamic range expansion sin gain control bit (This field contains the U sin gain value in dynamic range expansion process, its range is (-4 ~ 4)*32) + typedef UReg<0x03, 0x39, 0, 8> VDS_VSIN_GAIN; // V dynamic range expansion sin gain control bit (This field contains the V sin gain value in dynamic range expansion process, its range is (-4 ~ 4)*32) + typedef UReg<0x03, 0x3A, 0, 8> VDS_Y_OFST; // Y dynamic range expansion offset control bit (This field contains the Y offset value in dynamic range expansion process, its range is –128 ~ 127) + typedef UReg<0x03, 0x3B, 0, 8> VDS_U_OFST; // U dynamic range expansion offset control bit (This field contains the U offset value in dynamic range expansion process, its range is –128 ~ 127) + typedef UReg<0x03, 0x3C, 0, 8> VDS_V_OFST; // V dynamic range expansion offset control bit (This field contains the V offset value in dynamic range expansion process., its range is –128 ~ 127) - typedef UReg<0x03, 0x35, 0, 8> VDS_Y_GAIN; - typedef UReg<0x03, 0x36, 0, 8> VDS_UCOS_GAIN; - typedef UReg<0x03, 0x37, 0, 8> VDS_VCOS_GAIN; - typedef UReg<0x03, 0x38, 0, 8> VDS_USIN_GAIN; - typedef UReg<0x03, 0x39, 0, 8> VDS_VSIN_GAIN; - typedef UReg<0x03, 0x3A, 0, 8> VDS_Y_OFST; - typedef UReg<0x03, 0x3B, 0, 8> VDS_U_OFST; - typedef UReg<0x03, 0x3C, 0, 8> VDS_V_OFST; - - typedef UReg<0x03, 0x3D, 0, 9> VDS_SYNC_LEV; - typedef UReg<0x03, 0x3E, 3, 1> VDS_CONVT_BYPS; - typedef UReg<0x03, 0x3E, 4, 1> VDS_DYN_BYPS; - typedef UReg<0x03, 0x3E, 7, 1> VDS_BLK_BF_EN; - typedef UReg<0x03, 0x3F, 0, 8> VDS_UV_BLK_VAL; - typedef UReg<0x03, 0x40, 0, 1> VDS_1ST_INT_BYPS; - typedef UReg<0x03, 0x40, 1, 1> VDS_2ND_INT_BYPS; - typedef UReg<0x03, 0x40, 2, 1> VDS_IN_DREG_BYPS; - typedef UReg<0x03, 0x40, 4, 2> VDS_SVM_V4CLK_DELAY; - - typedef UReg<0x03, 0x41, 0, 10> VDS_PK_LINE_BUF_SP; - typedef UReg<0x03, 0x42, 6, 1> VDS_PK_RAM_BYPS; - typedef UReg<0x03, 0x43, 0, 1> VDS_PK_VL_HL_SEL; - typedef UReg<0x03, 0x43, 1, 1> VDS_PK_VL_HH_SEL; - typedef UReg<0x03, 0x43, 2, 1> VDS_PK_VH_HL_SEL; - typedef UReg<0x03, 0x43, 3, 1> VDS_PK_VH_HH_SEL; - typedef UReg<0x03, 0x44, 0, 3> VDS_PK_LB_CORE; - typedef UReg<0x03, 0x44, 3, 5> VDS_PK_LB_CMP; - typedef UReg<0x03, 0x45, 0, 6> VDS_PK_LB_GAIN; - typedef UReg<0x03, 0x46, 0, 3> VDS_PK_LH_CORE; - typedef UReg<0x03, 0x46, 3, 5> VDS_PK_LH_CMP; - typedef UReg<0x03, 0x47, 0, 6> VDS_PK_LH_GAIN; - typedef UReg<0x03, 0x48, 0, 3> VDS_PK_HL_CORE; - typedef UReg<0x03, 0x48, 3, 5> VDS_PK_HL_CMP; - typedef UReg<0x03, 0x49, 0, 6> VDS_PK_HL_GAIN; - typedef UReg<0x03, 0x4A, 0, 3> VDS_PK_HB_CORE; - typedef UReg<0x03, 0x4A, 3, 5> VDS_PK_HB_CMP; - typedef UReg<0x03, 0x4B, 0, 6> VDS_PK_HB_GAIN; - typedef UReg<0x03, 0x4C, 0, 3> VDS_PK_HH_CORE; - typedef UReg<0x03, 0x4C, 3, 5> VDS_PK_HH_CMP; - typedef UReg<0x03, 0x4D, 0, 6> VDS_PK_HH_GAIN; - typedef UReg<0x03, 0x4E, 0, 1> VDS_PK_Y_H_BYPS; - typedef UReg<0x03, 0x4E, 1, 1> VDS_PK_Y_V_BYPS; - typedef UReg<0x03, 0x4E, 3, 1> VDS_C_VPK_BYPS; - typedef UReg<0x03, 0x4E, 4, 3> VDS_C_VPK_CORE; - typedef UReg<0x03, 0x4F, 0, 6> VDS_C_VPK_GAIN; - - typedef UReg<0x03, 0x50, 0, 4> VDS_TEST_BUS_SEL; - typedef UReg<0x03, 0x50, 4, 1> VDS_TEST_EN; - typedef UReg<0x03, 0x50, 5, 1> VDS_DO_UV_DEV_BYPS; - typedef UReg<0x03, 0x50, 6, 1> VDS_DO_UVSEL_FLIP; - typedef UReg<0x03, 0x50, 7, 1> VDS_DO_16B_EN; - - typedef UReg<0x03, 0x51, 7, 11> VDS_GLB_NOISE; - typedef UReg<0x03, 0x52, 4, 1> VDS_NR_Y_BYPS; - typedef UReg<0x03, 0x52, 5, 1> VDS_NR_C_BYPS; - typedef UReg<0x03, 0x52, 6, 1> VDS_NR_DIF_LPF5_BYPS; - typedef UReg<0x03, 0x52, 7, 1> VDS_NR_MI_TH_EN; - typedef UReg<0x03, 0x53, 0, 7> VDS_NR_MI_OFFSET; - typedef UReg<0x03, 0x53, 7, 1> VDS_NR_MIG_USER_EN; - typedef UReg<0x03, 0x54, 0, 4> VDS_NR_MI_GAIN; - typedef UReg<0x03, 0x54, 4, 4> VDS_NR_STILL_GAIN; - typedef UReg<0x03, 0x55, 0, 4> VDS_NR_MI_THRES; - typedef UReg<0x03, 0x55, 4, 1> VDS_NR_EN_H_NOISY; - typedef UReg<0x03, 0x55, 6, 1> VDS_NR_EN_GLB_STILL; - typedef UReg<0x03, 0x55, 7, 1> VDS_NR_GLB_STILL_MENU; - typedef UReg<0x03, 0x56, 0, 7> VDS_NR_NOISY_OFFSET; - typedef UReg<0x03, 0x56, 7, 1> VDS_W_LEV_BYPS; - typedef UReg<0x03, 0x57, 0, 8> VDS_W_LEV; - typedef UReg<0x03, 0x58, 0, 8> VDS_WLEV_GAIN; - typedef UReg<0x03, 0x59, 0, 8> VDS_NS_U_CENTER; - typedef UReg<0x03, 0x5A, 0, 8> VDS_NS_V_CENTER; - typedef UReg<0x03, 0x5B, 0, 7> VDS_NS_U_GAIN; - typedef UReg<0x03, 0x5B, 7, 15> VDS_NS_SQUARE_RAD; - typedef UReg<0x03, 0x5D, 6, 8> VDS_NS_Y_HIGH_TH; - typedef UReg<0x03, 0x5E, 6, 7> VDS_NS_V_GAIN; - typedef UReg<0x03, 0x5F, 5, 5> VDS_NS_Y_LOW_TH; - typedef UReg<0x03, 0x60, 2, 1> VDS_NS_BYPS; - typedef UReg<0x03, 0x60, 3, 1> VDS_NS_Y_ACTIVE_EN; + typedef UReg<0x03, 0x3D, 0, 9> VDS_SYNC_LEV; // Sync level bit + // This field contains the composite sync level value, this value will add on Y, + // outside the composite sync interval. If the Y out is 1V, sync is 0.3V, + // then this value is (0.3/1)*1024=307, and the output sync’s max voltage is 0.5V + // 3E_1:2 - reserved + typedef UReg<0x03, 0x3E, 3, 1> VDS_CONVT_BYPS; // YUV to RGB color space conversion bypass control, active high + // When this bit is 1, YUV data will bypass the YUV to RGB conversion, the output will still be YUV data. + // When this bit is 0, YUV data will do YUV to RGB conversion, the output will be RGB data. + typedef UReg<0x03, 0x3E, 4, 1> VDS_DYN_BYPS; // Dynamic range expansion bypass control, active high (When this bit is 1, data will bypass the dynamic range expansion process) + // 3E_5:2 - reserved + typedef UReg<0x03, 0x3E, 7, 1> VDS_BLK_BF_EN; // Blanking set up enable, active high (When this bit is 1, final composite blank (dis_hb|dis_vb) will cut the garbage data in blanking interval) + typedef UReg<0x03, 0x3F, 0, 8> VDS_UV_BLK_VAL; // UV blanking amplitude value control bit (This filed indicates the amplitude value of UV in blanking interval, the highest bit of this programmable register is sign bit) + typedef UReg<0x03, 0x40, 0, 1> VDS_1ST_INT_BYPS; // The 1st stage interpolation bypass control, active high (When this bit is 1, the 1st stage interpolation (in YUV domain) will be bypassed, Y use tap19, and UV use tap7) + typedef UReg<0x03, 0x40, 1, 1> VDS_2ND_INT_BYPS; // The 2nd stage interpolation bypass control, active high (When this bit is 1, the 2nd stage interpolation (in RGB domain) will be bypassed, all RGB use tap11) + typedef UReg<0x03, 0x40, 2, 1> VDS_IN_DREG_BYPS; // Input data bypass the negedge trigger control, active high: + // When this bit is 0, input data will triggered by falling edge clock, + // When this bit is 1, the input data will bypass this falling edge clock delay.) + // 40_3:1 - reserved + typedef UReg<0x03, 0x40, 4, 2> VDS_SVM_V4CLK_DELAY; // SVM delay be V2CLK control bit (see: DEVELOPER_NOTES.md -> S3_40) + // 40_6:2 - reserved + typedef UReg<0x03, 0x41, 0, 10> VDS_PK_LINE_BUF_SP; // Line buffer for 2D peaking write reset position control bit (This field contains the write reset position of the line buffer, this position is also the write start position of the buffer.) + // 42_2:4 - reserved + typedef UReg<0x03, 0x42, 6, 1> VDS_PK_RAM_BYPS; // Line buffer for 2D peaking one line delay data bypass, active high (When this bit is 1, data will bypass the line buffer) + // 42_7:1 - reserved + typedef UReg<0x03, 0x43, 0, 1> VDS_PK_VL_HL_SEL; // 2D peaking vertical low-pass signal select the horizontal split filter control (low-pass filter select, 1 for tap3 and 0 for tap5) + typedef UReg<0x03, 0x43, 1, 1> VDS_PK_VL_HH_SEL; // 2D peaking vertical low-pass signal select the horizontal split filter control (for high-pass filter select, 1 for tap3 and 0 for tap5) + typedef UReg<0x03, 0x43, 2, 1> VDS_PK_VH_HL_SEL; // 2D peaking vertical high-pass signal select the horizontal split filter control (high-pass filter select, 1 for tap3 and 0 for tap5) + typedef UReg<0x03, 0x43, 3, 1> VDS_PK_VH_HH_SEL; // 2D peaking vertical high-pass signal select the horizontal split filter control (low-pass filter select, 1 for tap3 and 0 for tap5) + // 43_4:4 - reserved + typedef UReg<0x03, 0x44, 0, 3> VDS_PK_LB_CORE; // 2D peaking vertical low-pass horizontal band-pass signal coring level (Vertical low-pass and horizontal band-pass signal larger than this coring level will remain unchanged, otherwise it will be cut to 0) + typedef UReg<0x03, 0x44, 3, 5> VDS_PK_LB_CMP; // 2D peaking vertical low-pass horizontal band-pass signal threshold level (Vertical low-pass and horizontal band-pass signal larger than this coring level will remain unchanged, otherwise the gain will added on it) + typedef UReg<0x03, 0x45, 0, 6> VDS_PK_LB_GAIN; // 2D peaking vertical low-pass horizontal band-pass signal gain control (Vertical low-pass horizontal band-pass signal gain, its range is (0~4)*16) + // 45_6:2 - reserved + typedef UReg<0x03, 0x46, 0, 3> VDS_PK_LH_CORE; // 2D peaking vertical low-pass horizontal high-pass signal coring level (Vertical low-pass and horizontal high-pass signal larger than this coring level will remain unchanged, otherwise it will be cut to 0) + typedef UReg<0x03, 0x46, 3, 5> VDS_PK_LH_CMP; // 2D peaking vertical low-pass horizontal high-pass signal threshold level (Vertical low-pass and horizontal high-pass signal larger than this coring level will remain unchanged, otherwise the gain will added on it) + typedef UReg<0x03, 0x47, 0, 6> VDS_PK_LH_GAIN; // 2D peaking vertical low-pass horizontal high-pass signal gain control (Vertical low-pass horizontal high-pass signal gain, its range is (0~4)*16) + // 47_6:2 - reserved + typedef UReg<0x03, 0x48, 0, 3> VDS_PK_HL_CORE; // 2D peaking vertical high-pass horizontal low-pass signal coring level (Vertical high-pass and horizontal low-pass signal larger than this coring level will remain unchanged, otherwise it will be cut to 0) + typedef UReg<0x03, 0x48, 3, 5> VDS_PK_HL_CMP; // 2D peaking vertical high-pass horizontal low-pass signal threshold level (Vertical high-pass and horizontal low-pass signal larger than this coring level will remain unchanged, otherwise the gain will added on it) + typedef UReg<0x03, 0x49, 0, 6> VDS_PK_HL_GAIN; // 2D peaking vertical high-pass horizontal low-pass signal gain control (Vertical high-pass horizontal low-pass signal gain, its range is (0~4)*16) + // 49_6:2 - reserved + typedef UReg<0x03, 0x4A, 0, 3> VDS_PK_HB_CORE; // 2D peaking vertical high-pass horizontal band-pass signal coring level (Vertical high-pass and horizontal band-pass signal larger than this coring level will remain unchanged, otherwise it will be cut to 0) + typedef UReg<0x03, 0x4A, 3, 5> VDS_PK_HB_CMP; // 2D peaking vertical high-pass horizontal band-pass signal threshold level (Vertical high-pass and horizontal band-pass signal larger than this coring level will remain unchanged, otherwise the gain will added on it) + typedef UReg<0x03, 0x4B, 0, 6> VDS_PK_HB_GAIN; // 2D peaking vertical high-pass horizontal band-pass signal gain control (Vertical high-pass horizontal band-pass signal gain, its range is (0~4)*16) + typedef UReg<0x03, 0x4C, 0, 3> VDS_PK_HH_CORE; // 2D peaking vertical high-pass horizontal high-pass signal coring level (Vertical high-pass and horizontal high-pass signal larger than this coring level will remain unchanged, otherwise it will be cut to 0) + typedef UReg<0x03, 0x4C, 3, 5> VDS_PK_HH_CMP; // 2D peaking vertical high-pass horizontal high-pass signal threshold level (Vertical high-pass and horizontal high-pass signal larger than this coring level will remain unchanged, otherwise the gain will added on it) + typedef UReg<0x03, 0x4D, 0, 6> VDS_PK_HH_GAIN; // 2D peaking vertical high-pass horizontal high-pass signal gain control (Vertical high-pass horizontal high-pass signal gain, its range is (0~4)*16) + // 4D_6:2 - reserved + typedef UReg<0x03, 0x4E, 0, 1> VDS_PK_Y_H_BYPS; // Y horizontal peaking bypass control, active high (When this bit is 1, Y horizontal peaking will be bypassed) + typedef UReg<0x03, 0x4E, 1, 1> VDS_PK_Y_V_BYPS; // Y vertical peaking bypass control, active high (When this bit is 1, Y vertical peaking will be bypassed) + // 4E_2:1 - reserved + typedef UReg<0x03, 0x4E, 3, 1> VDS_C_VPK_BYPS; // UV vertical peaking bypass control, active high (When this bit is 1, UV vertical peaking will be bypassed) + typedef UReg<0x03, 0x4E, 4, 3> VDS_C_VPK_CORE; // UV vertical peaking coring level (UV vertical high-pass signal larger than this coring level will remain unchanged, otherwise it will be cut to 0) + // 4E_7:1 - reserved + typedef UReg<0x03, 0x4F, 0, 6> VDS_C_VPK_GAIN; // UV vertical peaking gain control bit (UV vertical high-pass signal gain control, its range is (0~4)*16) + // 4F_6:2 - reserved + typedef UReg<0x03, 0x50, 0, 4> VDS_TEST_BUS_SEL; // Test out select control bit (This register is used to select internal status bus to test bus) + typedef UReg<0x03, 0x50, 4, 1> VDS_TEST_EN; // Test enable, active high (This bit is the test bus out enable bit, when this bit is 1, the test bus can output the internal status, and otherwise, the test bus is 0Xaaaa) + typedef UReg<0x03, 0x50, 5, 1> VDS_DO_UV_DEV_BYPS; // 16-bit digital out UV decimation filter bypass control, active high (When this bit is 1, 16-bit 422 YUV digital out UV decimation will be bypassed) + typedef UReg<0x03, 0x50, 6, 1> VDS_DO_UVSEL_FLIP; // 16-bit digital out UV flip control (When this bit is 1, 16-bit 422 YUV digital out UV position will be flipped) + typedef UReg<0x03, 0x50, 7, 1> VDS_DO_16B_EN; // 16-bit digital out (422 format yuv) enable (When this bit is 1, digital out is 16-bit 422 YUV format; When it is 0, digital out is 24-bit) - typedef UReg<0x03, 0x60, 4, 10> VDS_C1_TAG_LOW_SLOPE; - typedef UReg<0x03, 0x61, 6, 10> VDS_C1_TAG_HIGH_SLOPE; - typedef UReg<0x03, 0x63, 0, 4> VDS_C1_GAIN; - typedef UReg<0x03, 0x63, 4, 8> VDS_C1_U_LOW; - typedef UReg<0x03, 0x64, 4, 8> VDS_C1_U_HIGH; - typedef UReg<0x03, 0x65, 4, 1> VDS_C1_BYPS; - typedef UReg<0x03, 0x65, 5, 8> VDS_C1_Y_THRESH; + typedef UReg<0x03, 0x51, 7, 11> VDS_GLB_NOISE; // Global still detection threshold value control bit: + // This field contains the global noise threshold value. If the total difference of two + // frame less than this programmable value, the picture is taken as still, + // otherwise, the picture is taken as moving picture. + // 52_3:1 - reserved + typedef UReg<0x03, 0x52, 4, 1> VDS_NR_Y_BYPS; // Y bypass the noise reduction process control (When this bit is 1, Y data will bypass the noise reduction process) + typedef UReg<0x03, 0x52, 5, 1> VDS_NR_C_BYPS; // UV bypass the noise reduction process control (When this bit is 1, UV data will bypass the noise reduction process) + typedef UReg<0x03, 0x52, 6, 1> VDS_NR_DIF_LPF5_BYPS; // Bypass control of the tap5 low-pass filter used for Y difference between two frames (When this bit is 1, Y difference data will bypass the tap5 low-pass filter) + typedef UReg<0x03, 0x52, 7, 1> VDS_NR_MI_TH_EN; // Noise reduction threshold control enable (This bit will enable the threshold control, active high) + typedef UReg<0x03, 0x53, 0, 7> VDS_NR_MI_OFFSET; // Motion index offset control bit (The offset control for motion index generation; When ds_mig_en is 1, ds_mig_offset[3:0] is user-defined motion index) + typedef UReg<0x03, 0x53, 7, 1> VDS_NR_MIG_USER_EN; // Motion index generation user mode enable (When this bit is 1, the motion index generation will use nr_mig_offt[3:0] as Motion index) + typedef UReg<0x03, 0x54, 0, 4> VDS_NR_MI_GAIN; // Motion index generation gain control bit (Motion index generation gain control, its range is (0~8)*2) + typedef UReg<0x03, 0x54, 4, 4> VDS_NR_STILL_GAIN; // Motion index generation gain control bit for still picture (When picture is still, this field contains the motion index generation gain, its range is (0~8)*2) + typedef UReg<0x03, 0x55, 0, 4> VDS_NR_MI_THRES; // Noise reduction threshold value bit (Noise-reduction threshold value. When MI is smaller than the threshold value, the noise reduction is enabled. Otherwise it is not) + typedef UReg<0x03, 0x55, 4, 1> VDS_NR_EN_H_NOISY; // High noisy picture index enable, active high (Enable high noisy index from de-interlacer, it means the picture’s noise is very large) + // 55_5:1 - reserved + typedef UReg<0x03, 0x55, 6, 1> VDS_NR_EN_GLB_STILL; // Global still index enable, active high (This bit enables the global still signal) + typedef UReg<0x03, 0x55, 7, 1> VDS_NR_GLB_STILL_MENU; // Menu mode control for global still index (used for debug) (see: DEVELOPER_NOTES.md -> S3_55) + typedef UReg<0x03, 0x56, 0, 7> VDS_NR_NOISY_OFFSET; // Motion index generation offset control bit for high noisy picture (When the picture is high noisy picture, this field contains the offset control for motion index generation) + typedef UReg<0x03, 0x56, 7, 1> VDS_W_LEV_BYPS; // White level expansion bypass control, active high (When this bit is 1, Y don’t do white level expansion) + typedef UReg<0x03, 0x57, 0, 8> VDS_W_LEV; // White level expansion level control bit (This field defines the white level expansion threshold level value; data less than this level will have no white level expansion process) + typedef UReg<0x03, 0x58, 0, 8> VDS_WLEV_GAIN; // White level expansion gain control bit (This field defines the white level expansion threshold level value; data less than this level will have no white level expansion process) + typedef UReg<0x03, 0x59, 0, 8> VDS_NS_U_CENTER; // Non-linear saturation center position U value control bit (This field contains the non-linear saturation center position U value, the value is 2’s) + typedef UReg<0x03, 0x5A, 0, 8> VDS_NS_V_CENTER; // Non-linear saturation center position V value control bit (This field contains the non-linear saturation center position V value, the value is 2’s) + typedef UReg<0x03, 0x5B, 0, 7> VDS_NS_U_GAIN; // Non-linear saturation U gain control bit (This field contains the U gain control for U component in the area which should do non-linear saturation, its range is (0~1)*128) + typedef UReg<0x03, 0x5B, 7, 15> VDS_NS_SQUARE_RAD; // Non-linear saturation range control bit (Non-linear saturation only did When (u-u_center)^2 + (v-v_center)^2 less than this programmable range value) + typedef UReg<0x03, 0x5D, 6, 8> VDS_NS_Y_HIGH_TH; // Non-linear saturation Y high threshold control bit (This filed defines the Y high threshold value for non-linear saturation, when y detect enable (60[3]=1), if y larger than this programmable value, no non-linear did) + typedef UReg<0x03, 0x5E, 6, 7> VDS_NS_V_GAIN; // Non-linear saturation V gain control bit (This field contains the V gain control for V component in the area which should do non-linear saturation, its range is (0~1)*128) + typedef UReg<0x03, 0x5F, 5, 5> VDS_NS_Y_LOW_TH; // Non-linear saturation Y low threshold control bit (This filed defines the Y low threshold value for non-linear saturation, when y detect enable (60[3]=1), if y less than this programmable value, no non-linear did) + typedef UReg<0x03, 0x60, 2, 1> VDS_NS_BYPS; // Non-linear saturation bypass control, active high (When this bit is 1, the process non-linear saturation will be bypassed) + typedef UReg<0x03, 0x60, 3, 1> VDS_NS_Y_ACTIVE_EN; // Non-linear saturation Y detect enable, active high (When this bit is 1, the process non-linear saturation only done when the Y larger than the value ns_y_low_th and less than the value ns_y_high_th) - typedef UReg<0x03, 0x66, 5, 10> VDS_C2_TAG_LOW_SLOPE; - typedef UReg<0x03, 0x67, 7, 10> VDS_C2_TAG_HIGH_SLOPE; - typedef UReg<0x03, 0x69, 1, 4> VDS_C2_GAIN; - typedef UReg<0x03, 0x69, 5, 8> VDS_C2_U_LOW; - typedef UReg<0x03, 0x6A, 5, 8> VDS_C2_U_HIGH; - typedef UReg<0x03, 0x6B, 5, 1> VDS_C2_BYPS; - typedef UReg<0x03, 0x6B, 6, 8> VDS_C2_Y_THRESH; + typedef UReg<0x03, 0x60, 4, 10> VDS_C1_TAG_LOW_SLOPE; // Red enhance angle tan value low threshold value control bit: + // This filed contains the low threshold value for red enhance angle tan value, + // when the input UV angle tan value less than this programmable value, + // no enhancement did + typedef UReg<0x03, 0x61, 6, 10> VDS_C1_TAG_HIGH_SLOPE; // Red enhance angle tan value high threshold value control bit: + // This filed contains the high threshold value for red enhance angle tan value, + // when the input UV angle tan value larger than this programmable value, + // no enhancement did. + typedef UReg<0x03, 0x63, 0, 4> VDS_C1_GAIN; // Red enhance gain control bit (This field contains the gain control for red enhance, its range is (0~1)*16) + typedef UReg<0x03, 0x63, 4, 8> VDS_C1_U_LOW; // Red enhance U low threshold value control bit (This field contains the low threshold value for U component, if input U less then this programmable value, no enhancement did) + typedef UReg<0x03, 0x64, 4, 8> VDS_C1_U_HIGH; // Red enhance U high threshold value control bit (This field contains the high threshold value for U component, if input U larger then this programmable value, no enhancement did) + typedef UReg<0x03, 0x65, 4, 1> VDS_C1_BYPS; // Red enhance bypass control, active high (When this bit is 1, red enhancement will be bypassed) + typedef UReg<0x03, 0x65, 5, 8> VDS_C1_Y_THRESH; // Red enhance Y threshold value control bit (This field contains the Y threshold for red enhancement, when input Y larger than this programmable value, no enhancement did) - typedef UReg<0x03, 0x6D, 0, 12> VDS_EXT_HB_ST; - typedef UReg<0x03, 0x6E, 4, 12> VDS_EXT_HB_SP; - typedef UReg<0x03, 0x70, 0, 11> VDS_EXT_VB_ST; - typedef UReg<0x03, 0x71, 4, 11> VDS_EXT_VB_SP; - typedef UReg<0x03, 0x72, 7, 1> VDS_SYNC_IN_SEL; + typedef UReg<0x03, 0x66, 5, 10> VDS_C2_TAG_LOW_SLOPE; // Green enhance angle tan value low threshold value control bit: + // This filed contains the low threshold value for green enhance angle tan value, + // when the input UV angle tan value less than this programmable value, no enhancement did. + typedef UReg<0x03, 0x67, 7, 10> VDS_C2_TAG_HIGH_SLOPE; //Green enhance angle tan value high threshold value control bit: + // This filed contains the high threshold value for green enhance angle tan value, + // when the input UV angle tan value larger than this programmable value, + // no enhancement did. + typedef UReg<0x03, 0x69, 1, 4> VDS_C2_GAIN; // Color enhance gain control bit (This field contains the gain control for green enhance, its range is (0~1)*16) + typedef UReg<0x03, 0x69, 5, 8> VDS_C2_U_LOW; // Green enhance U low threshold value control bit (This field contains the low threshold value for U component, if input U less then this programmable value, no enhancement did) + typedef UReg<0x03, 0x6A, 5, 8> VDS_C2_U_HIGH; // Green enhance U high threshold value control bit (This field contains the high threshold value for U component, if input U larger then this programmable value, no enhancement did) + typedef UReg<0x03, 0x6B, 5, 1> VDS_C2_BYPS; // Green enhance bypass control (When this bit is 1, color enhancement will be bypassed) + typedef UReg<0x03, 0x6B, 6, 8> VDS_C2_Y_THRESH; // Green enhance Y threshold value control bit (This field contains the Y threshold for green enhancement, when input Y larger than this programmable value, no enhancement did) + // 6C_6:2 - reserved + typedef UReg<0x03, 0x6D, 0, 12> VDS_EXT_HB_ST; // External used horizontal blanking start position control bit (This field is used to program horizontal blanking start position, this blanking is for external used) + typedef UReg<0x03, 0x6E, 4, 12> VDS_EXT_HB_SP; // External used horizontal blanking stop position control bit (This field is used to program horizontal blanking stop position, this blanking is for external used) + typedef UReg<0x03, 0x70, 0, 11> VDS_EXT_VB_ST; // External used vertical blanking start position control bit (This field is used to program vertical blanking start position, this blanking is for external used) + // 71_3:1 - reserved + typedef UReg<0x03, 0x71, 4, 11> VDS_EXT_VB_SP; // External used vertical blanking stop position control bit (This field is used to program vertical blanking stop position, this blanking is for external used) + typedef UReg<0x03, 0x72, 7, 1> VDS_SYNC_IN_SEL; // VDS module input sync selection control (When this bit is 1, the sync to VDS module is from external (out of the CHIP); When this bit is 0, the sync to VDS module is from IF module) - typedef UReg<0x03, 0x73, 0, 3> VDS_BLUE_RANGE; - typedef UReg<0x03, 0x73, 3, 1> VDS_BLUE_BYPS; - typedef UReg<0x03, 0x73, 4, 4> VDS_BLUE_UGAIN; - typedef UReg<0x03, 0x74, 0, 4> VDS_BLUE_VGAIN; - typedef UReg<0x03, 0x74, 4, 4> VDS_BLUE_Y_LEV; + typedef UReg<0x03, 0x73, 0, 3> VDS_BLUE_RANGE; // Blue extend range control bit (see: DEVELOPER_NOTES.md -> S3_73) + typedef UReg<0x03, 0x73, 3, 1> VDS_BLUE_BYPS; // Blue extend bypass control, active high (When this bit is 1, the blue extend process will be bypassed) + typedef UReg<0x03, 0x73, 4, 4> VDS_BLUE_UGAIN; // Blue extend U gain control bit (This field defines the U gain for U component in the area which should do blue extend, its range is (0~1)*16) + typedef UReg<0x03, 0x74, 0, 4> VDS_BLUE_VGAIN; // Blue extend V gain control bit (This field defines the V gain for V component in the area which should do blue extend, its range is (0~1)*16) + typedef UReg<0x03, 0x74, 4, 4> VDS_BLUE_Y_LEV; // Blue extend Y level threshold control bit: + // This field defines the Y threshold value of blue extend, the real level in the + // circuit is 16*blue_y_th + 15, the blue extend process done + // only when Y value larger than this level (real level). // - // PIP Registers + // Video Processor Registers -> PIP Registers // - typedef UReg<0x03, 0x80, 0, 1> PIP_UV_FLIP; - typedef UReg<0x03, 0x80, 1, 1> PIP_U_DELAY; - typedef UReg<0x03, 0x80, 2, 1> PIP_V_DELAY; - typedef UReg<0x03, 0x80, 3, 1> PIP_TAP3_BYPS; - typedef UReg<0x03, 0x80, 4, 2> PIP_Y_DELAY; - typedef UReg<0x03, 0x80, 6, 1> PIP_SUB_16B_SEL; - typedef UReg<0x03, 0x80, 7, 1> PIP_DYN_BYPS; - typedef UReg<0x03, 0x81, 0, 1> PIP_CONVT_BYPS; - typedef UReg<0x03, 0x81, 3, 1> PIP_DREG_BYPS; - typedef UReg<0x03, 0x81, 7, 1> PIP_EN; - typedef UReg<0x03, 0x82, 0, 8> PIP_Y_GAIN; - typedef UReg<0x03, 0x83, 0, 8> PIP_U_GAIN; - typedef UReg<0x03, 0x84, 0, 8> PIP_V_GAIN; - typedef UReg<0x03, 0x85, 0, 8> PIP_Y_OFST; - typedef UReg<0x03, 0x86, 0, 8> PIP_U_OFST; - typedef UReg<0x03, 0x87, 0, 8> PIP_V_OFST; - typedef UReg<0x03, 0x88, 0, 12> PIP_H_ST; - typedef UReg<0x03, 0x8A, 0, 12> PIP_H_SP; - typedef UReg<0x03, 0x8C, 0, 11> PIP_V_ST; - typedef UReg<0x03, 0x8E, 0, 11> PIP_V_SP; + typedef UReg<0x03, 0x80, 0, 1> PIP_UV_FLIP; // 422 to 444 conversion UV flip control (This bit is used to flip UV, when this bit is 1, UV position will be flipped) + typedef UReg<0x03, 0x80, 1, 1> PIP_U_DELAY; // UV 422 to 444 conversion U delay (When this bit is 1, U will delay 1 clock, otherwise, no delay for internal pipe) + typedef UReg<0x03, 0x80, 2, 1> PIP_V_DELAY; // UV 422 to 444 conversion V delay (When this bit is 1, V will delay 1 clock, otherwise, no delay for internal pipe) + typedef UReg<0x03, 0x80, 3, 1> PIP_TAP3_BYPS; // Tap3 filter in 422 to 444 conversion bypass control, active high (This bit is the UV interpolation filter enable control; when this bit is 1, UV bypass the filter) + typedef UReg<0x03, 0x80, 4, 2> PIP_Y_DELAY; // Y compensation delay control bit in 422 to 444 conversion (see: DEVELOPER_NOTES.md -> S3_80) + typedef UReg<0x03, 0x80, 6, 1> PIP_SUB_16B_SEL; // PIP 16-bit sub-picture select, active high (When this bit is 1, select 16-bit sub-picture; When it is 0, select 24-bit sub-picture) + typedef UReg<0x03, 0x80, 7, 1> PIP_DYN_BYPS; // Dynamic range expansion bypass control, active high (When this bit is 1, data will bypass the dynamic range expansion process) + typedef UReg<0x03, 0x81, 0, 1> PIP_CONVT_BYPS; // YUV to RGB color space conversion bypass control, active high: + // When this bit is 1, YUV data will bypass the YUV to RGB conversion, the output will still be YUV data. + // When this bit is 0, YUV data will do YUV to RGB conversion, the output will be RGB data + // 81_1:2 - reserved + typedef UReg<0x03, 0x81, 3, 1> PIP_DREG_BYPS; // Input data bypass the negedge trigger control, active high: + // When this bit is 0, input data will triggered by falling edge clock, + // When this bit is 1, the input data will bypass this falling edge clock delay + // 81_4:3 - reserved + typedef UReg<0x03, 0x81, 7, 1> PIP_EN; // PIP enable, active high (When this bit is 1, PIP insertion is enabled, otherwise, no PIP) + typedef UReg<0x03, 0x82, 0, 8> PIP_Y_GAIN; // Y dynamic range expansion gain control bit (This field contains the Y gain value in dynamic range expansion process, its range is (0 ~ 2)*128) + typedef UReg<0x03, 0x83, 0, 8> PIP_U_GAIN; // U dynamic range expansion gain control bit (This field contains the U gain value in dynamic range expansion process, its range is (0 ~ 4)*64) + typedef UReg<0x03, 0x84, 0, 8> PIP_V_GAIN; // V dynamic range expansion gain control bit (This field contains the V gain value in dynamic range expansion process, its range is (0 ~ 4)*64) + typedef UReg<0x03, 0x85, 0, 8> PIP_Y_OFST; // Y dynamic range expansion offset control bit (This field contains the Y offset value in dynamic range expansion process, its range is –128 ~ 127) + typedef UReg<0x03, 0x86, 0, 8> PIP_U_OFST; // U dynamic range expansion offset control bit (This field contains the U offset value in dynamic range expansion process, its range is –128 ~ 127) + typedef UReg<0x03, 0x87, 0, 8> PIP_V_OFST; // V dynamic range expansion offset control bit (This field contains the V offset value in dynamic range expansion process, its range is –128 ~ 127) + typedef UReg<0x03, 0x88, 0, 12> PIP_H_ST; // PIP window horizontal start position control bit (This field contains the horizontal start position of PIP window.) + // 89_4:4 - reserved + typedef UReg<0x03, 0x8A, 0, 12> PIP_H_SP; // PIP window horizontal stop position control bit (This field contains the horizontal stop position of PIP window) + // 8B_4:4 - reserved + typedef UReg<0x03, 0x8C, 0, 11> PIP_V_ST; // PIP window vertical start position control bit (This field contains the vertical start position of PIP window) + // 8D_3:5 - reserved + typedef UReg<0x03, 0x8E, 0, 11> PIP_V_SP; // PIP window vertical stop position control (This field contains the vertical stop position of PIP window) + // 8F_3:5 - reserved // // Memory Controller Registers // - typedef UReg<0x04, 0x00, 0, 8> SDRAM_RESET_CONTROL; // fake name - typedef UReg<0x04, 0x00, 4, 1> SDRAM_RESET_SIGNAL; - typedef UReg<0x04, 0x00, 7, 1> SDRAM_START_INITIAL_CYCLE; - typedef UReg<0x04, 0x12, 0, 1> MEM_INTER_DLYCELL_SEL; - typedef UReg<0x04, 0x12, 1, 1> MEM_CLK_DLYCELL_SEL; - typedef UReg<0x04, 0x12, 2, 1> MEM_FBK_CLK_DLYCELL_SEL; - typedef UReg<0x04, 0x13, 0, 1> MEM_PAD_CLK_INVERT; - typedef UReg<0x04, 0x13, 1, 1> MEM_RD_DATA_CLK_INVERT; - typedef UReg<0x04, 0x13, 2, 1> MEM_FBK_CLK_INVERT; - typedef UReg<0x04, 0x15, 0, 1> MEM_REQ_PBH_RFFH; - typedef UReg<0x04, 0x1b, 0, 3> MEM_ADR_DLY_REG; - typedef UReg<0x04, 0x1b, 4, 3> MEM_CLK_DLY_REG; + typedef UReg<0x04, 0x00, 0, 8> SDRAM_RESET_CONTROL; // MEMORY CONTROLLER 00 + typedef UReg<0x04, 0x00, 0, 1> MEM_INI_REG_0; // SDRAM Idle Period Control and IDLE Done Select: (default 0) (see: DEVELOPER_NOTES.md -> S4_00) + typedef UReg<0x04, 0x00, 0, 1> MEM_INI_REG_1; // Software Control SDRAM Idle Period (When this bit is 1, software programming will control the idle period to access memory.this bit is useful only when the register r_mslidl[1:0] sets 2’b11) + // 00_3:1 - reserved + typedef UReg<0x04, 0x00, 4, 1> SDRAM_RESET_SIGNAL; // SDRAM Reset Signal (When this bit is 1, will generate 5-mmclk pulse, and reset memory controller timing, data pipe and state machine) + // 00_5:1 - reserved + typedef UReg<0x04, 0x00, 6, 1> MEM_INI_REG_6; // Initial Cycle Mode Select (When this bit is 1, then during initial period, the mode cycle will go before refresh cycle; otherwise refresh cycle will be before mode cycle) + typedef UReg<0x04, 0x00, 7, 1> SDRAM_START_INITIAL_CYCLE; // SDRAM Start Initial Cycle (This register should work with the register 80/[2:0]; When this bit is 1, memory controller initial cycle enable; When this bit is 0, memory controller initial cycle disable) + // TODO fine tuning memory registers + typedef UReg<0x04, 0x12, 0, 1> MEM_INTER_DLYCELL_SEL; // Select SDRAM Delay Cell (This register is control the delay of data/address/command; When it is at 0, select bypass delay cell, when it is at 1, select DLY8LV cell) + typedef UReg<0x04, 0x12, 1, 1> MEM_CLK_DLYCELL_SEL; // Select SDRAM Delay Cell (This register is only control the delay of clock send to PAD; When it is at 0, select bypass delay cell, when it is at 1, select DLY8LV cell) + typedef UReg<0x04, 0x12, 2, 1> MEM_FBK_CLK_DLYCELL_SEL; // Select SDRAM Delay Cell (This register is only control the delay of feed back clock; When it is at 0, select bypass delay cell, when it is at 1, select DLY8LV cell) + // 12_3:5 - reserved + typedef UReg<0x04, 0x13, 0, 1> MEM_PAD_CLK_INVERT; // Invert Memory Rising Edge Clock to PAD (When this bit is 1, invert memory clock and send to PAD; When this bit is 0, will bypass memory clock and send to PAD) + typedef UReg<0x04, 0x13, 1, 1> MEM_RD_DATA_CLK_INVERT; // Read memory data with Memory Clock rising or falling edge (When this bit is 1, with Memory clock falling edge; When this bit is 0, with Memory clock rising edge) + typedef UReg<0x04, 0x13, 2, 1> MEM_FBK_CLK_INVERT; // Control feedback clock register (When this bit is at 1, will invert feedback clock; When it’s at 0, will bypass feedback clock) + // 13_3:5 - reserved + // TODO fine tuning memory registers + typedef UReg<0x04, 0x15, 0, 1> MEM_REQ_PBH_RFFH; // Play back high request priority exchange with read FIFO high request (When this bit is 1, read FIFO high request > play back high request; When this bit is 0, play back high request >read FIFO high request) + typedef UReg<0x04, 0x1b, 0, 3> MEM_ADR_DLY_REG; // Capture request exchange with PlayBack low request and Read FIFO low request (When this bit is 0: play back low req > read FIFO low req > capture req; When this bit is 1: cap req > play back low req > read FIFO low req) + typedef UReg<0x04, 0x1b, 4, 3> MEM_CLK_DLY_REG; // Write FIFO request priority exchange with capture request (When this bit is 1, capture request >write FIFO request, When this bit is 0, write FIFO request > capture request) + // 15_3:5 - reserved + // TODO fine tuning memory registers // // Playback / Capture / Memory Registers // - typedef UReg<0x04, 0x21, 0, 1> CAPTURE_ENABLE; - typedef UReg<0x04, 0x21, 1, 1> CAP_FF_HALF_REQ; - typedef UReg<0x04, 0x21, 5, 1> CAP_SAFE_GUARD_EN; - typedef UReg<0x04, 0x22, 0, 1> CAP_REQ_OVER; - typedef UReg<0x04, 0x22, 1, 1> CAP_STATUS_SEL; - typedef UReg<0x04, 0x22, 3, 1> CAP_REQ_FREEZ; - typedef UReg<0x04, 0x24, 0, 21> CAP_SAFE_GUARD_A; - typedef UReg<0x04, 0x27, 0, 21> CAP_SAFE_GUARD_B; - typedef UReg<0x04, 0x2b, 0, 1> PB_CUT_REFRESH; - typedef UReg<0x04, 0x2b, 1, 2> PB_REQ_SEL; - typedef UReg<0x04, 0x2b, 3, 1> PB_BYPASS; - typedef UReg<0x04, 0x2b, 5, 1> PB_DB_BUFFER_EN; - typedef UReg<0x04, 0x2b, 7, 1> PB_ENABLE; - typedef UReg<0x04, 0x2c, 0, 8> PB_MAST_FLAG_REG; - typedef UReg<0x04, 0x2d, 0, 8> PB_GENERAL_FLAG_REG; - typedef UReg<0x04, 0x37, 0, 10> PB_CAP_OFFSET; - typedef UReg<0x04, 0x39, 0, 10> PB_FETCH_NUM; - typedef UReg<0x04, 0x42, 0, 1> WFF_ENABLE; - typedef UReg<0x04, 0x42, 2, 1> WFF_FF_STA_INV; - typedef UReg<0x04, 0x42, 3, 1> WFF_SAFE_GUARD; - typedef UReg<0x04, 0x42, 5, 1> WFF_ADR_ADD_2; - typedef UReg<0x04, 0x42, 7, 1> WFF_FF_STATUS_SEL; - typedef UReg<0x04, 0x44, 0, 21> WFF_SAFE_GUARD_A; - typedef UReg<0x04, 0x47, 0, 21> WFF_SAFE_GUARD_B; - typedef UReg<0x04, 0x4a, 0, 1> WFF_YUV_DEINTERLACE; - typedef UReg<0x04, 0x4a, 4, 1> WFF_LINE_FLIP; - typedef UReg<0x04, 0x4b, 0, 3> WFF_HB_DELAY; - typedef UReg<0x04, 0x4b, 4, 3> WFF_VB_DELAY; - typedef UReg<0x04, 0x4d, 4, 1> RFF_ADR_ADD_2; - typedef UReg<0x04, 0x4d, 5, 2> RFF_REQ_SEL; - typedef UReg<0x04, 0x4d, 7, 1> RFF_ENABLE; - typedef UReg<0x04, 0x4e, 0, 8> RFF_MASTER_FLAG; - typedef UReg<0x04, 0x50, 5, 1> RFF_LINE_FLIP; - typedef UReg<0x04, 0x50, 6, 1> RFF_YUV_DEINTERLACE; - typedef UReg<0x04, 0x50, 7, 1> RFF_LREQ_CUT; - typedef UReg<0x04, 0x51, 0, 21> RFF_WFF_STA_ADDR_A; - typedef UReg<0x04, 0x54, 0, 21> RFF_WFF_STA_ADDR_B; - typedef UReg<0x04, 0x57, 0, 10> RFF_WFF_OFFSET; - typedef UReg<0x04, 0x59, 0, 10> RFF_FETCH_NUM; - typedef UReg<0x04, 0x5B, 7, 1> MEM_FF_TOP_FF_SEL; + typedef UReg<0x04, 0x20, 0, 3> CAP_CNTRL_TST; // Capture Test logic control (Bit [2:0]: select capture internal test bus) + // 20_3:2 - reserved + typedef UReg<0x04, 0x20, 5, 3> CAP_NR_STATUS_OFFSET; // Capture Noise Reduction Frame Status Offset: + // For NTSC and PAL, Noise Reduction will save 4 or 6 frame data, for + // Play back read which frame at first, set different value, + // will read different frame data firstly, default 0. + + typedef UReg<0x04, 0x21, 0, 1> CAPTURE_ENABLE; // Enable capture (When it’s set 1, capture will be turn on; When it’s set 0, capture will be turn off) + typedef UReg<0x04, 0x21, 1, 1> CAP_FF_HALF_REQ; // Request generated when capture FIFO half (When set to 1, request generated when capture FIFO half; When set to 0, request generated when capture FIFO write pointer is 1) + + typedef UReg<0x04, 0x21, 2, 1> CAP_BUF_STA_INV; // Capture double buffer status invert before output (When set to 1, double buffer status invert; When set to 0, double buffer status doesn’t change) + typedef UReg<0x04, 0x21, 3, 1> CAP_DOUBLE_BUFFER; // Enable double buffer (When set to 1, enable double buffer; When set to 0, disable double buffer) + // 21_4:1 - reserved + typedef UReg<0x04, 0x21, 5, 1> CAP_SAFE_GUARD_EN; // Enable safe guard function (When set to 1, turn on safe guard function; When set to 0, turn off safe guard function) + typedef UReg<0x04, 0x21, 6, 1> CAP_VRST_FFRST_EN; // Enable input v-sync reset FIFO (When set to 1, enable feed back v-sync reset FIFO; When set to 0, disable feed back v-sync reset FIFO) + typedef UReg<0x04, 0x21, 7, 1> CAP_ADR_ADD_2; // Enable address add by 2 (When set to 1,address added by 2 per pixel; When set to 0,added by 1 per pixel) + typedef UReg<0x04, 0x22, 0, 1> CAP_REQ_OVER; // Horizontal request end (When this bit set 1, the final capture request of one line is in the horizontal blank rising edge, set 0 capture request will free run) + typedef UReg<0x04, 0x22, 1, 1> CAP_STATUS_SEL; // Capture FIFO half status select (When set to 1, request generated when capture FIFO is half; When set to 0, request generated when capture FIFO is delm’s value) + typedef UReg<0x04, 0x22, 2, 1> CAP_LAST_POP_CTL; // Capture POP data control (When set to 1, horizontal or vertical load start address will check if there is pop; When set to 0, horizontal or vertical load start address will not check) + typedef UReg<0x04, 0x22, 3, 1> CAP_REQ_FREEZ; // Capture Request Freeze (When set to 1, capture FIFO will pause the FIFO write and read; When set to 0, capture FIFO will operate normally) + // 22_4:4 - reserved + typedef UReg<0x04, 0x23, 0, 8> CAP_FF_STATUS; // Capture FIFO status (When cap_cntrl_[17] set 1’b1, this register will be valid, this value will less than 64) + typedef UReg<0x04, 0x24, 0, 21> CAP_SAFE_GUARD_A; // Safe Guard Address For Buffer A (Safe guard address A [7:0], Mapping to 32bits width data bus field) + // 26_5:3 - reserved + typedef UReg<0x04, 0x27, 0, 21> CAP_SAFE_GUARD_B; // Safe Guard Address For Buffer B (Safe guard address B [7:0]; Mapping to 32bits width data bus field) + // 29_5:3 - reserved + typedef UReg<0x04, 0x2b, 0, 1> PB_CUT_REFRESH; // Disable refresh request generation (When set to 1, disable refresh request generation; When set to 0, enable refresh request generation) + typedef UReg<0x04, 0x2b, 1, 2> PB_REQ_SEL; // Enable playback request mode (see: DEVELOPER_NOTES.md -> S4_28) + typedef UReg<0x04, 0x2b, 3, 1> PB_BYPASS; // Enable VDS input to select playback output or de-interlace data out (When this bit is 1, select de-interlace data out to VDS; When this bit is 0, select playback output to VDS) + typedef UReg<0x04, 0x2b, 4, 1> PB_DB_FIELD_EN; // Enable double field display (When set to 1, enable double field display; When set to 0, disable double field display) + typedef UReg<0x04, 0x2b, 5, 1> PB_DB_BUFFER_EN; // Enable double buffer (When set to 1, enable double field display; When set to 0, disable double field display) + typedef UReg<0x04, 0x2b, 6, 1> PB_2FRAME_EXCHG; // Exchange playback two frames output data (When set to 1, exchange playback current frame with past frame and output; When set to 0, don’t exchange) + typedef UReg<0x04, 0x2b, 7, 1> PB_ENABLE; // Enable Playback (When it’s set 1, play back will be on work, or will not work) + typedef UReg<0x04, 0x2c, 0, 8> PB_MAST_FLAG_REG; // Master line flag (Playback FIFO policy master value: This field will define FIFO high request timing) + // 2C_6:2 - reserved + typedef UReg<0x04, 0x2d, 0, 8> PB_GENERAL_FLAG_REG; // General line flag (Playback FIFO policy general value: This field will define FIFO low request timing) + // 2D_6:2 - reserved + typedef UReg<0x04, 0x2E, 0, 1> PB_RBUF_INV; // When rate convert from up to down, capture FIFO will refer to the play back buffer status, this bit is invert play back buffer status + typedef UReg<0x04, 0x2E, 1, 1> PB_RBUF_SEL; // When rate convert from up to down, capture FIFO will refer to the play back buffer status, this bit will be set to 1. Otherwise, it will be set to 0. + // 2E_2:5 - reserved + typedef UReg<0x04, 0x2E, 7, 1> PB_DOUBLE_REFRESH_EN; // Refresh Double (When set to 1, refresh request will at the rising and falling edge of hbout. When set to 0, refresh will be only at the rising edge of hbout) + typedef UReg<0x04, 0x2F, 0, 4> PB_TST_REG; // PlayBack Test Logic (To select playback test bus, total 8 groups can be selected.) + // 2F_4:4 - reserved + typedef UReg<0x04, 0x30, 0, 4> PB_CAP_NOISE_CMD; // Capture Noise Reduction Command: + // 0: disable noise reduce function + // 1: turn on PAL mode 2 (50hz to 50hz) and storage in memory 5 frames + // 2: turn on PAL mode 3 + // 5: turn on NTSC mode 2 and storage memory 3 frames + // 6: turn on NTSC mode 3 + // 9: turn on PAL mode 2 (50hz to 50hz, 50hz to 60hz, 50hz to 100hz) and storage memory 6 frames. + // D: turn on NTSC mode 2 (60hz to 60hz, 60hz to 120hz) and storage memory 4 frames + // Note: in 50 to 100hz and 60 to 120,we must turn on [4] = 1 In playback + // 30_4:4 - reserved + typedef UReg<0x04, 0x31, 0, 21> PB_CAP_BUF_STA_ADDR_A; // Capture and Play Back Buffer A START ADDRESS (Mapping to 32bits width data bus field) + // 33_5:3 - reserved + typedef UReg<0x04, 0x34, 0, 21> PB_CAP_BUF_STA_ADDR_B; // Buffer B START address (When in double buffer mode, this is defined as capture and playback buffer B start address. Mapping to 32bits width data bus field) + + typedef UReg<0x04, 0x37, 0, 10> PB_CAP_OFFSET; // Capture and Play Back Offset (Offset [7:0] will determine next line start address, Mapping to 64bits width data bus field) + // 38_2:6 - reserved + typedef UReg<0x04, 0x39, 0, 10> PB_FETCH_NUM; // Fetch number [7:0] will determine to fetch the number of pixels from memory, Mapping to 64bits width data bus field. + // 3A_2:6 - reserved + typedef UReg<0x04, 0x3B, 0, 21> PB_CAP_BUF_STA_ADDR_C; // Capture and playback Buffer C Start Address (When in noise reduction mode, this is defined as capture and playback buffer C start address. Mapping to 32 bits width data bus field) + // 3D_5:3 - reserved + typedef UReg<0x04, 0x3E, 0, 21> PB_CAP_BUF_STA_ADDR_D; // Capture and Play Back Buffer D Start Address (When in noise reduction mode, this is defined as capture and playback buffer D start address. Mapping to 32 bits width data bus field) + // 40_5:3 - reserved + + // + // Video Processor Registers - Write & Read FIFO registers + // + // 41 - WRITE FIFO Test logic control + typedef UReg<0x04, 0x42, 0, 1> WFF_ENABLE; // Enable write FIFO (When it’s set 1, write FIFO will be turn on. When it’s set 0, write FIFO will be turn off) + typedef UReg<0x04, 0x42, 1, 1> WFF_FF_HALF_REQ; // Request generated when FIFO half (When set to 1, request generated when FIFO half; When set to 0, request generate when FIFO write pointer is 1) + typedef UReg<0x04, 0x42, 2, 1> WFF_FF_STA_INV; // Write FIFO status invert (When set to 1, write FIFO status invert; When set to 0, write FIFO status don’t change) + typedef UReg<0x04, 0x42, 3, 1> WFF_SAFE_GUARD; // Enable write FIFO safe guard (When set to 1, enable write FIFO safe guard. When set to 0, disable write FIFO safe guard.) + typedef UReg<0x04, 0x42, 4, 1> WFF_VRST_FF_RST; // Enable input V-sync reset FIFO (When set to 1, enable feedback v-sync reset FIFO. When set to 0, disable feedback v-sync reset FIFO) + typedef UReg<0x04, 0x42, 5, 1> WFF_ADR_ADD_2; // WRITE FIFO Address count select: (When it’s set to 1, address added by 2 per pixel. When it’s set to 0, address added by 1 per pixel) + typedef UReg<0x04, 0x42, 6, 1> WFF_REQ_OVER; // WRITE FIFO Horizontal Request End (When this bit set 1, the final write FIFO request of one line is in the horizontal blank rising edge, set 0 write FIFO request will free run) + typedef UReg<0x04, 0x42, 7, 1> WFF_FF_STATUS_SEL; // Write fifo half status select (When set to 1, request generated when FIFO is half; When set to 0, request generated when c FIFO is delm’s value) + typedef UReg<0x04, 0x43, 0, 8> WFF_FF_STATUS; // Write FIFO status (When wff_cntrl_[15] set 1’b1, this register will be valid, this value will less than 64) + typedef UReg<0x04, 0x44, 0, 21> WFF_SAFE_GUARD_A; // Write FIFO Buffer A Safe Guard Address (Safe guard address buffer A [7:0], Mapping to 32bits width data bus field) + // 46_5:3 - reserved + typedef UReg<0x04, 0x47, 0, 21> WFF_SAFE_GUARD_B; // Write FIFO Buffer B Safe Guard Address (Safe guard address buffer B [7:0], Mapping to 32bits width data bus field) + // 49_5:3 - reserved + typedef UReg<0x04, 0x4a, 0, 1> WFF_YUV_DEINTERLACE; // WRITE FIFO YUV DE-INTERLACE (When set 1, write FIFO will write one field YUV, set 0, will write one frame Y) + // 4A_1:3 - reserved + typedef UReg<0x04, 0x4a, 4, 1> WFF_LINE_FLIP; // WRITE FIFO LINE INVERT (When set 1, line id will be inverted; When set 0, line id will be normal) + // 4A_5:2 - reserved + typedef UReg<0x04, 0x4a, 7, 1> WFF_LAST_POP_CTL; // When set to 1, horizontal or vertical load start address will check if there is pop When set to 0, horizontal or vertical load start address will not check. + + typedef UReg<0x04, 0x4b, 0, 3> WFF_HB_DELAY; // Write FIFO H-Timing Programmable Delay: + // 4B_3:1 - reserved + typedef UReg<0x04, 0x4b, 4, 3> WFF_VB_DELAY; // Write FIFO V-Timing Programmable Delay + // 4B_7:1 - reserved + typedef UReg<0x04, 0x4d, 0, 4> RFF_NEW_PAGE; // Read buffer page select from 1 to 16 (see: DEVELOPER_NOTES.md -> S4_4D_0) + typedef UReg<0x04, 0x4d, 4, 1> RFF_ADR_ADD_2; // Enable read FIFO address add by 2: Default 0 for added by 1 (When set 1, read FIFO address will count by 2, When set 0, read FIFO address will count by 1) + typedef UReg<0x04, 0x4d, 5, 2> RFF_REQ_SEL; // Enable read FIFO request mode (see: DEVELOPER_NOTES.md -> S4_4D_5) + typedef UReg<0x04, 0x4d, 7, 1> RFF_ENABLE; // Enable Read FIFO (When set 1, read FIFO will be turned on; When set 0, read FIFO will be turned off) + typedef UReg<0x04, 0x4e, 0, 6> RFF_MASTER_FLAG; // Master line flag (Read FIFO policy master value: This field will define FIFO high request timing) + // 4E_6:2 - reserved + typedef UReg<0x04, 0x4F, 0, 6> RFF_GENERAL_FLAG; // General line flag (Read FIFO policy master value: This field will define FIFO low request timing) + // 4F_6:2 - reserved + typedef UReg<0x04, 0x50, 0, 3> RFF_TST_REG; // General Test Logic (Read FIFO test bus select) + // 50_4:1 - reserved + typedef UReg<0x04, 0x50, 5, 1> RFF_LINE_FLIP; // Line ID Invert (When set 1, line ID will be inverted; When set 0, line ID will be normal) + typedef UReg<0x04, 0x50, 6, 1> RFF_YUV_DEINTERLACE; // Read FIFO YUV De-interlace: + // When set 1, Read FIFO will read Frame 2 YUV data in line = 1, line =0, read Frame 1 YUV data. + // When set 0, Read FIFO will read Frame 2 Y data in line = 1, line =0 , read Frame 1 Y data + typedef UReg<0x04, 0x50, 7, 1> RFF_LREQ_CUT; // Read fifo low request cut enable (Cut the read FIFO low request, only output high request to memory) + typedef UReg<0x04, 0x51, 0, 21> RFF_WFF_STA_ADDR_A; // Read FIFO AND Write FIFO START Address buffer A (Mapping to 32bits width data bus field.) + // 53_5:3 - reserved + typedef UReg<0x04, 0x54, 0, 21> RFF_WFF_STA_ADDR_B; // Read FIFO AND Write FIFO START Address Buffer B (Mapping to 32bits width data bus field) + // 56_5:3 - reserved + typedef UReg<0x04, 0x57, 0, 10> RFF_WFF_OFFSET; // Read FIFO and Write FIFO offset (Offset will determine next horizontal line start address, Mapping to 64bits width data bus field.) + // 58_2:6 - reserved + typedef UReg<0x04, 0x59, 0, 10> RFF_FETCH_NUM; // Fetch number (READ FIFO USE ONLY) (This will determine to fetch the number of pixels from memory each horizontal line. Mapping to 64bits width data bus field.) + // 5A_2:6 - reserved + // 5B_0:7 - reserved + typedef UReg<0x04, 0x5B, 7, 1> MEM_FF_TOP_FF_SEL; // All FIFO Status Output Enable (When set 1, all FIFO status output, can read FIFO status through test bus; When set 0, not FIFO status output.) // // OSD Registers (all registers R/W) // - typedef UReg<0x00, 0x90, 0, 1> OSD_SW_RESET; - typedef UReg<0x00, 0x90, 1, 3> OSD_HORIZONTAL_ZOOM; - typedef UReg<0x00, 0x90, 4, 2> OSD_VERTICAL_ZOOM; - typedef UReg<0x00, 0x90, 6, 1> OSD_DISP_EN; - typedef UReg<0x00, 0x90, 7, 1> OSD_MENU_EN; - typedef UReg<0x00, 0x91, 0, 4> OSD_MENU_ICON_SEL; - typedef UReg<0x00, 0x91, 4, 4> OSD_MENU_MOD_SEL; - typedef UReg<0x00, 0x92, 0, 3> OSD_MENU_BAR_FONT_FORCOR; - typedef UReg<0x00, 0x92, 3, 3> OSD_MENU_BAR_FONT_BGCOR; - typedef UReg<0x00, 0x92, 6, 3> OSD_MENU_BAR_BORD_COR; - typedef UReg<0x00, 0x93, 1, 3> OSD_MENU_SEL_FORCOR; - typedef UReg<0x00, 0x93, 4, 3> OSD_MENU_SEL_BGCOR; - typedef UReg<0x00, 0x93, 7, 1> OSD_COMMAND_FINISH; - typedef UReg<0x00, 0x94, 0, 1> OSD_MENU_DISP_STYLE; - typedef UReg<0x00, 0x94, 2, 1> OSD_YCBCR_RGB_FORMAT; - typedef UReg<0x00, 0x94, 3, 1> OSD_INT_NG_LAT; - typedef UReg<0x00, 0x94, 4, 4> OSD_TEST_SEL; - typedef UReg<0x00, 0x95, 0, 8> OSD_MENU_HORI_START; - typedef UReg<0x00, 0x96, 0, 8> OSD_MENU_VER_START; - typedef UReg<0x00, 0x97, 0, 8> OSD_BAR_LENGTH; - typedef UReg<0x00, 0x98, 0, 8> OSD_BAR_FOREGROUND_VALUE; + typedef UReg<0x00, 0x90, 0, 1> OSD_SW_RESET; // Software reset for module , active high (When this bit is 1, it reset osd_top module) + typedef UReg<0x00, 0x90, 1, 3> OSD_HORIZONTAL_ZOOM; // Osd horizontal zoom select (see: DEVELOPER_NOTES.md -> S0_90_1) + typedef UReg<0x00, 0x90, 4, 2> OSD_VERTICAL_ZOOM; // Osd vertical zoom select (see: DEVELOPER_NOTES.md -> S0_90_4) + typedef UReg<0x00, 0x90, 6, 1> OSD_DISP_EN; // Osd display enable, active high (When this bit is 1, osd can display on screen) + typedef UReg<0x00, 0x90, 7, 1> OSD_MENU_EN; // Osd menu display enable, active high (When this bit is 1, osd state will jump to menu display state) + typedef UReg<0x00, 0x91, 0, 4> OSD_MENU_ICON_SEL; // Osd menu icons select (see: DEVELOPER_NOTES.md -> S0_91_0) + typedef UReg<0x00, 0x91, 4, 4> OSD_MENU_MOD_SEL; // Osd icons modification select (see: DEVELOPER_NOTES.md -> S0_90_4) + typedef UReg<0x00, 0x92, 0, 3> OSD_MENU_BAR_FONT_FORCOR; // Menu font or bar foreground color (For bar and menu will not display on screen at the same time, so they are shared) + typedef UReg<0x00, 0x92, 3, 3> OSD_MENU_BAR_FONT_BGCOR; // Menu font or bar background color (For bar and menu will not display on screen at the same time, so they are shared) + typedef UReg<0x00, 0x92, 6, 3> OSD_MENU_BAR_BORD_COR; // Menu or bar border color (It is the low 2 bits of menu or bar border color, for bar and menu will not display on screen at the same time, so they are shared) + typedef UReg<0x00, 0x93, 1, 3> OSD_MENU_SEL_FORCOR; // Selected icon or bar’s icon foreground color + typedef UReg<0x00, 0x93, 4, 3> OSD_MENU_SEL_BGCOR; // Selected icon or bar’s icon background color + typedef UReg<0x00, 0x93, 7, 1> OSD_COMMAND_FINISH; // Command finished status: + // WHEN THIS BIT IS 1, IT MEANS CPU HAS FINISHED COMMAND AND HARDWARE CAN EXECUTE THE COMMAND, + // ELSE HARDWARE WILL DO LAST OPERATION. IN ORDER TO AVOID TEARING, WHEN YOU WANT TO ACCESS OSD, + // PULL THIS BIT DOWN FIRST AND PULL UP THIS BIT WHEN YOU FINISH PROGRAMMING OSD RESPONDING REGISTERS. + typedef UReg<0x00, 0x94, 0, 1> OSD_MENU_DISP_STYLE; // Menu display in row or column mode (When 1, osd menu displays in row style, else in column style) + typedef UReg<0x00, 0x94, 2, 1> OSD_YCBCR_RGB_FORMAT; // YCbCr or RGB output (Osd display in YCbCr or RGB format, when set to 1, display in YCbCr mode) + typedef UReg<0x00, 0x94, 3, 1> OSD_INT_NG_LAT; // V2clk latch osd data with negative enable (When set to 1, V2CLK clock can latch osd data with negative edge) + typedef UReg<0x00, 0x94, 4, 4> OSD_TEST_SEL; // Test logic output select: + // TEST_SEL[0], test logic output enable, when set to 1, test logic can output. + // TEST_SEL[3:1] select 8 test logics to test bus. + typedef UReg<0x00, 0x95, 0, 8> OSD_MENU_HORI_START; // Menu or bar horizontal start address (The real address is { MENU_BAR_HORZ_START [7:0], 3’h0}) + typedef UReg<0x00, 0x96, 0, 8> OSD_MENU_VER_START; // Menu or bar vertical start address (The real address is { MENU_BAR_VIRT_START [7:0], 3’h0}) + typedef UReg<0x00, 0x97, 0, 8> OSD_BAR_LENGTH; // Bar display total length (Bar display on screen’s total length, when horizontal zoom is 0.) + typedef UReg<0x00, 0x98, 0, 8> OSD_BAR_FOREGROUND_VALUE; // Bar foreground color value (The value of this register indicates the real value of icon, such as brightness’s value is 8’hf0, then this register is also programmed to 8’hf0) // - // ADC, SP Registers (all registers R/W) + // ADC, SP Registers (all registers R/W) // - typedef UReg<0x05, 0x00, 0, 8> ADC_5_00; // convenience - typedef UReg<0x05, 0x00, 0, 2> ADC_CLK_PA; - typedef UReg<0x05, 0x00, 3, 1> ADC_CLK_ICLK2X; - typedef UReg<0x05, 0x00, 4, 1> ADC_CLK_ICLK1X; - typedef UReg<0x05, 0x02, 0, 1> ADC_SOGEN; - typedef UReg<0x05, 0x02, 1, 5> ADC_SOGCTRL; - typedef UReg<0x05, 0x02, 6, 2> ADC_INPUT_SEL; - typedef UReg<0x05, 0x03, 0, 8> ADC_5_03; // convenience - typedef UReg<0x05, 0x03, 0, 1> ADC_POWDZ; - typedef UReg<0x05, 0x03, 1, 1> ADC_RYSEL_R; - typedef UReg<0x05, 0x03, 2, 1> ADC_RYSEL_G; - typedef UReg<0x05, 0x03, 3, 1> ADC_RYSEL_B; - typedef UReg<0x05, 0x03, 4, 2> ADC_FLTR; - typedef UReg<0x05, 0x04, 0, 8> ADC_TEST_04; - typedef UReg<0x05, 0x04, 0, 2> ADC_TR_RSEL; - typedef UReg<0x05, 0x04, 1, 1> ADC_TR_RSEL_04_BIT1; - typedef UReg<0x05, 0x04, 2, 3> ADC_TR_ISEL; - typedef UReg<0x05, 0x05, 0, 1> ADC_TA_05_EN; - typedef UReg<0x05, 0x05, 0, 8> ADC_TA_05_CTRL; - typedef UReg<0x05, 0x06, 0, 8> ADC_ROFCTRL; - typedef UReg<0x05, 0x07, 0, 8> ADC_GOFCTRL; - typedef UReg<0x05, 0x08, 0, 8> ADC_BOFCTRL; - typedef UReg<0x05, 0x09, 0, 8> ADC_RGCTRL; - typedef UReg<0x05, 0x0A, 0, 8> ADC_GGCTRL; - typedef UReg<0x05, 0x0B, 0, 8> ADC_BGCTRL; - typedef UReg<0x05, 0x0C, 0, 8> ADC_TEST_0C; - typedef UReg<0x05, 0x0C, 1, 1> ADC_TEST_0C_BIT1; - typedef UReg<0x05, 0x0C, 3, 1> ADC_TEST_0C_BIT3; - typedef UReg<0x05, 0x0C, 4, 1> ADC_TEST_0C_BIT4; - typedef UReg<0x05, 0x0E, 0, 1> ADC_AUTO_OFST_EN; - typedef UReg<0x05, 0x0E, 1, 1> ADC_AUTO_OFST_PRD; - typedef UReg<0x05, 0x0E, 2, 2> ADC_AUTO_OFST_DELAY; - typedef UReg<0x05, 0x0E, 4, 2> ADC_AUTO_OFST_STEP; - typedef UReg<0x05, 0x0E, 7, 1> ADC_AUTO_OFST_TEST; - typedef UReg<0x05, 0x0F, 0, 8> ADC_AUTO_OFST_RANGE_REG; - typedef UReg<0x05, 0x11, 0, 8> PLLAD_CONTROL_00_5x11; // fake name - typedef UReg<0x05, 0x11, 0, 1> PLLAD_VCORST; - typedef UReg<0x05, 0x11, 1, 1> PLLAD_LEN; - typedef UReg<0x05, 0x11, 2, 1> PLLAD_TEST; - typedef UReg<0x05, 0x11, 3, 1> PLLAD_TS; - typedef UReg<0x05, 0x11, 4, 1> PLLAD_PDZ; - typedef UReg<0x05, 0x11, 5, 1> PLLAD_FS; - typedef UReg<0x05, 0x11, 6, 1> PLLAD_BPS; - typedef UReg<0x05, 0x11, 7, 1> PLLAD_LAT; - typedef UReg<0x05, 0x12, 0, 12> PLLAD_MD; - typedef UReg<0x05, 0x16, 0, 8> PLLAD_5_16; // fake name - typedef UReg<0x05, 0x16, 0, 2> PLLAD_R; - typedef UReg<0x05, 0x16, 2, 2> PLLAD_S; - typedef UReg<0x05, 0x16, 4, 2> PLLAD_KS; - typedef UReg<0x05, 0x16, 6, 2> PLLAD_CKOS; - typedef UReg<0x05, 0x17, 0, 3> PLLAD_ICP; - typedef UReg<0x05, 0x18, 0, 1> PA_ADC_BYPSZ; - typedef UReg<0x05, 0x18, 1, 5> PA_ADC_S; - typedef UReg<0x05, 0x18, 6, 1> PA_ADC_LOCKOFF; - typedef UReg<0x05, 0x18, 7, 1> PA_ADC_LAT; - typedef UReg<0x05, 0x19, 0, 1> PA_SP_BYPSZ; - typedef UReg<0x05, 0x19, 1, 5> PA_SP_S; - typedef UReg<0x05, 0x19, 6, 1> PA_SP_LOCKOFF; - typedef UReg<0x05, 0x19, 7, 1> PA_SP_LAT; - typedef UReg<0x05, 0x1E, 7, 1> DEC_WEN_MODE; - typedef UReg<0x05, 0x1F, 0, 8> DEC_5_1F; // convenience - typedef UReg<0x05, 0x1F, 0, 1> DEC1_BYPS; - typedef UReg<0x05, 0x1F, 1, 1> DEC2_BYPS; - typedef UReg<0x05, 0x1F, 2, 1> DEC_MATRIX_BYPS; - typedef UReg<0x05, 0x1F, 3, 1> DEC_TEST_ENABLE; // fake name - typedef UReg<0x05, 0x1F, 4, 3> DEC_TEST_SEL; - typedef UReg<0x05, 0x1F, 7, 1> DEC_IDREG_EN; + typedef UReg<0x05, 0x00, 0, 8> ADC_5_00; // ADC CLK CONTROL 00 + typedef UReg<0x05, 0x00, 0, 2> ADC_CLK_PA; // Clock selection for PA_ADC: + // When = 00, PA_ADC input clock is from PLLAD’s CLKO2 + // When = 01, PA_ADC input clock is from PCLKIN + // When = 10, PA_ADC input clock is from V4CLK + // When = 11, reserved + typedef UReg<0x05, 0x00, 2, 1> ADC_CLK_PLLAD; // Clock selection for PLLAD (When = 0, PLLAD input clock is from sync processor When = 1, PLLAD input clock is from OSC) + typedef UReg<0x05, 0x00, 3, 1> ADC_CLK_ICLK2X; // ICLK2X control (When = 0, ICLK2X = ADC output clock When = 1, ICLK2X = ADC output clock / 2) + typedef UReg<0x05, 0x00, 4, 1> ADC_CLK_ICLK1X; // ICLK1X control (When = 0, ICLK1X = ICLK2X When = 1, ICLK1X = ICLK2X /2) + // 00_5:3 - reserved + typedef UReg<0x05, 0x02, 0, 1> ADC_SOGEN; // ADC SOG enable (When = 0, ADC disable SOG mode When = 1, ADC enable SOG mode) + typedef UReg<0x05, 0x02, 1, 5> ADC_SOGCTRL; // SOG control signal + typedef UReg<0x05, 0x02, 6, 2> ADC_INPUT_SEL; // ADC input selection: + // When = 00, R0/G0/B0/SOG0 as input + // When = 01, R1/G1/B1/SOG1 as input + // When = 10, R2/G2/B2 as input + // When = 11, reserved + typedef UReg<0x05, 0x03, 0, 8> ADC_5_03; // ADC CONTROL 01 + typedef UReg<0x05, 0x03, 0, 1> ADC_POWDZ; // ADC power down control (When = 0, ADC in power down mode; When = 1, ADC work normally) + typedef UReg<0x05, 0x03, 1, 1> ADC_RYSEL_R; // Clamp to ground or midscale for R ADC (When = 0, clamp to GND When = 1, clamp to midscale) + typedef UReg<0x05, 0x03, 2, 1> ADC_RYSEL_G; // Clamp to ground or midscale for G ADC (When = 0, clamp to GND When = 1, clamp to midscale) + typedef UReg<0x05, 0x03, 3, 1> ADC_RYSEL_B; // Clamp to ground or midscale for B ADC (When = 0, clamp to GND When = 1, clamp to midscale) + typedef UReg<0x05, 0x03, 4, 2> ADC_FLTR; // ADC internal filter control (When = 00, 150MHz; When = 01, 110MHz; When = 10, 70MHz; When = 11, 40MHz) + // 03_6:2 - reserved + typedef UReg<0x05, 0x04, 0, 8> ADC_TEST_04; // ADC CONTROL 02 + typedef UReg<0x05, 0x04, 0, 2> ADC_TR_RSEL; // REF test resistor selection + typedef UReg<0x05, 0x04, 2, 3> ADC_TR_ISEL; // REF test currents selection + // 04_5:3 - reserved + typedef UReg<0x05, 0x05, 0, 8> ADC_TA_05_CTRL; // ADC CONTROL 03 + typedef UReg<0x05, 0x05, 0, 1> ADC_TA_05_EN; // ADC test enable (When = 0, ADC work normally; When = 1, ADC is in test mode) + typedef UReg<0x05, 0x05, 1, 4> ADC_TA_CTRL; // ADC test bus control bit + // 05_5:3 - reserved + typedef UReg<0x05, 0x06, 0, 7> ADC_ROFCTRL; // Offset control for R channel of ADC + // 06_7:1 - reserved + typedef UReg<0x05, 0x07, 0, 7> ADC_GOFCTRL; // Offset control for G channel of ADC + // 07_7:1 - reserved + typedef UReg<0x05, 0x08, 0, 7> ADC_BOFCTRL; // Offset control for B channel of ADC + // 08_7:1 - reserved + typedef UReg<0x05, 0x09, 0, 8> ADC_RGCTRL; // Gain control for R channel of ADC + typedef UReg<0x05, 0x0A, 0, 8> ADC_GGCTRL; // Gain control for G channel of ADC + typedef UReg<0x05, 0x0B, 0, 8> ADC_BGCTRL; // Gain control for B channel of ADC + typedef UReg<0x05, 0x0C, 0, 8> ADC_TEST_0C; // ADC CONTROL 10 + typedef UReg<0x05, 0x0C, 0, 1> ADC_CKBS; // ADC output clock invert control (When = 0, default; When = 1, ADC output clock will be invert) + typedef UReg<0x05, 0x0C, 1, 4> ADC_TEST; // For ADC test reserved + // 0C_5:3 - reserved + typedef UReg<0x05, 0x0E, 0, 1> ADC_AUTO_OFST_EN; // Auto offset adjustment enable (When = 0, auto offset adjustment disable; When = 1, auto offset adjustment enable) + typedef UReg<0x05, 0x0E, 1, 1> ADC_AUTO_OFST_PRD; // Offset adjustment by frame (When = 0, offset adjustment by frame; When = 1, offset adjustment by line) + typedef UReg<0x05, 0x0E, 2, 2> ADC_AUTO_OFST_DELAY; // Horizontal sample delay control: + // When = 00, offset adjustment horizontal sample delay 1 pipe + // When = 01, offset adjustment horizontal sample delay 2 pipe + // When = 10, offset adjustment horizontal sample delay 3 pipe + // When = 11, offset adjustment horizontal sample delay 4 pipe + typedef UReg<0x05, 0x0E, 4, 2> ADC_AUTO_OFST_STEP; // Offset adjustment step control: + // When = 00, offset adjustment by absolute difference + // When = 01, offset adjustment by 1 + // When = 10, offset adjustment by 2 + // When = 11, offset adjustment by 3 + // 0E_6:1 - reserved + typedef UReg<0x05, 0x0E, 7, 1> ADC_AUTO_OFST_TEST; // Auto offset adjustment test control + typedef UReg<0x05, 0x0F, 0, 4> ADC_AUTO_OFST_U_RANGE; // U channel offset detection range (Define U channel offset detection range 0~15) + typedef UReg<0x05, 0x0F, 4, 4> ADC_AUTO_OFST_V_RANGE; // V channel offset detection range (Define V channel offset detection range 0~15) + typedef UReg<0x05, 0x11, 0, 8> PLLAD_CONTROL_00_5x11; // PLLAD CONTROL 00 + typedef UReg<0x05, 0x11, 0, 1> PLLAD_VCORST; // Initial VCO control voltage + typedef UReg<0x05, 0x11, 1, 1> PLLAD_LEN; // Enable signal for clock + typedef UReg<0x05, 0x11, 2, 1> PLLAD_TEST; // Test clock selection + typedef UReg<0x05, 0x11, 3, 1> PLLAD_TS; // Test clock selection and HSL clock selection + typedef UReg<0x05, 0x11, 4, 1> PLLAD_PDZ; // PDZ (When = 0, PLLAD is power down mode; When = 1, PLLAD work normally) + typedef UReg<0x05, 0x11, 5, 1> PLLAD_FS; // FS, VCO gain selection (When = 0, default; When = 1, high gain selected) + typedef UReg<0x05, 0x11, 6, 1> PLLAD_BPS; // BPS (When = 0, default; When = 1, bypass input clock to CKO1 and CKO2) + typedef UReg<0x05, 0x11, 7, 1> PLLAD_LAT; // Latch control for PLLAD control - This bit’s rising edge is used to trigger PLLAD control bit: ND, MD, KS, CKOS, ICP + typedef UReg<0x05, 0x12, 0, 12> PLLAD_MD; // PLLAD feedback divider control + // 13_4:4 - reserved + typedef UReg<0x05, 0x14, 0, 12> PLLAD_ND; // PLLAD input divider control + // 15_4:4 - reserved + typedef UReg<0x05, 0x16, 0, 8> PLLAD_5_16; // PLLAD CONTROL 05 + typedef UReg<0x05, 0x16, 0, 2> PLLAD_R; // Skew control for testing + typedef UReg<0x05, 0x16, 2, 2> PLLAD_S; // Skew control for testing + typedef UReg<0x05, 0x16, 4, 2> PLLAD_KS; // VCO post divider control, it is determined by CKO frequency: + // When = 00, divide by 1 (162MHz~80MHz) + // When = 01, divide by 2 (80MHz~40MHz) + // When = 10, divide by 4 (40MHz~20MHz) + // When = 11, divide by 8 (20MHz~min MHz) + typedef UReg<0x05, 0x16, 6, 2> PLLAD_CKOS; // PLLAD CKO2 output clock selection (see: DEVELOPER_NOTES.md -> S5_16) + typedef UReg<0x05, 0x17, 0, 3> PLLAD_ICP; // ICP - Charge pump current selection: + // When = 000, Icp = 50uA + // When = 001, Icp = 100uA + // When = 010, Icp = 150uA + // When = 011, Icp = 250uA + // When = 100, Icp = 350uA + // When = 101, Icp = 500uA + // When = 110, Icp = 750uA + // When = 111, Icp = 1mA + // 17_3:5 - reserved + typedef UReg<0x05, 0x18, 0, 1> PA_ADC_BYPSZ; // BYPSZ, PA for ADC bypass control (When = 0, PA_ADC is bypass When = 1, PA_ADC work normally) + typedef UReg<0x05, 0x18, 1, 5> PA_ADC_S; // PA_ADC phase control + typedef UReg<0x05, 0x18, 6, 1> PA_ADC_LOCKOFF; // LOCKOFF (When = 0, default; When = 1, PA_ADC lock circuit disable) + typedef UReg<0x05, 0x18, 7, 1> PA_ADC_LAT; // PA_ADC latch signal (This bit’s rising edge is used to trigger PA_ADC_CNTRL) + typedef UReg<0x05, 0x19, 0, 1> PA_SP_BYPSZ; // BYPSZ, PA for PLLAD bypass control (When = 0, PA_PLLAD is bypass; When = 1, PA_PLLAD work normally) + typedef UReg<0x05, 0x19, 1, 5> PA_SP_S; // PA_PLLAD phase control + typedef UReg<0x05, 0x19, 6, 1> PA_SP_LOCKOFF; // LOCKOFF (When = 0, default; When = 1, PA_PLLAD lock circuit disable) + typedef UReg<0x05, 0x19, 7, 1> PA_SP_LAT; // PA_PLLAD latch signal (This bit’s rising edge is used to trigger PA_PLLAD_CNTRL) + // 20 - 1D - not described + // 1E_0:7 - reserved + typedef UReg<0x05, 0x1E, 7, 1> DEC_WEN_MODE; // Write enable mode enable (When this bit is 1, then decimator will drop data by write enable signal generated by horizontal sync, else write enable is not used.) + typedef UReg<0x05, 0x1F, 0, 8> DEC_REG_01; // DEC_REG_01 + typedef UReg<0x05, 0x1F, 0, 1> DEC1_BYPS; // The 4x to 2x decimator bypass enable (When 1, the 4x to 2x decimator bypass.) + typedef UReg<0x05, 0x1F, 1, 1> DEC2_BYPS; // The 2x to 1x decimator bypass enable (When 1, the 2x to 1x decimator hypass) + typedef UReg<0x05, 0x1F, 2, 1> DEC_MATRIX_BYPS; // Color space convert bypass enable (When set to 1, color space convert module bypass.) + typedef UReg<0x05, 0x1F, 3, 1> DEC_TEST_ENABLE; // Test logic output select (test logic output enable, when set to 1, test logic can output.) + typedef UReg<0x05, 0x1F, 4, 3> DEC_TEST_SEL; // Test logic output select (select 8 test logics to test bus) + typedef UReg<0x05, 0x1F, 7, 1> DEC_IDREG_EN; // Negative clock edge latch input hsync and vsync enable (When set to 1, decimator 4x clock will latch HSYNC and VSYNC with falling edge) // // Sync Proc (all registers R/W) // - typedef UReg<0x05, 0x20, 0, 1> SP_SOG_SRC_SEL; - typedef UReg<0x05, 0x20, 1, 1> SP_SOG_P_ATO; - typedef UReg<0x05, 0x20, 2, 1> SP_SOG_P_INV; - typedef UReg<0x05, 0x20, 3, 1> SP_EXT_SYNC_SEL; - typedef UReg<0x05, 0x20, 4, 1> SP_JITTER_SYNC; - typedef UReg<0x05, 0x26, 0, 12> SP_SYNC_PD_THD; - typedef UReg<0x05, 0x33, 0, 8> SP_H_TIMER_VAL; - typedef UReg<0x05, 0x35, 0, 12> SP_DLT_REG; - typedef UReg<0x05, 0x37, 0, 8> SP_H_PULSE_IGNOR; - typedef UReg<0x05, 0x38, 0, 8> SP_PRE_COAST; - typedef UReg<0x05, 0x39, 0, 8> SP_POST_COAST; - typedef UReg<0x05, 0x3A, 0, 8> SP_H_TOTAL_EQ_THD; - typedef UReg<0x05, 0x3B, 0, 3> SP_SDCS_VSST_REG_H; - typedef UReg<0x05, 0x3B, 4, 3> SP_SDCS_VSSP_REG_H; - typedef UReg<0x05, 0x3E, 0, 8> SP_CS_0x3E; // fake name - typedef UReg<0x05, 0x3E, 0, 1> SP_CS_P_SWAP; - typedef UReg<0x05, 0x3E, 1, 1> SP_HD_MODE; - typedef UReg<0x05, 0x3E, 2, 1> SP_H_COAST; - typedef UReg<0x05, 0x3E, 4, 1> SP_H_PROTECT; - typedef UReg<0x05, 0x3E, 5, 1> SP_DIS_SUB_COAST; - typedef UReg<0x05, 0x3F, 0, 8> SP_SDCS_VSST_REG_L; - typedef UReg<0x05, 0x40, 0, 8> SP_SDCS_VSSP_REG_L; - typedef UReg<0x05, 0x41, 0, 12> SP_CS_CLP_ST; - typedef UReg<0x05, 0x43, 0, 12> SP_CS_CLP_SP; - typedef UReg<0x05, 0x45, 0, 12> SP_CS_HS_ST; - typedef UReg<0x05, 0x47, 0, 12> SP_CS_HS_SP; - typedef UReg<0x05, 0x49, 0, 12> SP_RT_HS_ST; - typedef UReg<0x05, 0x4B, 0, 12> SP_RT_HS_SP; - typedef UReg<0x05, 0x4D, 0, 12> SP_H_CST_ST; - typedef UReg<0x05, 0x4F, 0, 12> SP_H_CST_SP; - typedef UReg<0x05, 0x55, 4, 1> SP_HS_POL_ATO; - typedef UReg<0x05, 0x55, 6, 1> SP_VS_POL_ATO; - typedef UReg<0x05, 0x55, 7, 1> SP_HCST_AUTO_EN; - typedef UReg<0x05, 0x56, 0, 8> SP_5_56; // convenience - typedef UReg<0x05, 0x56, 0, 1> SP_SOG_MODE; - typedef UReg<0x05, 0x56, 1, 1> SP_HS2PLL_INV_REG; - typedef UReg<0x05, 0x56, 2, 1> SP_CLAMP_MANUAL; - typedef UReg<0x05, 0x56, 3, 1> SP_CLP_SRC_SEL; - typedef UReg<0x05, 0x56, 4, 1> SP_SYNC_BYPS; - typedef UReg<0x05, 0x56, 5, 1> SP_HS_PROC_INV_REG; - typedef UReg<0x05, 0x56, 6, 1> SP_VS_PROC_INV_REG; - typedef UReg<0x05, 0x56, 7, 1> SP_CLAMP_INV_REG; - typedef UReg<0x05, 0x57, 0, 8> SP_5_57; // convenience - typedef UReg<0x05, 0x57, 0, 1> SP_NO_CLAMP_REG; - typedef UReg<0x05, 0x57, 1, 1> SP_COAST_INV_REG; - typedef UReg<0x05, 0x57, 2, 1> SP_NO_COAST_REG; - typedef UReg<0x05, 0x57, 6, 1> SP_HS_LOOP_SEL; - typedef UReg<0x05, 0x57, 7, 1> SP_HS_REG; - typedef UReg<0x05, 0x60, 0, 8> ADC_UNUSED_60; - typedef UReg<0x05, 0x61, 0, 8> ADC_UNUSED_61; - typedef UReg<0x05, 0x62, 0, 8> ADC_UNUSED_62; - typedef UReg<0x05, 0x63, 0, 8> TEST_BUS_SP_SEL; - typedef UReg<0x05, 0x64, 0, 8> ADC_UNUSED_64; - typedef UReg<0x05, 0x65, 0, 8> ADC_UNUSED_65; - typedef UReg<0x05, 0x66, 0, 8> ADC_UNUSED_66; - typedef UReg<0x05, 0x67, 0, 16> ADC_UNUSED_67; // + ADC_UNUSED_68; - typedef UReg<0x05, 0x69, 0, 8> ADC_UNUSED_69; + typedef UReg<0x05, 0x20, 0, 1> SP_SOG_SRC_SEL; // SOG signal source select (0: from ADC; 1: select hs as sog source) + typedef UReg<0x05, 0x20, 1, 1> SP_SOG_P_ATO; // SOG auto correct polarity + typedef UReg<0x05, 0x20, 2, 1> SP_SOG_P_INV; // Invert sog. + typedef UReg<0x05, 0x20, 3, 1> SP_EXT_SYNC_SEL; // Ext 2 set Hs_Hs select + typedef UReg<0x05, 0x20, 4, 1> SP_JITTER_SYNC; // Sync using both rising and falling trigger (Use falling and rising edge to sync input Hsync) + // 20_5:3 - reserved + typedef UReg<0x05, 0x21, 0, 16> SP_SYNC_TGL_THD; // h active detect control (Sync toggle times threshold) + // 23_0:8 - reserved + typedef UReg<0x05, 0x24, 0, 12> SP_T_DLT_REG; // H active detect control (H total width different threshold) + // 25:4:4 - reserved + typedef UReg<0x05, 0x26, 0, 12> SP_SYNC_PD_THD; // H active detect control (H sync pulse width threshold) + // 27_4:4 - reserved + typedef UReg<0x05, 0x2A, 0, 8> SP_PRD_EQ_THD; // H active detect control (How many continue legal line as valid) + // 2B - 2C - not described + typedef UReg<0x05, 0x2D, 0, 8> SP_VSYNC_TGL_THD; // V active detect control (V sync toggle times threshold) + typedef UReg<0x05, 0x2E, 0, 8> SP_SYNC_WIDTH_DTHD; // V active detect control (V sync pulse width threshod) + typedef UReg<0x05, 0x2F, 0, 8> SP_V_PRD_EQ_THD; // V active detect control (How many continue legal v sync as valid) + typedef UReg<0x05, 0x31, 0, 8> SP_VT_DLT_REG; // V active detect control (V total different threshold) + typedef UReg<0x05, 0x32, 0, 1> SP_VSIN_INV_REG; // V active detect control (Input v sync invert to v active detect) + // 32_1:7 - reserved + typedef UReg<0x05, 0x33, 0, 8> SP_H_TIMER_VAL; // Timer value control (H timer value for h detect) + typedef UReg<0x05, 0x34, 0, 8> SP_V_TIMER_VAL; // Timer value control (V timer for V detect) + typedef UReg<0x05, 0x35, 0, 12> SP_DLT_REG; // Sync separation control (MSB for sync pulse width difference compare value) + // 36_4:4 - reserved + typedef UReg<0x05, 0x37, 0, 8> SP_H_PULSE_IGNOR; // Sync separation control (H pulse less than this value will be ignore this counter is start when sync large different) + typedef UReg<0x05, 0x38, 0, 8> SP_PRE_COAST; // Sync separation control (Set the coast will valid before vertical sync (line number)) + typedef UReg<0x05, 0x39, 0, 8> SP_POST_COAST; // Sync separation control (When line cnt reach this value coast goes down) + typedef UReg<0x05, 0x3A, 0, 8> SP_H_TOTAL_EQ_THD; // Sync separation control (How many regular line regard it as legal) + typedef UReg<0x05, 0x3B, 0, 3> SP_SDCS_VSST_REG_H; // Sync separation control (High bit of SD vs. start position) + // 3B_3:1 - reserved + typedef UReg<0x05, 0x3B, 4, 3> SP_SDCS_VSSP_REG_H; // Sync separation control (High bit of SD vs. stop position) + // 3B_7:1 - reserved + typedef UReg<0x05, 0x3E, 0, 8> SP_CS_0x3E; // SYNC_PROC 23 + typedef UReg<0x05, 0x3E, 0, 1> SP_CS_P_SWAP; // Sync separation control (cs_p_swap cs edge reference select default rising edge) + typedef UReg<0x05, 0x3E, 1, 1> SP_HD_MODE; // hd_mode 1: HD mode 0: SD mode + typedef UReg<0x05, 0x3E, 2, 1> SP_H_COAST; // h_coast 1: with sub coast out + typedef UReg<0x05, 0x3E, 3, 1> SP_CS_INV_REG; // cs_inv_reg cs input invert + typedef UReg<0x05, 0x3E, 4, 1> SP_H_PROTECT; // H count overflow protect + typedef UReg<0x05, 0x3E, 5, 1> SP_DIS_SUB_COAST; // Disable sub coast + // 3E_6:2 - reserved + typedef UReg<0x05, 0x3F, 0, 8> SP_SDCS_VSST_REG_L; // Sync separation control (SD vs. start position) + typedef UReg<0x05, 0x40, 0, 8> SP_SDCS_VSSP_REG_L; // Sync separation control (SD vs. stop position) + typedef UReg<0x05, 0x41, 0, 12> SP_CS_CLP_ST; // Sync separation control (SOG clamp start position MSB...LSB) + // 42_4:4 - reserved + typedef UReg<0x05, 0x43, 0, 12> SP_CS_CLP_SP; // Sync separation control (SOG clamp stop position MSB...LSB) + // 42_4:4 - reserved + typedef UReg<0x05, 0x45, 0, 12> SP_CS_HS_ST; // Sync separation control (If the horizontal period number is equal to the defined value, in XGA modes, It’s XGA 75Hz mode) + // 46_4:4 - reserved + typedef UReg<0x05, 0x47, 0, 12> SP_CS_HS_SP; // Sync separation control (SOG hs stop position) + // 48_4:4 - reserved + typedef UReg<0x05, 0x49, 0, 12> SP_RT_HS_ST; // Retiming control (Retiming hs start position) + // 4A_4:4 - reserved + typedef UReg<0x05, 0x4B, 0, 12> SP_RT_HS_SP; // Retiming control (Retiming hs stop postion) + // 4C_4:4 - reserved + typedef UReg<0x05, 0x4D, 0, 12> SP_H_CST_ST; // Retiming control (H coast start position (total-this value)) + // 4E_4:4 - reserved + typedef UReg<0x05, 0x4F, 0, 12> SP_H_CST_SP; // Retiming control (H coast stop position) + // 50_4:4 - reserved + typedef UReg<0x05, 0x51, 0, 12> SP_RT_VS_ST; // Retiming control (Retiming vs start position) + // 52_4:4 - reserved + typedef UReg<0x05, 0x53, 0, 12> SP_RT_VS_SP; // Retiming control (Retiming vs stop position) + // 54_4:4 - reserved + typedef UReg<0x05, 0x55, 0, 2> SP_HS_EP_DLY_SEL; // Retiming control (Hs pulse delay sel for ( sync with vs )) + typedef UReg<0x05, 0x55, 3, 1> SP_HS_INV_REG; // Retiming control (hs_inv_reg inver hs to retimming module + typedef UReg<0x05, 0x55, 4, 1> SP_HS_POL_ATO; // Retiming control (hs auto correct in retiming module) + typedef UReg<0x05, 0x55, 5, 1> SP_VS_INV_REG; // Retiming control (vs inv_reg invert hs to retiming module) + typedef UReg<0x05, 0x55, 6, 1> SP_VS_POL_ATO; // Retiming control (vs auto correct in retiming module) + typedef UReg<0x05, 0x55, 7, 1> SP_HCST_AUTO_EN; // Retiming control (If enable h coast will start at ( V total - hcst_st)) + typedef UReg<0x05, 0x56, 0, 8> SP_5_56; // SYNC_PROC 48 + typedef UReg<0x05, 0x56, 0, 1> SP_SOG_MODE; // Out control (1: SOG mode; 0: normal mode) + typedef UReg<0x05, 0x56, 1, 1> SP_HS2PLL_INV_REG; // Out control (When =1, HS to PLL invert) + typedef UReg<0x05, 0x56, 2, 1> SP_CLAMP_MANUAL; // Out control (1: clamp turn on off by control by software (default) 0: for test) + typedef UReg<0x05, 0x56, 3, 1> SP_CLP_SRC_SEL; // Out control (Clamp source select - 1: pixel clock generate; 0: 27Mhz clock generate) + typedef UReg<0x05, 0x56, 4, 1> SP_SYNC_BYPS; // Out control (External sync bypass to decimator) + typedef UReg<0x05, 0x56, 5, 1> SP_HS_PROC_INV_REG; // Out control (HS to decimator invert) + typedef UReg<0x05, 0x56, 6, 1> SP_VS_PROC_INV_REG; // Out control (VS to decimator invert) + typedef UReg<0x05, 0x56, 7, 1> SP_CLAMP_INV_REG; // Out control (Clamp to ADC invert) + typedef UReg<0x05, 0x57, 0, 8> SP_5_57; // SYNC_PROC 49 + typedef UReg<0x05, 0x57, 0, 1> SP_NO_CLAMP_REG; // Out control (Clamp always be 0) + typedef UReg<0x05, 0x57, 1, 1> SP_COAST_INV_REG; // Out control (Coast invert) + typedef UReg<0x05, 0x57, 2, 1> SP_NO_COAST_REG; // Out control (Coast always be REG S5_57[3]) + typedef UReg<0x05, 0x57, 3, 1> SP_COAST_VALUE_REG; // Out control (Coast use 1x clk generate) + // 57_4:2 - reserved + typedef UReg<0x05, 0x57, 6, 1> SP_HS_LOOP_SEL; // Out control (Bypass PLL HS to 57 core) + typedef UReg<0x05, 0x57, 7, 1> SP_HS_REG; // Out control (When sub_coast enable will select this value) + typedef UReg<0x05, 0x58, 0, 12> SP_HT_DIFF_REG; // Auto clamp control (H total difference less this value as valid for auto clamp enable control) + // 59_4:4 - reserved + typedef UReg<0x05, 0x5A, 0, 12> SP_VT_DIFF_REG; // Auto clamp control (V total difference less this value as valid for auto clamp enable control) + // 5B_4:4 - reserved + typedef UReg<0x05, 0x5C, 0, 8> SP_STBLE_CNT_REG; // Auto clamp control (Stable indicate frame threshold for auto clamp enable control) + // 5D - 62 - not described + // typedef UReg<0x05, 0x60, 0, 8> ADC_UNUSED_60; + // typedef UReg<0x05, 0x61, 0, 8> ADC_UNUSED_61; + // typedef UReg<0x05, 0x62, 0, 8> ADC_UNUSED_62; + typedef UReg<0x05, 0x63, 0, 8> TEST_BUS_SP_SEL; // SYNC_PROC 55 + typedef UReg<0x05, 0x63, 0, 1> SP_TEST_EN; // Test bus enable + typedef UReg<0x05, 0x63, 1, 3> SP_TEST_MODULE; // test module select: + // # 0 none + // # 1 hs_pol_det module + // # 2 hs_act_det module + // # 3 vs_pol_det module + // # 4 vs_act_det module + // # 5 cs_sep module + // # 6 retiming module + // # 7 out proc module + typedef UReg<0x05, 0x63, 4, 2> SP_TEST_SIGNAL_SEL; // Test signal select + // 63_7:1 - reserved + // + // there is no more registers ahead... + // + // typedef UReg<0x05, 0x64, 0, 8> ADC_UNUSED_64; + // typedef UReg<0x05, 0x65, 0, 8> ADC_UNUSED_65; + // typedef UReg<0x05, 0x66, 0, 8> ADC_UNUSED_66; + // typedef UReg<0x05, 0x67, 0, 16> ADC_UNUSED_67; // + ADC_UNUSED_68; + // typedef UReg<0x05, 0x69, 0, 8> ADC_UNUSED_69; typedef UReg<0x05, 0xD0, 0, 32> VERYWIDEDUMMYREG; diff --git a/src/utils.cpp b/src/utils.cpp index b7e12958..291329a4 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,7 +3,7 @@ # File: utils.cpp # # File Created: Thursday, 2nd May 2024 5:37:47 pm # # Author: # -# Last Modified: Tuesday, 18th June 2024 12:16:32 am # +# Last Modified: Wednesday, 19th June 2024 11:36:06 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -21,7 +21,7 @@ static uint8_t lastSegment = 0xFF; * @return false */ bool utilsIsPassThroughMode() { - return (uopt->resolutionID == OutputHdBypass || uopt->resolutionID == OutputRGBHVBypass); + return (uopt.resolutionID == OutputHdBypass || uopt.resolutionID == OutputRGBHVBypass); } /** @@ -31,28 +31,28 @@ bool utilsIsPassThroughMode() { * @return false */ bool utilsNotPassThroughMode() { - return (uopt->resolutionID != OutputHdBypass && uopt->resolutionID != OutputRGBHVBypass); + return (uopt.resolutionID != OutputHdBypass && uopt.resolutionID != OutputRGBHVBypass); } /** - * @brief a simple getter to prevent parameters from + * @brief a simple getter to prevent parameters from * spreading in code (15kHz/Downscale mode) - * - * @return true - * @return false + * + * @return true + * @return false */ bool utilsIsDownscaleMode() { - return (uopt->resolutionID == Output15kHz || uopt->resolutionID == Output15kHz50); + return (uopt.resolutionID == Output15kHz || uopt.resolutionID == Output15kHz50); } /** * @brief a simple getter to prevent parameters from spreading in code - * - * @return true - * @return false + * + * @return true + * @return false */ bool utilsNotDownscaleMode() { - return (uopt->resolutionID != Output15kHz && uopt->resolutionID != Output15kHz50); + return (uopt.resolutionID != Output15kHz && uopt.resolutionID != Output15kHz50); } /** @@ -78,8 +78,8 @@ void resetPLLAD() GBS::PLLAD_VCORST::write(0); delay(1); latchPLLAD(); - rto->clampPositionIsSet = 0; // test, but should be good - rto->continousStableCounter = 1; + rto.clampPositionIsSet = 0; // test, but should be good + rto.continousStableCounter = 1; } /** @@ -92,8 +92,8 @@ void resetPLL() delay(1); GBS::PLL_VCORST::write(0); delay(1); - rto->clampPositionIsSet = 0; // test, but should be good - rto->continousStableCounter = 1; + rto.clampPositionIsSet = 0; // test, but should be good + rto.continousStableCounter = 1; } /** @@ -141,7 +141,7 @@ void setCsVsStop(uint16_t stop) void freezeVideo() { // GBS::IF_VB_ST::write(GBS::IF_VB_SP::read()); - uopt->freezeCapture = true; + uopt.freezeCapture = true; GBS::CAPTURE_ENABLE::write(0); } @@ -152,7 +152,7 @@ void freezeVideo() void unfreezeVideo() { // GBS::IF_VB_ST::write(GBS::IF_VB_SP::read() - 2); - uopt->freezeCapture = false; + uopt.freezeCapture = false; GBS::CAPTURE_ENABLE::write(1); } @@ -171,8 +171,8 @@ void resetDigital() // GBS::RESET_CONTROL_0x47::write(0x00); GBS::RESET_CONTROL_0x47::write(0x17); // new, keep 0,1,2,4 on (DEC,MODE,SYNC,INT) //MODE okay? - // if (rto->outModeHdBypass) { // if currently in bypass - if (uopt->resolutionID == OutputHdBypass) { // if currently in bypass + // if (rto.outModeHdBypass) { // if currently in bypass + if (uopt.resolutionID == OutputHdBypass) { // if currently in bypass GBS::RESET_CONTROL_0x46::write(0x00); GBS::RESET_CONTROL_0x47::write(0x1F); return; // 0x46 stays all 0 @@ -214,10 +214,10 @@ uint8_t getVideoMode() { uint8_t detectedMode = 0; - if (rto->videoStandardInput >= 14) { // check RGBHV first // not mode 13 here, else mode 13 can't reliably exit + if (rto.videoStandardInput >= 14) { // check RGBHV first // not mode 13 here, else mode 13 can't reliably exit detectedMode = GBS::STATUS_16::read(); if ((detectedMode & 0x0a) > 0) { // bit 1 or 3 active? - return rto->videoStandardInput; // still RGBHV bypass, 14 or 15 + return rto.videoStandardInput; // still RGBHV bypass, 14 or 15 } else { return 0; } @@ -243,7 +243,7 @@ uint8_t getVideoMode() return 5; } // hdtv 720p - if (rto->videoStandardInput == 4) { + if (rto.videoStandardInput == 4) { detectedMode = GBS::STATUS_04::read(); if ((detectedMode & 0xFF) == 0x80) { return 4; // still edtv 50 progressive @@ -276,7 +276,7 @@ uint8_t getVideoMode() if (GBS::STATUS_00::read() == 0x07) { // the 3 stat0 stable indicators on, none of the SD indicators on if ((GBS::STATUS_03::read() & 0x02) == 0x02) // Graphic mode bit on (any of VGA/SVGA/XGA/SXGA at all detected Hz) { - if (rto->inputIsYPbPr) + if (rto.inputIsYPbPr) return 13; else return 15; // switch to RGBS/HV handling @@ -327,27 +327,27 @@ uint8_t getVideoMode() if (GBS::STATUS_SYNC_PROC_VTOTAL::read() < (lineCount - 1) || GBS::STATUS_SYNC_PROC_VTOTAL::read() > (lineCount + 1)) { lineCount = 0; - rto->notRecognizedCounter = 0; + rto.notRecognizedCounter = 0; break; } detectedMode = GBS::STATUS_00::read(); if ((detectedMode & 0x2F) != 0x07) { lineCount = 0; - rto->notRecognizedCounter = 0; + rto.notRecognizedCounter = 0; break; } } - if (lineCount != 0 && rto->notRecognizedCounter < 255) { - rto->notRecognizedCounter++; + if (lineCount != 0 && rto.notRecognizedCounter < 255) { + rto.notRecognizedCounter++; } } else { - rto->notRecognizedCounter = 0; + rto.notRecognizedCounter = 0; } } else { - rto->notRecognizedCounter = 0; + rto.notRecognizedCounter = 0; } // ??? - if (rto->notRecognizedCounter == 255) { + if (rto.notRecognizedCounter == 255) { return 9; } @@ -361,7 +361,7 @@ uint8_t getVideoMode() void setAndLatchPhaseADC() { GBS::PA_ADC_LAT::write(0); - GBS::PA_ADC_S::write(rto->phaseADC); + GBS::PA_ADC_S::write(rto.phaseADC); GBS::PA_ADC_LAT::write(1); } @@ -586,28 +586,55 @@ void startWire() } /** - * @brief + * @brief Check if TV chip is acting as expeced when all systems are powered-on + * (this function sets rto.boardHasPower status variable) * * @return true * @return false */ bool checkBoardPower() { - GBS::ADC_UNUSED_69::write(0x6a); // 0110 1010 - if (GBS::ADC_UNUSED_69::read() == 0x6a) { - GBS::ADC_UNUSED_69::write(0); - rto->boardHasPower = true; - return true; + // assume everything works fine, then read specific registers and decide + rto.boardHasPower = true; + // check DAC + if(!rto.isInLowPowerMode && GBS::DAC_RGBS_PWDNZ::read() == 0) { + _DBGN(F("(!) DAC is in power down mode")); + goto board_power_bad; } - GBS::ADC_UNUSED_69::write(0); // attempt to clear - if (rto->boardHasPower == true) { - _WSN(F("! power / i2c lost !")); + // check ADC + if(GBS::ADC_POWDZ::read() == 0) { + _DBGN(F("(!) ADC is in power down mode")); + goto board_power_bad; } - rto->boardHasPower = false; + // check PLL power + if(GBS::PLLAD_PDZ::read() == 0) { + _DBGN(F("(!) PLL is in power down mode")); + goto board_power_bad; + } + + return true; + +board_power_bad: + rto.boardHasPower = false; return false; + // GBS::ADC_UNUSED_69::write(0x6a); // 0110 1010 + // if (GBS::ADC_UNUSED_69::read() == 0x6a) { + // GBS::ADC_UNUSED_69::write(0); + // rto.boardHasPower = true; + // return true; + // } + + // GBS::ADC_UNUSED_69::write(0); // attempt to clear + // if (rto.boardHasPower == true) { + // _WSN(F("! power / i2c lost !")); + // } + // rto.boardHasPower = false; + + // return false; + // stopWire(); // sets pinmodes SDA, SCL to INPUT // uint8_t SCL_SDA = 0; // for (int i = 0; i < 2; i++) { @@ -617,7 +644,7 @@ bool checkBoardPower() // if (SCL_SDA != 6) //{ - // if (rto->boardHasPower == true) { + // if (rto.boardHasPower == true) { // _WSN("! power / i2c lost !"); // } // // I2C stays off and pins are INPUT @@ -628,6 +655,57 @@ bool checkBoardPower() // return 1; } +/** + * @brief Ref.13.2.2 Software reset: "In 5725, there are also some software reset register bits, + * these software reset only could reset state machine and internal + * timing, but could not reset register bits’ value. And host interface’s + * state machine is only reset by external reset..." + * + */ +void resetAllOffline() { + GBS::PLL_VCORST::write(1); + + GBS::ADC_POWDZ::write(0); + GBS::PLLAD_PDZ::write(0); + GBS::DAC_RGBS_PWDNZ::write(0); + GBS::SFTRST_SYNC_RSTZ::write(0); + GBS::SFTRST_DEC_RSTZ::write(0); + GBS::SFTRST_IF_RSTZ::write(0); + GBS::SFTRST_DEINT_RSTZ::write(0); + GBS::SFTRST_MEM_FF_RSTZ::write(0); + GBS::SFTRST_MEM_RSTZ::write(0); + GBS::SFTRST_FIFO_RSTZ::write(0); + GBS::SFTRST_OSD_RSTZ::write(0); + GBS::SFTRST_VDS_RSTZ::write(0); + GBS::SFTRST_MODE_RSTZ::write(0); + GBS::SFTRST_HDBYPS_RSTZ::write(0); + GBS::SFTRST_INT_RSTZ::write(0); +} + +/** + * @brief All systems online + * + */ +void resetAllOnline() { + GBS::PLLAD_VCORST::write(1); + + GBS::ADC_POWDZ::write(1); + GBS::PLLAD_PDZ::write(1); + GBS::DAC_RGBS_PWDNZ::write(1); + GBS::SFTRST_SYNC_RSTZ::write(1); + GBS::SFTRST_DEC_RSTZ::write(1); + GBS::SFTRST_IF_RSTZ::write(1); + GBS::SFTRST_DEINT_RSTZ::write(1); + GBS::SFTRST_MEM_FF_RSTZ::write(1); + GBS::SFTRST_MEM_RSTZ::write(1); + GBS::SFTRST_FIFO_RSTZ::write(1); + GBS::SFTRST_OSD_RSTZ::write(1); + GBS::SFTRST_VDS_RSTZ::write(1); + GBS::SFTRST_MODE_RSTZ::write(1); + GBS::SFTRST_HDBYPS_RSTZ::write(1); + GBS::SFTRST_INT_RSTZ::write(1); +} + /** * @brief * @@ -711,31 +789,31 @@ void calibrateAdcOffset() } if (i == 0) { // G done, prep R - adco->g_off = GBS::ADC_GOFCTRL::read(); + adco.g_off = GBS::ADC_GOFCTRL::read(); GBS::ADC_GOFCTRL::write(0x7F); GBS::ADC_ROFCTRL::write(0x3D); GBS::DEC_TEST_SEL::write(2); // 5_1f = 0x2c } if (i == 1) { - adco->r_off = GBS::ADC_ROFCTRL::read(); + adco.r_off = GBS::ADC_ROFCTRL::read(); GBS::ADC_ROFCTRL::write(0x7F); GBS::ADC_BOFCTRL::write(0x3D); GBS::DEC_TEST_SEL::write(3); // 5_1f = 0x3c } if (i == 2) { - adco->b_off = GBS::ADC_BOFCTRL::read(); + adco.b_off = GBS::ADC_BOFCTRL::read(); } _WSN(); } if (readout >= 0x52) { // there was a problem; revert - adco->r_off = adco->g_off = adco->b_off = 0x40; + adco.r_off = adco.g_off = adco.b_off = 0x40; } - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_BOFCTRL::write(adco->b_off); + GBS::ADC_GOFCTRL::write(adco.g_off); + GBS::ADC_ROFCTRL::write(adco.r_off); + GBS::ADC_BOFCTRL::write(adco.b_off); // _WSN(millis() - overallTimer); } @@ -746,23 +824,23 @@ void calibrateAdcOffset() * @param freq */ void setExternalClockGenFrequencySmooth(uint32_t freq) { - uint32_t current = rto->freqExtClockGen; + uint32_t current = rto.freqExtClockGen; - rto->freqExtClockGen = freq; + rto.freqExtClockGen = freq; constexpr uint32_t STEP_SIZE_HZ = 1000; - if (current > rto->freqExtClockGen) { - if ((current - rto->freqExtClockGen) < 750000) { - while (current > (rto->freqExtClockGen + STEP_SIZE_HZ)) { + if (current > rto.freqExtClockGen) { + if ((current - rto.freqExtClockGen) < 750000) { + while (current > (rto.freqExtClockGen + STEP_SIZE_HZ)) { current -= STEP_SIZE_HZ; Si.setFreq(0, current); // wifiLoop(0); } } - } else if (current < rto->freqExtClockGen) { - if ((rto->freqExtClockGen - current) < 750000) { - while ((current + STEP_SIZE_HZ) < rto->freqExtClockGen) { + } else if (current < rto.freqExtClockGen) { + if ((rto.freqExtClockGen - current) < 750000) { + while ((current + STEP_SIZE_HZ) < rto.freqExtClockGen) { current += STEP_SIZE_HZ; Si.setFreq(0, current); // wifiLoop(0); @@ -770,5 +848,5 @@ void setExternalClockGenFrequencySmooth(uint32_t freq) { } } - Si.setFreq(0, rto->freqExtClockGen); + Si.setFreq(0, rto.freqExtClockGen); } \ No newline at end of file diff --git a/src/utils.h b/src/utils.h index 80661948..9516053c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -3,7 +3,7 @@ # File: utils.h # # File Created: Thursday, 2nd May 2024 5:38:14 pm # # Author: # -# Last Modified: Saturday, 15th June 2024 8:00:46 pm # +# Last Modified: Tuesday, 18th June 2024 2:46:52 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -22,7 +22,6 @@ extern Si5351mcu Si; - bool utilsIsPassThroughMode(); bool utilsNotPassThroughMode(); bool utilsIsDownscaleMode(); @@ -56,6 +55,8 @@ void dumpRegisters(byte segment); void stopWire(); void startWire(); bool checkBoardPower(); +void resetAllOffline(); +void resetAllOnline(); void calibrateAdcOffset(); void setExternalClockGenFrequencySmooth(uint32_t freq); diff --git a/src/video.cpp b/src/video.cpp index 9fa0919a..61498028 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Tuesday, 18th June 2024 1:29:05 am # +# Last Modified: Wednesday, 19th June 2024 12:23:54 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -49,7 +49,7 @@ void resetInterruptNoHsyncBadBit() */ bool videoStandardInputIsPalNtscSd() { - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) { + if (rto.videoStandardInput == 1 || rto.videoStandardInput == 2) { return true; } return false; @@ -83,13 +83,13 @@ void prepareSyncProcessor() writeOneByte(0x33, 0x3a); // SP_H_TIMER_VAL H timer value for h detect (was 0x28) writeOneByte(0x34, 0x06); // SP_V_TIMER_VAL V timer for V detect // 0_16 vsactive // was 0x05 // Sync separation control - if (rto->videoStandardInput == 0) + if (rto.videoStandardInput == 0) GBS::SP_DLT_REG::write(0x70); // 5_35 130 too much for ps2 1080i, 0xb0 for 1080p - else if (rto->videoStandardInput <= 4) + else if (rto.videoStandardInput <= 4) GBS::SP_DLT_REG::write(0xC0); // old: extended to 0x150 later if mode = 1 or 2 - else if (rto->videoStandardInput <= 6) + else if (rto.videoStandardInput <= 6) GBS::SP_DLT_REG::write(0xA0); - else if (rto->videoStandardInput == 7) + else if (rto.videoStandardInput == 7) GBS::SP_DLT_REG::write(0x70); else GBS::SP_DLT_REG::write(0x70); @@ -122,8 +122,8 @@ void prepareSyncProcessor() writeOneByte(0x53, 0x00); // 0x05 rgbhv: 6 writeOneByte(0x54, 0x00); // 0xc0 - // if (rto->videoStandardInput != 15 && (GBS::GBS_OPTION_SCALING_RGBHV::read() != 1)) { - if (rto->videoStandardInput != 15 && !uopt->preferScalingRgbhv) { + // if (rto.videoStandardInput != 15 && (GBS::GBS_OPTION_SCALING_RGBHV::read() != 1)) { + if (rto.videoStandardInput != 15 && !uopt.preferScalingRgbhv) { GBS::SP_CLAMP_MANUAL::write(0); // 0 = automatic on/off possible GBS::SP_CLP_SRC_SEL::write(0); // clamp source 1: pixel clock, 0: 27mhz // was 1 but the pixel clock isn't available at first GBS::SP_NO_CLAMP_REG::write(1); // 5_57_0 unlock clamp @@ -157,7 +157,7 @@ void prepareSyncProcessor() */ bool getStatus16SpHsStable() { - if (rto->videoStandardInput == 15) { // check RGBHV first + if (rto.videoStandardInput == 15) { // check RGBHV first if (GBS::STATUS_INT_INP_NO_SYNC::read() == 0) { return true; } else { @@ -170,7 +170,7 @@ bool getStatus16SpHsStable() // checking the flag replaces checking the debug bus pulse length manually uint8_t status16 = GBS::STATUS_16::read(); if ((status16 & 0x02) == 0x02) { - if (rto->videoStandardInput == 1 || rto->videoStandardInput == 2) { + if (rto.videoStandardInput == 1 || rto.videoStandardInput == 2) { if ((status16 & 0x01) != 0x01) { // pal / ntsc should be sync active low return true; } @@ -203,7 +203,7 @@ float getSourceFieldRate(bool useSPBus) GBS::IF_TEST_SEL::write(3); // IF averaged frame time if (useSPBus) { - if (rto->syncTypeCsync) { + if (rto.syncTypeCsync) { // _DBGN("TestBus for csync"); if (testBusSelBackup != 0xa) GBS::TEST_BUS_SEL::write(0xa); @@ -298,14 +298,14 @@ void externalClockGenSyncInOutRate() { _DBGN("externalClockGenSyncInOutRate()"); - if (!rto->extClockGenDetected) { + if (!rto.extClockGenDetected) { return; } if (GBS::PAD_CKIN_ENZ::read() != 0) { return; } - // if (rto->outModeHdBypass) { - if (uopt->resolutionID == OutputHdBypass) { + // if (rto.outModeHdBypass) { + if (uopt.resolutionID == OutputHdBypass) { return; } if (GBS::PLL648_CONTROL_01::read() != 0x75) { @@ -324,17 +324,17 @@ void externalClockGenSyncInOutRate() return; } - uint32_t old = rto->freqExtClockGen; + uint32_t old = rto.freqExtClockGen; FrameSync::initFrequency(ofr, old); - setExternalClockGenFrequencySmooth((sfr / ofr) * rto->freqExtClockGen); + setExternalClockGenFrequencySmooth((sfr / ofr) * rto.freqExtClockGen); - int32_t diff = rto->freqExtClockGen - old; + int32_t diff = rto.freqExtClockGen - old; _WSF(PSTR("source Hz: %.5f new out: %.5f clock: %u (%s%d)\n"), sfr, getOutputFrameRate(), - rto->freqExtClockGen, + rto.freqExtClockGen, (diff >= 0 ? "+" : ""), diff); } @@ -352,10 +352,10 @@ int8_t externalClockGenDetectAndInitialize() const uint8_t xtal_cl = 0xD2; // 10pF, other choices are 8pF (0x92) and 6pF (0x52) NOTE: Per AN619, the low bytes should be written 0b010010 // MHz: 27, 32.4, 40.5, 54, 64.8, 81, 108, 129.6, 162 - rto->freqExtClockGen = 81000000; - rto->extClockGenDetected = 0; + rto.freqExtClockGen = 81000000; + rto.extClockGenDetected = 0; - if (uopt->disableExternalClockGenerator) { + if (uopt.disableExternalClockGenerator) { _DBGN(F("(!) external clock generator disabled, skipping detection")); return 0; } @@ -382,7 +382,7 @@ int8_t externalClockGenDetectAndInitialize() retVal = Wire.read(); if ((retVal & 0x80) == 0) { // SYS_INIT indicates device is ready. - rto->extClockGenDetected = 1; + rto.extClockGenDetected = 1; } else { return 0; } @@ -398,7 +398,7 @@ int8_t externalClockGenDetectAndInitialize() Wire.write(xtal_cl); Wire.endTransmission(); Si.setPower(0, SIOUT_6mA); - Si.setFreq(0, rto->freqExtClockGen); + Si.setFreq(0, rto.freqExtClockGen); Si.disable(0); return 1; } @@ -409,7 +409,7 @@ int8_t externalClockGenDetectAndInitialize() */ void externalClockGenResetClock() { - if (!rto->extClockGenDetected) { + if (!rto.extClockGenDetected) { _DBGN(F(" no ext.clock detected")); return; } @@ -418,45 +418,45 @@ void externalClockGenResetClock() uint8_t activeDisplayClock = GBS::PLL648_CONTROL_01::read(); if (activeDisplayClock == 0x25) - rto->freqExtClockGen = 40500000; + rto.freqExtClockGen = 40500000; else if (activeDisplayClock == 0x45) - rto->freqExtClockGen = 54000000; + rto.freqExtClockGen = 54000000; else if (activeDisplayClock == 0x55) - rto->freqExtClockGen = 64800000; + rto.freqExtClockGen = 64800000; else if (activeDisplayClock == 0x65) - rto->freqExtClockGen = 81000000; + rto.freqExtClockGen = 81000000; else if (activeDisplayClock == 0x85) - rto->freqExtClockGen = 108000000; + rto.freqExtClockGen = 108000000; else if (activeDisplayClock == 0x95) - rto->freqExtClockGen = 129600000; + rto.freqExtClockGen = 129600000; else if (activeDisplayClock == 0xa5) - rto->freqExtClockGen = 162000000; + rto.freqExtClockGen = 162000000; else if (activeDisplayClock == 0x35) - rto->freqExtClockGen = 81000000; // clock unused + rto.freqExtClockGen = 81000000; // clock unused else if (activeDisplayClock == 0) - rto->freqExtClockGen = 81000000; // no preset loaded - // else if (!rto->outModeHdBypass) { - else if (uopt->resolutionID != OutputHdBypass) { + rto.freqExtClockGen = 81000000; // no preset loaded + // else if (!rto.outModeHdBypass) { + else if (uopt.resolutionID != OutputHdBypass) { _DBGF(PSTR("preset display clock: 0x%02X\n"), activeDisplayClock); } // problem: around 108MHz the library seems to double the clock // maybe there are regs to check for this and resetPLL - if (rto->freqExtClockGen == 108000000) { + if (rto.freqExtClockGen == 108000000) { Si.setFreq(0, 87000000); delay(1); // quick fix } // same thing it seems at 40500000 - if (rto->freqExtClockGen == 40500000) { + if (rto.freqExtClockGen == 40500000) { Si.setFreq(0, 48500000); delay(1); // quick fix } - Si.setFreq(0, rto->freqExtClockGen); + Si.setFreq(0, rto.freqExtClockGen); GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) FrameSync::clearFrequency(); - _DBGF(PSTR("reset ext. clock gen. to: %ld\n"), rto->freqExtClockGen); + _DBGF(PSTR("reset ext. clock gen. to: %ld\n"), rto.freqExtClockGen); } /** @@ -468,8 +468,8 @@ void externalClockGenResetClock() */ bool applyBestHTotal(uint16_t bestHTotal) { - // if (rto->outModeHdBypass) { - if (uopt->resolutionID == OutputHdBypass) { + // if (rto.outModeHdBypass) { + if (uopt.resolutionID == OutputHdBypass) { return true; // false? doesn't matter atm } @@ -477,13 +477,13 @@ bool applyBestHTotal(uint16_t bestHTotal) int diffHTotal = bestHTotal - orig_htotal; uint16_t diffHTotalUnsigned = abs(diffHTotal); - if (((diffHTotalUnsigned == 0) || (rto->extClockGenDetected && diffHTotalUnsigned == 1)) && // all this - !rto->forceRetime) // and that + if (((diffHTotalUnsigned == 0) || (rto.extClockGenDetected && diffHTotalUnsigned == 1)) && // all this + !rto.forceRetime) // and that { - if (!uopt->enableFrameTimeLock) { // FTL can double throw this when it resets to adjust + if (!uopt.enableFrameTimeLock) { // FTL can double throw this when it resets to adjust _WS(F("HTotal Adjust (skipped)")); - if (!rto->extClockGenDetected) { + if (!rto.extClockGenDetected) { float sfr = getSourceFieldRate(0); yield(); // wifi float ofr = getOutputFrameRate(); @@ -502,14 +502,14 @@ bool applyBestHTotal(uint16_t bestHTotal) } // if (GBS::GBS_OPTION_PALFORCED60_ENABLED::read() == 1) { - if (uopt->PalForce60) { + if (uopt.PalForce60) { // source is 50Hz, preset has to stay at 60Hz: return return true; } bool isLargeDiff = (diffHTotalUnsigned > (orig_htotal * 0.06f)) ? true : false; // typical diff: 1802 to 1794 (=8) - if (isLargeDiff && (getVideoMode() == 8 || rto->videoStandardInput == 14)) { + if (isLargeDiff && (getVideoMode() == 8 || rto.videoStandardInput == 14)) { // arcade stuff syncs down from 60 to 52 Hz.. isLargeDiff = (diffHTotalUnsigned > (orig_htotal * 0.16f)) ? true : false; } @@ -518,17 +518,17 @@ bool applyBestHTotal(uint16_t bestHTotal) _WSN(F("ABHT: large diff")); } - // rto->forceRetime = true means the correction should be forced (command '.') - if (isLargeDiff && (rto->forceRetime == false)) { - if (rto->videoStandardInput != 14) { - rto->failRetryAttempts++; - if (rto->failRetryAttempts < 8) { + // rto.forceRetime = true means the correction should be forced (command '.') + if (isLargeDiff && (rto.forceRetime == false)) { + if (rto.videoStandardInput != 14) { + rto.failRetryAttempts++; + if (rto.failRetryAttempts < 8) { _WSN(F("retry")); - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); delay(60); } else { _WSN(F("give up")); - rto->autoBestHtotalEnabled = false; + rto.autoBestHtotalEnabled = false; } } return false; // large diff, no forced @@ -540,14 +540,14 @@ bool applyBestHTotal(uint16_t bestHTotal) return false; } - if (rto->forceRetime == false) { + if (rto.forceRetime == false) { if (GBS::STATUS_INT_SOG_BAD::read() == 1) { // _WSN("prevented in apply"); return false; } } - rto->failRetryAttempts = 0; // else all okay!, reset to 0 + rto.failRetryAttempts = 0; // else all okay!, reset to 0 // move blanking (display) uint16_t h_blank_display_start_position = GBS::VDS_DIS_HB_ST::read(); @@ -676,18 +676,18 @@ bool applyBestHTotal(uint16_t bestHTotal) } bool print = 1; - if (uopt->enableFrameTimeLock) { + if (uopt.enableFrameTimeLock) { // TODO logic! - // if ((GBS::GBS_RUNTIME_FTL_ADJUSTED::read() == 1) && !rto->forceRetime) { - if (!rto->forceRetime) { + // if ((GBS::GBS_RUNTIME_FTL_ADJUSTED::read() == 1) && !rto.forceRetime) { + if (!rto.forceRetime) { // FTL enabled and regular update, so don't print print = 0; } - uopt->enableFrameTimeLock = false; + uopt.enableFrameTimeLock = false; // GBS::GBS_RUNTIME_FTL_ADJUSTED::write(0); } - rto->forceRetime = false; + rto.forceRetime = false; if (print) { _WS(F("HTotal Adjust: ")); @@ -696,7 +696,7 @@ bool applyBestHTotal(uint16_t bestHTotal) } _WS(diffHTotal); - if (!rto->extClockGenDetected) { + if (!rto.extClockGenDetected) { float sfr = getSourceFieldRate(0); delay(0); float ofr = getOutputFrameRate(); @@ -723,8 +723,8 @@ bool applyBestHTotal(uint16_t bestHTotal) */ bool runAutoBestHTotal() { - if (!FrameSync::ready() && rto->autoBestHtotalEnabled == true - && rto->videoStandardInput > 0 && rto->videoStandardInput < 15) { + if (!FrameSync::ready() && rto.autoBestHtotalEnabled == true + && rto.videoStandardInput > 0 && rto.videoStandardInput < 15) { // _DBGN("running"); // unsigned long startTime = millis(); @@ -748,7 +748,7 @@ bool runAutoBestHTotal() } resetInterruptSogBadBit(); - if (stableNow && (getVideoMode() == rto->videoStandardInput)) { + if (stableNow && (getVideoMode() == rto.videoStandardInput)) { uint8_t testBusSelBackup = GBS::TEST_BUS_SEL::read(); uint8_t vdsBusSelBackup = GBS::VDS_TEST_BUS_SEL::read(); uint8_t ifBusSelBackup = GBS::IF_TEST_SEL::read(); @@ -784,7 +784,7 @@ bool runAutoBestHTotal() resetInterruptSogBadBit(); if (bestHTotal > 4095) { - if (!rto->forceRetime) { + if (!rto.forceRetime) { stableNow = false; } else { // roll with it @@ -806,7 +806,7 @@ bool runAutoBestHTotal() if (bestHTotal > 0 && stableNow) { bool success = applyBestHTotal(bestHTotal); if (success) { - rto->syncLockFailIgnore = 16; + rto.syncLockFailIgnore = 16; // _WS(F("ok, took: ")); // _WSN(millis() - startTime); return true; // success @@ -817,27 +817,27 @@ bool runAutoBestHTotal() // reaching here can happen even if stableNow == 1 if (!stableNow) { - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); - if (rto->syncLockFailIgnore > 0) { - rto->syncLockFailIgnore--; - if (rto->syncLockFailIgnore == 0) { + if (rto.syncLockFailIgnore > 0) { + rto.syncLockFailIgnore--; + if (rto.syncLockFailIgnore == 0) { GBS::DAC_RGBS_PWDNZ::write(1); // xth chance - if (!uopt->wantOutputComponent) { + if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // xth chance } - rto->autoBestHtotalEnabled = false; + rto.autoBestHtotalEnabled = false; } } - _DBGF(PSTR("bestHtotal retry (%d)\n"), rto->syncLockFailIgnore); + _DBGF(PSTR("bestHtotal retry (%d)\n"), rto.syncLockFailIgnore); } } else if (FrameSync::ready()) { // FS ready but mode is 0 or 15 or autoBestHtotal is off return true; } - if (rto->continousStableCounter != 0 && rto->continousStableCounter != 255) { - rto->continousStableCounter++; // stop repetitions + if (rto.continousStableCounter != 0 && rto.continousStableCounter != 255) { + rto.continousStableCounter++; // stop repetitions } return false; @@ -943,7 +943,7 @@ void applyRGBPatches() GBS::IF_MATRIX_BYPS::write(1); // if (GBS::GBS_PRESET_CUSTOM::read() == 0) { - if (!rto->isCustomPreset) { + if (!rto.isCustomPreset) { // colors GBS::VDS_Y_GAIN::write(0x80); // 0x80 = 0 GBS::VDS_UCOS_GAIN::write(0x1c); @@ -953,7 +953,7 @@ void applyRGBPatches() GBS::VDS_V_OFST::write(0x00); // 2 } - if (uopt->wantOutputComponent) { + if (uopt.wantOutputComponent) { applyComponentColorMixing(); } } @@ -965,7 +965,7 @@ void applyRGBPatches() void setAndLatchPhaseSP() { GBS::PA_SP_LAT::write(0); // latch off - GBS::PA_SP_S::write(rto->phaseSP); + GBS::PA_SP_S::write(rto.phaseSP); GBS::PA_SP_LAT::write(1); // latch on } @@ -977,7 +977,7 @@ void setAndLatchPhaseSP() */ void setAndUpdateSogLevel(uint8_t level) { - rto->currentLevelSOG = level & 0x1f; + rto.currentLevelSOG = level & 0x1f; GBS::ADC_SOGCTRL::write(level); setAndLatchPhaseSP(); setAndLatchPhaseADC(); @@ -985,7 +985,7 @@ void setAndUpdateSogLevel(uint8_t level) GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status GBS::INTERRUPT_CONTROL_00::write(0x00); - _DBGF(PSTR("update SOG: %d\n"), rto->currentLevelSOG); + _DBGF(PSTR("update SOG: %d\n"), rto.currentLevelSOG); } /** @@ -1007,14 +1007,14 @@ bool optimizePhaseSP() return 0; } - if (rto->currentLevelSOG <= 2) { + if (rto.currentLevelSOG <= 2) { // not very stable, use fixed values - rto->phaseSP = 16; - rto->phaseADC = 16; - if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { - if (rto->osr == 4) { - rto->phaseADC += 16; - rto->phaseADC &= 0x1f; + rto.phaseSP = 16; + rto.phaseADC = 16; + if (rto.videoStandardInput > 0 && rto.videoStandardInput <= 4) { + if (rto.osr == 4) { + rto.phaseADC += 16; + rto.phaseADC &= 0x1f; } } delay(8); // a bit longer, to match default run time @@ -1026,8 +1026,8 @@ bool optimizePhaseSP() if (runTest) { // 32 distinct phase settings, 3 average samples (missing 2 phase steps) > 34 for (uint8_t u = 0; u < 34; u++) { - rto->phaseSP++; - rto->phaseSP &= 0x1f; + rto.phaseSP++; + rto.phaseSP &= 0x1f; setAndLatchPhaseSP(); badHt = 0; delayMicroseconds(256); @@ -1040,7 +1040,7 @@ bool optimizePhaseSP() // if average 3 samples has more badHt than seen yet, this phase step is worse if ((badHt + prevBadHt + prevPrevBadHt) > worstBadHt) { worstBadHt = (badHt + prevBadHt + prevPrevBadHt); - worstPhaseSP = (rto->phaseSP - 1) & 0x1f; // medium of 3 samples + worstPhaseSP = (rto.phaseSP - 1) & 0x1f; // medium of 3 samples } if (badHt == 0) { @@ -1050,7 +1050,7 @@ bool optimizePhaseSP() prevPrevBadHt = prevBadHt; prevBadHt = badHt; - // _WS(rto->phaseSP); _WS(" badHt: "); _WSN(badHt); + // _WS(rto.phaseSP); _WS(" badHt: "); _WSN(badHt); } // _WSN(goodHt); @@ -1062,34 +1062,34 @@ bool optimizePhaseSP() // adjust global phase values according to test results if (worstBadHt != 0) { - rto->phaseSP = (worstPhaseSP + 16) & 0x1f; + rto.phaseSP = (worstPhaseSP + 16) & 0x1f; // assume color signals arrive at same time: phase adc = phase sp // test in hdbypass mode shows this is more related to sog.. the assumptions seem fine at sog = 8 - rto->phaseADC = 16; //(rto->phaseSP) & 0x1f; + rto.phaseADC = 16; //(rto.phaseSP) & 0x1f; // different OSR require different phase angles, also depending on bypass, etc // shift ADC phase 180 degrees for the following - if (rto->videoStandardInput >= 5 && rto->videoStandardInput <= 7) { - if (rto->osr == 2) { + if (rto.videoStandardInput >= 5 && rto.videoStandardInput <= 7) { + if (rto.osr == 2) { // _WSN("shift adc phase"); - rto->phaseADC += 16; - rto->phaseADC &= 0x1f; + rto.phaseADC += 16; + rto.phaseADC &= 0x1f; } - } else if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { - if (rto->osr == 4) { + } else if (rto.videoStandardInput > 0 && rto.videoStandardInput <= 4) { + if (rto.osr == 4) { // _WSN("shift adc phase"); - rto->phaseADC += 16; - rto->phaseADC &= 0x1f; + rto.phaseADC += 16; + rto.phaseADC &= 0x1f; } } } else { // test was always good, so choose any reasonable value - rto->phaseSP = 16; - rto->phaseADC = 16; - if (rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { - if (rto->osr == 4) { - rto->phaseADC += 16; - rto->phaseADC &= 0x1f; + rto.phaseSP = 16; + rto.phaseADC = 16; + if (rto.videoStandardInput > 0 && rto.videoStandardInput <= 4) { + if (rto.osr == 4) { + rto.phaseADC += 16; + rto.phaseADC &= 0x1f; } } } @@ -1099,12 +1099,12 @@ bool optimizePhaseSP() // _WSN("worstPhaseSP: "); _WSN(worstPhaseSP); /*static uint8_t lastLevelSOG = 99; - if (lastLevelSOG != rto->currentLevelSOG) { - _WS(F("Phase: ")); _WS(rto->phaseSP); - _WS(F(" SOG: ")); _WS(rto->currentLevelSOG); + if (lastLevelSOG != rto.currentLevelSOG) { + _WS(F("Phase: ")); _WS(rto.phaseSP); + _WS(F(" SOG: ")); _WS(rto.currentLevelSOG); _WSN(); } - lastLevelSOG = rto->currentLevelSOG;*/ + lastLevelSOG = rto.currentLevelSOG;*/ setAndLatchPhaseSP(); delay(1); @@ -1123,9 +1123,9 @@ void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) { uint8_t ks = GBS::PLLAD_KS::read(); - bool hi_res = rto->videoStandardInput == 8 || rto->videoStandardInput == 4 || rto->videoStandardInput == 3; - // bool bypass = rto->presetID == OutputHdBypass; - bool bypass = uopt->resolutionID == OutputHdBypass; + bool hi_res = rto.videoStandardInput == 8 || rto.videoStandardInput == 4 || rto.videoStandardInput == 3; + // bool bypass = rto.presetID == OutputHdBypass; + bool bypass = uopt.resolutionID == OutputHdBypass; switch (newRatio) { case 1: @@ -1148,7 +1148,7 @@ void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) // GBS::DEC2_BYPS::write(0); } - rto->osr = 1; + rto.osr = 1; // if (!prepareOnly) _WSN(F("OSR 1x")); break; @@ -1175,7 +1175,7 @@ void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) GBS::PLLAD_CKOS::write(GBS::PLLAD_CKOS::read() + 1); } - rto->osr = 2; + rto.osr = 2; // if (!prepareOnly) _WSN(F("OSR 2x")); break; @@ -1197,7 +1197,7 @@ void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) GBS::DEC1_BYPS::write(0); // dec1 couples to ADC_CLK_ICLK2X GBS::DEC2_BYPS::write(0); - rto->osr = 4; + rto.osr = 4; // if (!prepareOnly) _WSN(F("OSR 4x")); break; @@ -1216,7 +1216,7 @@ void setOverSampleRatio(uint8_t newRatio, bool prepareOnly) */ void updateStopPositionDynamic(bool withCurrentVideoModeCheck) { - if (!rto->boardHasPower || rto->sourceDisconnected) { + if (!rto.boardHasPower || rto.sourceDisconnected) { return; } @@ -1229,7 +1229,7 @@ void updateStopPositionDynamic(bool withCurrentVideoModeCheck) // vidModeReadout = getVideoMode(); // } - if (rto->videoStandardInput == 0 && vidModeReadout == 0) { + if (rto.videoStandardInput == 0 && vidModeReadout == 0) { if (GBS::SP_DLT_REG::read() > 0x30) GBS::SP_DLT_REG::write(0x30); // 5_35 else @@ -1239,9 +1239,9 @@ void updateStopPositionDynamic(bool withCurrentVideoModeCheck) // reset condition, allow most formats to detect // compare 1chip snes and ps2 1080p if (vidModeReadout == 0 && withCurrentVideoModeCheck) { - if ((rto->noSyncCounter % 16) <= 8 && rto->noSyncCounter != 0) { + if ((rto.noSyncCounter % 16) <= 8 && rto.noSyncCounter != 0) { GBS::SP_DLT_REG::write(0x30); // 5_35 - } else if ((rto->noSyncCounter % 16) > 8 && rto->noSyncCounter != 0) { + } else if ((rto.noSyncCounter % 16) > 8 && rto.noSyncCounter != 0) { GBS::SP_DLT_REG::write(0xC0); // may want to use lower, around 0x70 } else { GBS::SP_DLT_REG::write(0x30); @@ -1252,25 +1252,25 @@ void updateStopPositionDynamic(bool withCurrentVideoModeCheck) GBS::SP_H_CST_SP::write(0x100); GBS::SP_H_COAST::write(0); // 5_3e 2 (just in case) GBS::SP_H_TIMER_VAL::write(0x3a); // new: 5_33 default 0x3a, set shorter for better hsync drop detect - if (rto->syncTypeCsync) { + if (rto.syncTypeCsync) { GBS::SP_COAST_INV_REG::write(1); // new, allows SP to see otherwise potentially skipped vlines } - rto->coastPositionIsSet = false; + rto.coastPositionIsSet = false; return; } - if (rto->syncTypeCsync) { + if (rto.syncTypeCsync) { GBS::SP_COAST_INV_REG::write(0); } - if (rto->videoStandardInput != 0) { - if (rto->videoStandardInput <= 2) { // SD interlaced + if (rto.videoStandardInput != 0) { + if (rto.videoStandardInput <= 2) { // SD interlaced GBS::SP_PRE_COAST::write(7); GBS::SP_POST_COAST::write(3); GBS::SP_DLT_REG::write(0xC0); // old: 0x140 works better than 0x130 with psx GBS::SP_H_TIMER_VAL::write(0x28); // 5_33 - if (rto->syncTypeCsync) { + if (rto.syncTypeCsync) { uint16_t hPeriod = GBS::HPERIOD_IF::read(); for (int i = 0; i < 16; i++) { if (hPeriod == 511 || hPeriod < 200) { @@ -1327,32 +1327,32 @@ void updateStopPositionDynamic(bool withCurrentVideoModeCheck) } if (ignoreLength != GBS::SP_H_PULSE_IGNOR::read()) { GBS::SP_H_PULSE_IGNOR::write(ignoreLength); - rto->coastPositionIsSet = 0; // mustn't be skipped, needed when input changes dotclock / Hz + rto.coastPositionIsSet = 0; // mustn't be skipped, needed when input changes dotclock / Hz _DBGF(PSTR("ign. length: 0x%04X\n"), ignoreLength); } } } - } else if (rto->videoStandardInput <= 4) { + } else if (rto.videoStandardInput <= 4) { GBS::SP_PRE_COAST::write(7); // these two were 7 and 6 GBS::SP_POST_COAST::write(6); // and last 11 and 11 // 3,3 fixes the ps2 issue but these are too low for format change detects // update: seems to be an SP bypass only problem (t5t57t6 to 0 also fixes it) GBS::SP_DLT_REG::write(0xA0); GBS::SP_H_PULSE_IGNOR::write(0x0E); // ps3: up to 0x3e, ps2: < 0x14 - } else if (rto->videoStandardInput == 5) { // 720p + } else if (rto.videoStandardInput == 5) { // 720p GBS::SP_PRE_COAST::write(7); // down to 4 ok with ps2 GBS::SP_POST_COAST::write(7); // down to 6 ok with ps2 // ps3: 8 too much GBS::SP_DLT_REG::write(0x30); GBS::SP_H_PULSE_IGNOR::write(0x08); // ps3: 0xd too much - } else if (rto->videoStandardInput <= 7) { // 1080i,p + } else if (rto.videoStandardInput <= 7) { // 1080i,p GBS::SP_PRE_COAST::write(9); GBS::SP_POST_COAST::write(18); // of 1124 input lines GBS::SP_DLT_REG::write(0x70); // ps2 up to 0x06 // new test shows ps2 alternating between okay and not okay at 0x0a with 5_35=0x70 GBS::SP_H_PULSE_IGNOR::write(0x06); - } else if (rto->videoStandardInput >= 13) { // 13, 14 and 15 (was just 13 and 15) - if (rto->syncTypeCsync == false) { + } else if (rto.videoStandardInput >= 13) { // 13, 14 and 15 (was just 13 and 15) + if (rto.syncTypeCsync == false) { GBS::SP_PRE_COAST::write(0x00); GBS::SP_POST_COAST::write(0x00); GBS::SP_H_PULSE_IGNOR::write(0xff); // required this because 5_02 0 is on @@ -1376,24 +1376,24 @@ void updateStopPositionDynamic(bool withCurrentVideoModeCheck) */ void setOutputHdBypassMode(bool regsInitialized) { - if (!rto->boardHasPower) { + if (!rto.boardHasPower) { _WSN(F("(!) board not responding")); return; } - rto->autoBestHtotalEnabled = false; // disable while in this mode - // rto->outModeHdBypass = 1; // skips waiting at end of doPostPresetLoadSteps - uopt->resolutionID = OutputHdBypass; + rto.autoBestHtotalEnabled = false; // disable while in this mode + // rto.outModeHdBypass = 1; // skips waiting at end of doPostPresetLoadSteps + uopt.resolutionID = OutputHdBypass; externalClockGenResetClock(); updateStopPositionDynamic(false); loadHdBypassSection(); // this would be ignored otherwise - // TODO: needs clarification (see: uopt->debugView) + // TODO: needs clarification (see: uopt.debugView) // if (GBS::ADC_UNUSED_62::read() != 0x00) { // remember debug view - // if (uopt->presetPreference != 2) { - // if (uopt->resolutionID != OutputCustom) { + // if (uopt.presetPreference != 2) { + // if (uopt.resolutionID != OutputCustom) { // serialCommand = 'D'; // } // } @@ -1402,7 +1402,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::SP_COAST_INV_REG::write(0); // also just in case FrameSync::cleanup(); - GBS::ADC_UNUSED_62::write(0x00); // clear debug view + // GBS::ADC_UNUSED_62::write(0x00); // clear debug view GBS::RESET_CONTROL_0x46::write(0x00); // 0_46 all off, nothing needs to be enabled for bp mode GBS::RESET_CONTROL_0x47::write(0x00); GBS::PA_ADC_BYPSZ::write(1); // enable phase unit ADC @@ -1414,16 +1414,16 @@ void setOutputHdBypassMode(bool regsInitialized) // has already set the flag to 1. if (!regsInitialized) { // GBS::GBS_PRESET_CUSTOM::write(0); - rto->isCustomPreset = false; + rto.isCustomPreset = false; } doPostPresetLoadSteps(); // todo: remove this, code path for hdbypass is hard to follow - // doPostPresetLoadSteps() sets rto->presetID = GBS_PRESET_ID::read() = - // OutputHdBypass, and rto->isCustomPreset = GBS_PRESET_CUSTOM::read(). + // doPostPresetLoadSteps() sets rto.presetID = GBS_PRESET_ID::read() = + // OutputHdBypass, and rto.isCustomPreset = GBS_PRESET_CUSTOM::read(). resetDebugPort(); - rto->autoBestHtotalEnabled = false; // need to re-set this + rto.autoBestHtotalEnabled = false; // need to re-set this GBS::OUT_SYNC_SEL::write(1); // 0_4f 1=sync from HDBypass, 2=sync from SP, 0 = sync from VDS GBS::PLL_CKIS::write(0); // 0_40 0 // 0: PLL uses OSC clock | 1: PLL uses input clock @@ -1457,7 +1457,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::PLLAD_ICP::write(5); GBS::PLLAD_FS::write(1); - if (rto->inputIsYPbPr) { + if (rto.inputIsYPbPr) { GBS::DEC_MATRIX_BYPS::write(1); // 5_1f 2 = 1 for YUV / 0 for RGB GBS::HD_MATRIX_BYPS::write(0); // 1_30 1 / input to jacks is yuv, adc leaves it as yuv > convert to rgb for output here GBS::HD_DYN_BYPS::write(0); // don't bypass color expansion @@ -1479,7 +1479,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::HD_HSYNC_RST::write(0x3ff); // max 0x7ff GBS::HD_INI_ST::write(0); // todo: test this at 0 / was 0x298 // timing into HDB is PLLAD_MD with PLLAD_KS divider: KS = 0 > full PLLAD_MD - if (rto->videoStandardInput <= 2) { + if (rto.videoStandardInput <= 2) { // PAL and NTSC are rewrites, the rest is still handled normally // These 2 formats now have SP_HS2PLL_INV_REG set. That's the only way I know so far that // produces recovered HSyncs that align to the falling edge of the input @@ -1505,7 +1505,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::SP_CS_HS_ST::write(0xA0); GBS::SP_CS_HS_SP::write(0x00); - if (rto->videoStandardInput == 1) { + if (rto.videoStandardInput == 1) { setCsVsStart(250); // don't invert VS with direct SP sync mode setCsVsStop(1); // stop relates to HS pulses from CS decoder directly, so mind EQ pulses GBS::HD_VB_ST::write(500); // 1_43 @@ -1513,7 +1513,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::HD_VS_SP::write(522); // 1_49 // GBS::HD_VB_SP::write(16); // 1_45 } - if (rto->videoStandardInput == 2) { + if (rto.videoStandardInput == 2) { setCsVsStart(301); // don't invert setCsVsStop(5); // stop past EQ pulses (6 on psx) normally, but HDMI adapter works with -=1 (5) GBS::HD_VB_ST::write(605); // 1_43 @@ -1521,7 +1521,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::HD_VS_SP::write(621); // 1_49 GBS::HD_VB_SP::write(16); // 1_45 } - } else if (rto->videoStandardInput == 3 || rto->videoStandardInput == 4) { // 480p, 576p + } else if (rto.videoStandardInput == 3 || rto.videoStandardInput == 4) { // 480p, 576p GBS::ADC_FLTR::write(2); // 5_03 4/5 ADC filter 3=40, 2=70, 1=110, 0=150 Mhz GBS::PLLAD_KS::write(1); // 5_16 post divider GBS::PLLAD_CKOS::write(0); // 5_16 2x OS (with KS=1) @@ -1531,7 +1531,7 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::HD_HB_SP::write(0xa0); // 1_3D GBS::HD_VB_ST::write(0x00); // 1_43 GBS::HD_VB_SP::write(0x40); // 1_45 - if (rto->videoStandardInput == 3) { + if (rto.videoStandardInput == 3) { GBS::HD_HS_ST::write(0x54); // 1_3F GBS::HD_HS_SP::write(0x864); // 1_41 GBS::HD_VS_ST::write(0x06); // 1_47 // VS neg @@ -1539,7 +1539,7 @@ void setOutputHdBypassMode(bool regsInitialized) setCsVsStart(525 - 5); setCsVsStop(525 - 3); } - if (rto->videoStandardInput == 4) { + if (rto.videoStandardInput == 4) { GBS::HD_HS_ST::write(0x10); // 1_3F GBS::HD_HS_SP::write(0x880); // 1_41 GBS::HD_VS_ST::write(0x06); // 1_47 // VS neg @@ -1547,9 +1547,9 @@ void setOutputHdBypassMode(bool regsInitialized) setCsVsStart(48); setCsVsStop(46); } - } else if (rto->videoStandardInput <= 7 || rto->videoStandardInput == 13) { + } else if (rto.videoStandardInput <= 7 || rto.videoStandardInput == 13) { // GBS::SP_HS2PLL_INV_REG::write(0); // 5_56 1 use rising edge of tri-level sync // always 0 now - if (rto->videoStandardInput == 5) { // 720p + if (rto.videoStandardInput == 5) { // 720p GBS::PLLAD_MD::write(2474); // override from 2345 GBS::HD_HSYNC_RST::write(550); // 1_37 // GBS::HD_INI_ST::write(78); // 1_39 @@ -1572,7 +1572,7 @@ void setOutputHdBypassMode(bool regsInitialized) setCsVsStart(2); setCsVsStop(0); } - if (rto->videoStandardInput == 6) { // 1080i + if (rto.videoStandardInput == 6) { // 1080i // interl. source GBS::HD_HSYNC_RST::write(0x710); // 1_37 // GBS::HD_INI_ST::write(2); // 1_39 @@ -1590,7 +1590,7 @@ void setOutputHdBypassMode(bool regsInitialized) setCsVsStart(8); setCsVsStop(6); } - if (rto->videoStandardInput == 7) { // 1080p + if (rto.videoStandardInput == 7) { // 1080p GBS::PLLAD_MD::write(2749); // override from 2345 GBS::HD_HSYNC_RST::write(0x710); // 1_37 // GBS::HD_INI_ST::write(0xf0); // 1_39 @@ -1611,9 +1611,9 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::HD_VS_ST::write(0x04); // 1_47 GBS::HD_VS_SP::write(0x0A); // 1_49 } - if (rto->videoStandardInput == 13) { // odd HD mode (PS2 "VGA" over Component) + if (rto.videoStandardInput == 13) { // odd HD mode (PS2 "VGA" over Component) applyRGBPatches(); // treat mostly as RGB, clamp R/B to gnd - rto->syncTypeCsync = true; // used in loop to set clamps and SP dynamic + rto.syncTypeCsync = true; // used in loop to set clamps and SP dynamic GBS::DEC_MATRIX_BYPS::write(1); // overwrite for this mode GBS::SP_PRE_COAST::write(4); GBS::SP_POST_COAST::write(4); @@ -1632,7 +1632,7 @@ void setOutputHdBypassMode(bool regsInitialized) } } - if (rto->videoStandardInput == 13) { + if (rto.videoStandardInput == 13) { // section is missing HD_HSYNC_RST and HD_INI_ST adjusts uint16_t vtotal = GBS::STATUS_SYNC_PROC_VTOTAL::read(); if (vtotal < 532) { // 640x480 or less @@ -1650,11 +1650,11 @@ void setOutputHdBypassMode(bool regsInitialized) GBS::DEC_IDREG_EN::write(1); // 5_1f 7 GBS::DEC_WEN_MODE::write(1); // 5_1e 7 // 1 keeps ADC phase consistent. around 4 lock positions vs totally random - rto->phaseSP = 8; - rto->phaseADC = 24; // fix value // works best with yuv input in tests - setAndUpdateSogLevel(rto->currentLevelSOG); // also re-latch everything + rto.phaseSP = 8; + rto.phaseADC = 24; // fix value // works best with yuv input in tests + setAndUpdateSogLevel(rto.currentLevelSOG); // also re-latch everything - // rto->outModeHdBypass = 1; + // rto.outModeHdBypass = 1; unsigned long timeout = millis(); while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { @@ -1677,7 +1677,7 @@ void setOutputHdBypassMode(bool regsInitialized) /** * @brief Set the Adc Gain object - * Write ADC gain registers, and save in adco->r_gain to properly transfer it + * Write ADC gain registers, and save in adco.r_gain to properly transfer it * across loading presets or passthrough. * @param gain */ @@ -1690,9 +1690,9 @@ void setAdcGain(uint8_t gain) // Save gain for applying preset. (Gain affects passthrough presets, and // loading a passthrough preset loads from adco but doesn't save to it.) - adco->r_gain = gain; - adco->g_gain = gain; - adco->b_gain = gain; + adco.r_gain = gain; + adco.g_gain = gain; + adco.b_gain = gain; } /** @@ -1704,8 +1704,8 @@ void resetSyncProcessor() GBS::SFTRST_SYNC_RSTZ::write(0); delayMicroseconds(10); GBS::SFTRST_SYNC_RSTZ::write(1); - // rto->clampPositionIsSet = false; // resetSyncProcessor is part of autosog - // rto->coastPositionIsSet = false; + // rto.clampPositionIsSet = false; // resetSyncProcessor is part of autosog + // rto.coastPositionIsSet = false; } /** @@ -1728,7 +1728,7 @@ void togglePhaseAdjustUnits() */ void setOutputRGBHVBypassMode() { - if (!rto->boardHasPower) { + if (!rto.boardHasPower) { _WSN(F("(!) board not responding!")); return; } @@ -1739,16 +1739,16 @@ void setOutputRGBHVBypassMode() loadHdBypassSection(); externalClockGenResetClock(); FrameSync::cleanup(); - GBS::ADC_UNUSED_62::write(0x00); // clear debug view + // GBS::ADC_UNUSED_62::write(0x00); // clear debug view GBS::PA_ADC_BYPSZ::write(1); // enable phase unit ADC GBS::PA_SP_BYPSZ::write(1); // enable phase unit SP applyRGBPatches(); resetDebugPort(); - rto->videoStandardInput = 15; // making sure - rto->autoBestHtotalEnabled = false; // not necessary, since VDS is off / bypassed // todo: mode 14 (works anyway) - rto->clampPositionIsSet = false; - rto->HPLLState = 0; - uopt->resolutionID = OutputRGBHVBypass; + rto.videoStandardInput = 15; // making sure + rto.autoBestHtotalEnabled = false; // not necessary, since VDS is off / bypassed // todo: mode 14 (works anyway) + rto.clampPositionIsSet = false; + rto.HPLLState = 0; + uopt.resolutionID = OutputRGBHVBypass; GBS::PLL_CKIS::write(0); // 0_40 0 // 0: PLL uses OSC clock | 1: PLL uses input clock GBS::PLL_DIVBY2Z::write(0); // 0_40 1 // 1= no divider (full clock, ie 27Mhz) 0 = halved clock @@ -1777,7 +1777,7 @@ void setOutputRGBHVBypassMode() GBS::PAD_SYNC2_IN_ENZ::write(0); // filter H/V sync input2 (0 = on) GBS::SP_SOG_P_ATO::write(1); // 5_20 1 corrects hpw readout and slightly affects sync - if (rto->syncTypeCsync == false) { + if (rto.syncTypeCsync == false) { GBS::SP_SOG_SRC_SEL::write(0); // 5_20 0 | 0: from ADC 1: from hs // use ADC and turn it off = no SOG GBS::ADC_SOGEN::write(1); // 5_02 0 ADC SOG // having it 0 drags down the SOG (hsync) input; = 1: need to supress SOG decoding GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) @@ -1791,8 +1791,8 @@ void setOutputRGBHVBypassMode() GBS::SP_VS_POL_ATO::write(1); // 5_55 6 GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS GBS::SP_H_PROTECT::write(0); // 5_3e 4 disable for H/V - rto->phaseADC = 16; - rto->phaseSP = 8; + rto.phaseADC = 16; + rto.phaseSP = 8; } else { // todo: SOG SRC can be ADC or HS input pin. HS requires TTL level, ADC can use lower levels // HS seems to have issues at low PLL speeds @@ -1807,9 +1807,9 @@ void setOutputRGBHVBypassMode() GBS::SP_SYNC_BYPS::write(0); // use regular sync for decimator (and sync out) path GBS::SP_HS_LOOP_SEL::write(1); // 5_57_6 | 0 enables retiming on SP | 1 to bypass input to HDBYPASS GBS::SP_H_PROTECT::write(1); // 5_3e 4 enable for SOG - rto->currentLevelSOG = 24; - rto->phaseADC = 16; - rto->phaseSP = 8; + rto.currentLevelSOG = 24; + rto.phaseADC = 16; + rto.phaseSP = 8; } GBS::SP_CLAMP_MANUAL::write(1); // needs to be 1 GBS::SP_COAST_INV_REG::write(0); // just in case @@ -1860,25 +1860,25 @@ void setOutputRGBHVBypassMode() setAndLatchPhaseADC(); latchPLLAD(); - if (uopt->enableAutoGain == 1 && adco->r_gain == 0) { + if (uopt.enableAutoGain == 1 && adco.r_gain == 0) { // _WSN(F("ADC gain: reset")); setAdcGain(AUTO_GAIN_INIT); GBS::DEC_TEST_ENABLE::write(1); - } else if (uopt->enableAutoGain == 1 && adco->r_gain != 0) { + } else if (uopt.enableAutoGain == 1 && adco.r_gain != 0) { /*_WSN(F("ADC gain: keep previous")); - _WSF("0x%04X", adco->r_gain); _WS(F(" ")); - _WSF("0x%04X", adco->g_gain); _WS(F(" ")); - _WSF("0x%04X", adco->b_gain); _WSN(F(" "));*/ - GBS::ADC_RGCTRL::write(adco->r_gain); - GBS::ADC_GGCTRL::write(adco->g_gain); - GBS::ADC_BGCTRL::write(adco->b_gain); + _WSF("0x%04X", adco.r_gain); _WS(F(" ")); + _WSF("0x%04X", adco.g_gain); _WS(F(" ")); + _WSF("0x%04X", adco.b_gain); _WSN(F(" "));*/ + GBS::ADC_RGCTRL::write(adco.r_gain); + GBS::ADC_GGCTRL::write(adco.g_gain); + GBS::ADC_BGCTRL::write(adco.b_gain); GBS::DEC_TEST_ENABLE::write(1); } else { GBS::DEC_TEST_ENABLE::write(0); // no need for decimation test to be enabled } - // rto->presetID = OutputRGBHVBypass; // bypass flavor 2, used to signal buttons in web ui - uopt->resolutionID = OutputRGBHVBypass; // bypass flavor 2, used to signal buttons in web ui + // rto.presetID = OutputRGBHVBypass; // bypass flavor 2, used to signal buttons in web ui + uopt.resolutionID = OutputRGBHVBypass; // bypass flavor 2, used to signal buttons in web ui GBS::GBS_PRESET_ID::write(OutputRGBHVBypass); delay(200); } @@ -1935,9 +1935,9 @@ void runAutoGain() setAdcGain(level + 2); // remember these gain settings - adco->r_gain = GBS::ADC_RGCTRL::read(); - adco->g_gain = GBS::ADC_GGCTRL::read(); - adco->b_gain = GBS::ADC_BGCTRL::read(); + adco.r_gain = GBS::ADC_RGCTRL::read(); + adco.g_gain = GBS::ADC_GGCTRL::read(); + adco.b_gain = GBS::ADC_BGCTRL::read(); // @sk: suspended // printInfo(); // delay(2); // let it settle a little @@ -1971,7 +1971,7 @@ void enableScanlines() GBS::MADPT_UVDLY_PD_ST::write(0); // 2_39 4..7 GBS::MADPT_EN_UV_DEINT::write(1); // 2_3a 0 GBS::MADPT_UV_MI_DET_BYPS::write(1); // 2_3a 7 enables 2_3b adjust - GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); // 2_3b offset (mixing factor here) + GBS::MADPT_UV_MI_OFFSET::write(uopt.scanlineStrength); // 2_3b offset (mixing factor here) GBS::MADPT_MO_ADP_UV_EN::write(1); // 2_16 5 (try to do this some other way?) GBS::DIAG_BOB_PLDY_RAM_BYPS::write(0); // 2_00 7 enabled, looks better @@ -1983,16 +1983,16 @@ void enableScanlines() GBS::VDS_WLEV_GAIN::write(0x08); // 3_58 GBS::VDS_W_LEV_BYPS::write(0); // brightness GBS::MADPT_VIIR_COEF::write(0x08); // 2_27 VIIR filter strength - GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); // 2_0b offset (mixing factor here) + GBS::MADPT_Y_MI_OFFSET::write(uopt.scanlineStrength); // 2_0b offset (mixing factor here) GBS::MADPT_VIIR_BYPS::write(0); // 2_26 6 VIIR line fifo // 1 = off GBS::RFF_LINE_FLIP::write(1); // clears potential garbage in rff buffer GBS::MAPDT_VT_SEL_PRGV::write(0); // GBS::GBS_OPTION_SCANLINES_ENABLED::write(1); - uopt->wantScanlines = true; + uopt.wantScanlines = true; // } - // rto->scanlinesEnabled = 1; + // rto.scanlinesEnabled = 1; } /** @@ -2023,9 +2023,9 @@ void disableScanlines() GBS::RFF_LINE_FLIP::write(0); // back to default // GBS::GBS_OPTION_SCANLINES_ENABLED::write(0); - uopt->wantScanlines = false; + uopt.wantScanlines = false; // } - // rto->scanlinesEnabled = 0; + // rto.scanlinesEnabled = 0; } /** @@ -2043,9 +2043,9 @@ void enableMotionAdaptDeinterlace() // GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 // GBS::MADPT_EN_STILL_FOR_NRD::write(1); // 2_3a 3 (new) - if (rto->videoStandardInput == 1) + if (rto.videoStandardInput == 1) GBS::MADPT_VTAP2_COEFF::write(6); // 2_19 vertical filter - if (rto->videoStandardInput == 2) + if (rto.videoStandardInput == 2) GBS::MADPT_VTAP2_COEFF::write(4); // GBS::RFF_WFF_STA_ADDR_A::write(0); @@ -2065,7 +2065,7 @@ void enableMotionAdaptDeinterlace() unfreezeVideo(); delay(60); GBS::MAPDT_VT_SEL_PRGV::write(0); // 2_16_7 - rto->motionAdaptiveDeinterlaceActive = true; + rto.motionAdaptiveDeinterlaceActive = true; } /** @@ -2092,45 +2092,52 @@ void disableMotionAdaptDeinterlace() // GBS::MADPT_UVDLY_PD_BYPS::write(1); // 2_35_5 // GBS::MADPT_EN_UV_DEINT::write(0); // 2_3a 0 // GBS::MADPT_EN_STILL_FOR_NRD::write(0); // 2_3a 3 (new) - rto->motionAdaptiveDeinterlaceActive = false; + rto.motionAdaptiveDeinterlaceActive = false; } /** * @brief Clear tv5725 registers + * "All registers (except chapter 01 status register is read only) + * have default value “0x00” after power up." + * "All registers require segment for access. + * Segment is defined in address F0." * */ void zeroAll() { - uint8_t y = 0, - z = 0, - w = 0; + // this goes into resetAllOffline() // turn processing units off first - writeOneByte(0xF0, 0); - writeOneByte(0x46, 0x00); // reset controls 1 - writeOneByte(0x47, 0x00); // reset controls 2 + // writeOneByte(0xF0, 0); + // writeOneByte(0x46, 0x00); // reset controls 1 + // writeOneByte(0x47, 0x00); // reset controls 2 + + // zero out entire register space = (6 segments * 255 bytes) + uint8_t y = 0; + uint8_t z = 0; - // zero out entire register space while (y < 6) { - writeOneByte(0xF0, (uint8_t)y); + writeOneByte(0xF0, y); while (z < 16) { + // while(w < 16) { + // bank[w] = 0; + // // exceptions + // // if (y == 5 && z == 0 && w == 2) { + // // bank[w] = 0x51; // 5_02 + // //} + // // if (y == 5 && z == 5 && w == 6) { + // // bank[w] = 0x01; // 5_56 + // //} + // // if (y == 5 && z == 5 && w == 7) { + // // bank[w] = 0xC0; // 5_57 + // //} + // w++; + // } uint8_t bank[16]; - while(w < 16) { - bank[w] = 0; - // exceptions - // if (y == 5 && z == 0 && w == 2) { - // bank[w] = 0x51; // 5_02 - //} - // if (y == 5 && z == 5 && w == 6) { - // bank[w] = 0x01; // 5_56 - //} - // if (y == 5 && z == 5 && w == 7) { - // bank[w] = 0xC0; // 5_57 - //} - w++; - } + memset(bank, 0, 16); writeBytes(z * 16, bank, 16); z++; } + z = 0; y++; } } @@ -2156,17 +2163,17 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) FrameSync::cleanup(); // should only be possible if previously was in RGBHV bypass, then hit a manual preset switch - if (rto->videoStandardInput == 15) { - rto->videoStandardInput = 0; + if (rto.videoStandardInput == 15) { + rto.videoStandardInput = 0; } - // rto->outModeHdBypass = 0; // the default at this stage + // rto.outModeHdBypass = 0; // the default at this stage if (GBS::ADC_INPUT_SEL::read() == 0) { - // if (rto->inputIsYPbPr == 0) _WSN(F("rto->inputIsYPbPr was 0, fixing to 1"); - rto->inputIsYPbPr = 1; // new: update the var here, allow manual preset loads + // if (rto.inputIsYPbPr == 0) _WSN(F("rto.inputIsYPbPr was 0, fixing to 1"); + rto.inputIsYPbPr = 1; // new: update the var here, allow manual preset loads } else { - // if (rto->inputIsYPbPr == 1) _WSN(F("rto->inputIsYPbPr was 1, fixing to 0"); - rto->inputIsYPbPr = 0; + // if (rto.inputIsYPbPr == 1) _WSN(F("rto.inputIsYPbPr was 1, fixing to 0"); + rto.inputIsYPbPr = 0; } uint8_t reset46 = GBS::RESET_CONTROL_0x46::read(); // for keeping these as they are now @@ -2180,7 +2187,7 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) for (int x = 0; x <= 15; x++) { if (j == 0 && x == 4) { // keep DAC off - if (rto->useHdmiSyncFix) { + if (rto.useHdmiSyncFix) { bank[x] = pgm_read_byte(programArray + index) & ~(1 << 0); } else { bank[x] = pgm_read_byte(programArray + index); @@ -2191,7 +2198,7 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) bank[x] = reset47; } else if (j == 0 && x == 9) { // keep sync output off - if (rto->useHdmiSyncFix) { + if (rto.useHdmiSyncFix) { bank[x] = pgm_read_byte(programArray + index) | (1 << 2); } else { bank[x] = pgm_read_byte(programArray + index); @@ -2221,12 +2228,12 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) } if (!skipMDSection) { loadPresetMdSection(); - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) GBS::MD_SEL_VGA60::write(0); // EDTV possible else GBS::MD_SEL_VGA60::write(1); // VGA 640x480 more likely - GBS::MD_HD1250P_CNTRL::write(rto->medResLineCount); // patch med res support + GBS::MD_HD1250P_CNTRL::write(rto.medResLineCount); // patch med res support } break; case 2: @@ -2235,7 +2242,7 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) case 3: for (int j = 0; j <= 7; j++) { // 8 times copyBank(bank, programArray, &index); - // if (rto->useHdmiSyncFix) { + // if (rto.useHdmiSyncFix) { // if (j == 0) { // bank[0] = bank[0] | (1 << 0); // 3_00 0 sync lock // } @@ -2261,13 +2268,13 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) for (int x = 0; x <= 15; x++) { bank[x] = pgm_read_byte(programArray + index); if (index == 322) { // s5_02 bit 6+7 = input selector (only bit 6 is relevant) - if (rto->inputIsYPbPr) + if (rto.inputIsYPbPr) bitClear(bank[x], 6); else bitSet(bank[x], 6); } if (index == 323) { // s5_03 set clamps according to input channel - if (rto->inputIsYPbPr) { + if (rto.inputIsYPbPr) { bitClear(bank[x], 2); // G bottom clamp bitSet(bank[x], 1); // R mid clamp bitSet(bank[x], 3); // B mid clamp @@ -2306,9 +2313,9 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) } // scaling RGBHV mode - if (uopt->preferScalingRgbhv && rto->isValidForScalingRGBHV) { + if (uopt.preferScalingRgbhv && rto.isValidForScalingRGBHV) { // GBS::GBS_OPTION_SCALING_RGBHV::write(1); - rto->videoStandardInput = 3; + rto.videoStandardInput = 3; } } @@ -2319,18 +2326,18 @@ void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection) void activeFrameTimeLockInitialSteps() { // skip if using external clock gen - if (rto->extClockGenDetected) { + if (rto.extClockGenDetected) { _WSN(F("Active FrameTime Lock enabled, adjusting external clock gen frequency")); return; } // skip when out mode = bypass - // if (rto->presetID != OutputHdBypass && rto->presetID != OutputRGBHVBypass) { - if (uopt->resolutionID != OutputHdBypass && uopt->resolutionID != OutputRGBHVBypass) { + // if (rto.presetID != OutputHdBypass && rto.presetID != OutputRGBHVBypass) { + if (uopt.resolutionID != OutputHdBypass && uopt.resolutionID != OutputRGBHVBypass) { _WS(F("Active FrameTime Lock enabled, disable if display unstable or stays blank! Method: ")); - if (uopt->frameTimeLockMethod == 0) { + if (uopt.frameTimeLockMethod == 0) { _WSN(F("0 (vtotal + VSST)")); } - if (uopt->frameTimeLockMethod == 1) { + if (uopt.frameTimeLockMethod == 1) { _WSN(F("1 (vtotal only)")); } if (GBS::VDS_VS_ST::read() == 0) { @@ -2367,7 +2374,7 @@ void applyYuvPatches() GBS::IF_MATRIX_BYPS::write(1); // if (GBS::GBS_PRESET_CUSTOM::read() == 0) { - if (!rto->isCustomPreset) { + if (!rto.isCustomPreset) { // colors GBS::VDS_Y_GAIN::write(0x80); // 3_25 GBS::VDS_UCOS_GAIN::write(0x1c); // 3_26 @@ -2375,7 +2382,7 @@ void applyYuvPatches() GBS::VDS_Y_OFST::write(0xFE); GBS::VDS_U_OFST::write(0x03); GBS::VDS_V_OFST::write(0x03); - if (rto->videoStandardInput >= 5 && rto->videoStandardInput <= 7) { + if (rto.videoStandardInput >= 5 && rto.videoStandardInput <= 7) { // todo: Rec. 709 (vs Rec. 601 used normally // needs this on VDS and HDBypass } @@ -2386,7 +2393,7 @@ void applyYuvPatches() // GBS::VDS_U_OFST::write(0x36); //3_3b // GBS::VDS_V_OFST::write(0x4d); //3_3c - if (uopt->wantOutputComponent) { + if (uopt.wantOutputComponent) { applyComponentColorMixing(); } } @@ -2398,9 +2405,9 @@ void applyYuvPatches() void OutputComponentOrVGA() { - // TODO replace with rto->isCustomPreset? + // TODO replace with rto.isCustomPreset? // bool isCustomPreset = GBS::GBS_PRESET_CUSTOM::read(); - if (uopt->wantOutputComponent) { + if (uopt.wantOutputComponent) { _WSN(F("Output Format: Component")); GBS::VDS_SYNC_LEV::write(0x80); // 0.25Vpp sync (leave more room for Y) GBS::VDS_CONVT_BYPS::write(1); // output YUV @@ -2411,8 +2418,8 @@ void OutputComponentOrVGA() GBS::OUT_SYNC_CNTRL::write(1); // H / V sync out enable } - if (!rto->isCustomPreset) { - if (rto->inputIsYPbPr == true) { + if (!rto.isCustomPreset) { + if (rto.inputIsYPbPr == true) { applyYuvPatches(); } else { applyRGBPatches(); @@ -2435,12 +2442,12 @@ void toggleIfAutoOffset() GBS::IF_AUTO_OFST_EN::write(1); GBS::IF_AUTO_OFST_PRD::write(0); // 0 = by line, 1 = by frame } else { - if (adco->r_off != 0 && adco->g_off != 0 && adco->b_off != 0) { - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_BOFCTRL::write(adco->b_off); + if (adco.r_off != 0 && adco.g_off != 0 && adco.b_off != 0) { + GBS::ADC_ROFCTRL::write(adco.r_off); + GBS::ADC_GOFCTRL::write(adco.g_off); + GBS::ADC_BOFCTRL::write(adco.b_off); } - // adco->r_off = 0: auto calibration on boot failed, leave at current values + // adco.r_off = 0: auto calibration on boot failed, leave at current values GBS::IF_AUTO_OFST_EN::write(0); GBS::IF_AUTO_OFST_PRD::write(0); // 0 = by line, 1 = by frame } @@ -2455,10 +2462,10 @@ void setAdcParametersGainAndOffset() GBS::ADC_ROFCTRL::write(0x40); GBS::ADC_GOFCTRL::write(0x40); GBS::ADC_BOFCTRL::write(0x40); - // Do not call setAdcGain() and overwrite adco->r_gain. This function should + // Do not call setAdcGain() and overwrite adco.r_gain. This function should // only be called during startup, or during doPostPresetLoadSteps(), and if - // `uopt->enableAutoGain == 1` then doPostPresetLoadSteps() will revert - // these writes with `adco->r_gain`. + // `uopt.enableAutoGain == 1` then doPostPresetLoadSteps() will revert + // these writes with `adco.r_gain`. GBS::ADC_RGCTRL::write(0x7B); GBS::ADC_GGCTRL::write(0x7B); GBS::ADC_BGCTRL::write(0x7B); @@ -2479,7 +2486,7 @@ void updateHVSyncEdge() } uint8_t syncStatus = GBS::STATUS_16::read(); - if (rto->syncTypeCsync) { + if (rto.syncTypeCsync) { // sog check, only check H if ((syncStatus & 0x02) != 0x02) return; @@ -2522,7 +2529,7 @@ void updateHVSyncEdge() } // VS check, but only necessary for separate sync (CS should have VS always active low) - if (rto->syncTypeCsync == false) { + if (rto.syncTypeCsync == false) { if ((syncStatus & 0x08) != 0x08) // if !vs active { _WSN(F("VS can't detect sync edge")); @@ -2560,51 +2567,53 @@ void updateHVSyncEdge() * thus "see" a source. It is possible to run in low power mode. Function * should not further nest, so it can be called in syncwatcher * + * before making changes, see: checkBoardPower() + * + * in operation: t5t04t1 for 10% lower power on ADC + * also: s0s40s1c for 5% (lower memclock of 108mhz) + * for some reason: t0t45t2 t0t45t4 (enable SDAC, output max voltage) 5% lower done in presets + * t0t4ft4 clock out should be off + * s4s01s20 (was 30) faster latency, unstable at 108mhz + * both phase controls off saves some power 506ma > 493ma + * oversample ratio can save 10% at 1x + * t3t24t3 VDS_TAP6_BYPS on can save 2% */ void goLowPowerWithInputDetection() { - // in operation: t5t04t1 for 10% lower power on ADC - // also: s0s40s1c for 5% (lower memclock of 108mhz) - // for some reason: t0t45t2 t0t45t4 (enable SDAC, output max voltage) 5% lower done in presets - // t0t4ft4 clock out should be off - // s4s01s20 (was 30) faster latency // unstable at 108mhz - // both phase controls off saves some power 506ma > 493ma - // oversample ratio can save 10% at 1x - // t3t24t3 VDS_TAP6_BYPS on can save 2% GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD GBS::DAC_RGBS_PWDNZ::write(0); // direct disableDAC() // zeroAll(); _DBGN(F("(!) reset runtime parameters while going LowPower")); - setResetParameters(); // includes rto->videoStandardInput = 0 + setResetParameters(); // includes rto.videoStandardInput = 0 prepareSyncProcessor(); delay(100); - rto->isInLowPowerMode = true; + rto.isInLowPowerMode = true; _DBGN(F("Scanning inputs for sources ...")); LEDOFF; } /** - * @brief + * @brief Intents to adjust the Sync-On-Green level * */ void optimizeSogLevel() { - if (rto->boardHasPower == false) // checkBoardPower is too invasive now + if (rto.boardHasPower == false) // checkBoardPower is too invasive now { - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 13; return; } - if (rto->videoStandardInput == 15 || GBS::SP_SOG_MODE::read() != 1 || rto->syncTypeCsync == false) { - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; + if (rto.videoStandardInput == 15 || GBS::SP_SOG_MODE::read() != 1 || rto.syncTypeCsync == false) { + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 13; return; } - if (rto->inputIsYPbPr) { - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 14; + if (rto.inputIsYPbPr) { + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 14; } else { - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG = 13; // similar to yuv, allow variations + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 13; // similar to yuv, allow variations } - setAndUpdateSogLevel(rto->currentLevelSOG); + setAndUpdateSogLevel(rto.currentLevelSOG); uint8_t debug_backup = GBS::TEST_BUS_SEL::read(); uint8_t debug_backup_SP = GBS::TEST_BUS_SP_SEL::read(); @@ -2647,7 +2656,7 @@ void optimizeSogLevel() } } if (syncGoodCounter >= 49) { - // _WS(F("OK @SOG ")); _WSN(rto->currentLevelSOG); printInfo(); + // _WS(F("OK @SOG ")); _WSN(rto.currentLevelSOG); printInfo(); break; // found, exit } else { // _WS(F(" inner test failed syncGoodCounter: "); _WSN(syncGoodCounter)); @@ -2659,21 +2668,21 @@ void optimizeSogLevel() // _WS(F("outer test failed syncGoodCounter: ")); _WSN(syncGoodCounter); } - if (rto->currentLevelSOG >= 2) { - rto->currentLevelSOG -= 1; - setAndUpdateSogLevel(rto->currentLevelSOG); + if (rto.currentLevelSOG >= 2) { + rto.currentLevelSOG -= 1; + setAndUpdateSogLevel(rto.currentLevelSOG); delay(8); // time for sog to settle } else { - rto->currentLevelSOG = 13; // leave at default level - setAndUpdateSogLevel(rto->currentLevelSOG); + rto.currentLevelSOG = 13; // leave at default level + setAndUpdateSogLevel(rto.currentLevelSOG); delay(8); break; // break and exit } } - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG; - if (rto->thisSourceMaxLevelSOG == 0) { - rto->thisSourceMaxLevelSOG = 1; // fail safe + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG; + if (rto.thisSourceMaxLevelSOG == 0) { + rto.thisSourceMaxLevelSOG = 1; // fail safe } if (debug_backup != 0xa) { @@ -2693,8 +2702,8 @@ void resetModeDetect() GBS::SFTRST_MODE_RSTZ::write(0); delay(1); // needed GBS::SFTRST_MODE_RSTZ::write(1); - // rto->clampPositionIsSet = false; - // rto->coastPositionIsSet = false; + // rto.clampPositionIsSet = false; + // rto.coastPositionIsSet = false; } /** @@ -2773,9 +2782,9 @@ void shiftHorizontalRight() // uint16_t IF_HB_SP2 = GBS::IF_HB_SP2::read() + amount; // uint16_t PLLAD_MD = GBS::PLLAD_MD::read(); -// if (rto->videoStandardInput <= 2) { +// if (rto.videoStandardInput <= 2) { // GBS::IF_HSYNC_RST::write(PLLAD_MD / 2); // input line length from pll div -// } else if (rto->videoStandardInput <= 7) { +// } else if (rto.videoStandardInput <= 7) { // GBS::IF_HSYNC_RST::write(PLLAD_MD); // } // uint16_t IF_HSYNC_RST = GBS::IF_HSYNC_RST::read(); @@ -2810,9 +2819,9 @@ void shiftHorizontalRight() // int16_t IF_HB_SP2 = GBS::IF_HB_SP2::read() - amount; // uint16_t PLLAD_MD = GBS::PLLAD_MD::read(); -// if (rto->videoStandardInput <= 2) { +// if (rto.videoStandardInput <= 2) { // GBS::IF_HSYNC_RST::write(PLLAD_MD / 2); // input line length from pll div -// } else if (rto->videoStandardInput <= 7) { +// } else if (rto.videoStandardInput <= 7) { // GBS::IF_HSYNC_RST::write(PLLAD_MD); // } // int16_t IF_HSYNC_RST = GBS::IF_HSYNC_RST::read(); @@ -2961,8 +2970,8 @@ void scaleHorizontal(uint16_t amountToScale, bool subtracting) */ void moveHS(uint16_t amountToAdd, bool subtracting) { - // if (rto->outModeHdBypass) { - if (uopt->resolutionID == OutputHdBypass) { + // if (rto.outModeHdBypass) { + if (uopt.resolutionID == OutputHdBypass) { uint16_t SP_CS_HS_ST = GBS::SP_CS_HS_ST::read(); uint16_t SP_CS_HS_SP = GBS::SP_CS_HS_SP::read(); uint16_t htotal = GBS::HD_HSYNC_RST::read(); @@ -3216,11 +3225,11 @@ void shiftVertical(uint16_t amountToAdd, bool subtracting) void shiftVerticalUpIF() { // -4 to allow variance in source line count - uint8_t offset = rto->videoStandardInput == 2 ? 4 : 1; + uint8_t offset = rto.videoStandardInput == 2 ? 4 : 1; uint16_t sourceLines = GBS::VPERIOD_IF::read() - offset; // add an override for sourceLines, in case where the IF data is not available - // if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { - if (uopt->preferScalingRgbhv && rto->videoStandardInput == 14) { + // if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto.videoStandardInput == 14) { + if (uopt.preferScalingRgbhv && rto.videoStandardInput == 14) { sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); } int16_t stop = GBS::IF_VB_SP::read(); @@ -3243,11 +3252,11 @@ void shiftVerticalUpIF() */ void shiftVerticalDownIF() { - uint8_t offset = rto->videoStandardInput == 2 ? 4 : 1; + uint8_t offset = rto.videoStandardInput == 2 ? 4 : 1; uint16_t sourceLines = GBS::VPERIOD_IF::read() - offset; // add an override for sourceLines, in case where the IF data is not available - // if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto->videoStandardInput == 14) { - if (uopt->preferScalingRgbhv && rto->videoStandardInput == 14) { + // if ((GBS::GBS_OPTION_SCALING_RGBHV::read() == 1) && rto.videoStandardInput == 14) { + if (uopt.preferScalingRgbhv && rto.videoStandardInput == 14) { sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); } @@ -3272,8 +3281,8 @@ void shiftVerticalDownIF() */ void setHSyncStartPosition(uint16_t value) { - // if (rto->outModeHdBypass) { - if (uopt->resolutionID == OutputHdBypass) { + // if (rto.outModeHdBypass) { + if (uopt.resolutionID == OutputHdBypass) { // GBS::HD_HS_ST::write(value); GBS::SP_CS_HS_ST::write(value); } else { @@ -3288,8 +3297,8 @@ void setHSyncStartPosition(uint16_t value) */ void setHSyncStopPosition(uint16_t value) { - // if (rto->outModeHdBypass) { - if (uopt->resolutionID == OutputHdBypass) { + // if (rto.outModeHdBypass) { + if (uopt.resolutionID == OutputHdBypass) { // GBS::HD_HS_SP::write(value); GBS::SP_CS_HS_SP::write(value); } else { @@ -3492,18 +3501,18 @@ void set_vtotal(uint16_t vtotal) */ // void setIfHblankParameters() // { -// if (!rto->outModeHdBypass) { +// if (!rto.outModeHdBypass) { // uint16_t pll_divider = GBS::PLLAD_MD::read(); // // if line doubling (PAL, NTSC), div 2 + a couple pixels // GBS::IF_HSYNC_RST::write(((pll_divider >> 1) + 13) & 0xfffe); // 1_0e // GBS::IF_LINE_SP::write(GBS::IF_HSYNC_RST::read() + 1); // 1_22 -// if (rto->presetID == 0x05) { +// if (rto.presetID == 0x05) { // // override for 1080p manually for now (pll_divider alone isn't correct :/) // GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() + 32); // GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() + 32); // } -// if (rto->presetID == 0x15) { +// if (rto.presetID == 0x15) { // GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() + 20); // GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() + 20); // } @@ -3524,7 +3533,7 @@ void set_vtotal(uint16_t vtotal) // GBS::IF_HB_ST2::write(0x420); // } -// if (rto->presetID == 0x05 || rto->presetID == 0x15) { +// if (rto.presetID == 0x05 || rto.presetID == 0x15) { // // override 1_1a for 1080p manually for now (pll_divider alone isn't correct :/) // GBS::IF_HB_SP2::write(0x2A); // } @@ -3590,7 +3599,7 @@ bool getSyncPresent() */ void advancePhase() { - rto->phaseADC = (rto->phaseADC + 1) & 0x1f; + rto.phaseADC = (rto.phaseADC + 1) & 0x1f; setAndLatchPhaseADC(); } @@ -3612,8 +3621,8 @@ void advancePhase() */ void updateCoastPosition(bool autoCoast) { - if (((rto->videoStandardInput == 0) || (rto->videoStandardInput > 14)) || - !rto->boardHasPower || rto->sourceDisconnected) { + if (((rto.videoStandardInput == 0) || (rto.videoStandardInput > 14)) || + !rto.boardHasPower || rto.sourceDisconnected) { return; } @@ -3649,12 +3658,12 @@ void updateCoastPosition(bool autoCoast) _WSN(F(" (debug) updateCoastPosition: low res, low hz")); accInHlength = 2000; // usually need to lower charge pump. todo: write better check - if (rto->syncTypeCsync && rto->videoStandardInput > 0 && rto->videoStandardInput <= 4) { + if (rto.syncTypeCsync && rto.videoStandardInput > 0 && rto.videoStandardInput <= 4) { if (GBS::PLLAD_ICP::read() >= 5 && GBS::PLLAD_FS::read() == 1) { GBS::PLLAD_ICP::write(5); GBS::PLLAD_FS::write(0); latchPLLAD(); - rto->phaseIsSet = 0; + rto.phaseIsSet = 0; } } } @@ -3683,7 +3692,7 @@ void updateCoastPosition(bool autoCoast) // GBS::SP_H_CST_SP::write((uint16_t)(accInHlength * 0.7383f)); // ~0x4f0, before sync GBS::SP_HCST_AUTO_EN::write(0); } - rto->coastPositionIsSet = 1; + rto.coastPositionIsSet = 1; /*_WS("coast ST: "); _WS("0x"); _WSF("0x%04X", GBS::SP_H_CST_ST::read()); _WS(", "); @@ -3699,7 +3708,7 @@ void updateCoastPosition(bool autoCoast) */ void updateClampPosition() { - if ((rto->videoStandardInput == 0) || !rto->boardHasPower || rto->sourceDisconnected) { + if ((rto.videoStandardInput == 0) || !rto.boardHasPower || rto.sourceDisconnected) { return; } // this is required especially on mode changes with ypbpr @@ -3707,7 +3716,7 @@ void updateClampPosition() return; } - if (rto->inputIsYPbPr) { + if (rto.inputIsYPbPr) { GBS::SP_CLAMP_MANUAL::write(0); } else { GBS::SP_CLAMP_MANUAL::write(1); // no auto clamp for RGB @@ -3721,12 +3730,12 @@ void updateClampPosition() uint32_t accInHlength = 0; uint16_t prevInHlength = 0; uint16_t thisInHlength = 0; - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) prevInHlength = GBS::HPERIOD_IF::read(); else prevInHlength = GBS::STATUS_SYNC_PROC_HTOTAL::read(); for (uint8_t i = 0; i < 16; i++) { - if (rto->syncTypeCsync) + if (rto.syncTypeCsync) thisInHlength = GBS::HPERIOD_IF::read(); else thisInHlength = GBS::STATUS_SYNC_PROC_HTOTAL::read(); @@ -3754,20 +3763,20 @@ void updateClampPosition() uint16_t oldClampST = GBS::SP_CS_CLP_ST::read(); uint16_t oldClampSP = GBS::SP_CS_CLP_SP::read(); - float multiSt = rto->syncTypeCsync == 1 ? 0.032f : 0.010f; - float multiSp = rto->syncTypeCsync == 1 ? 0.174f : 0.058f; + float multiSt = rto.syncTypeCsync == 1 ? 0.032f : 0.010f; + float multiSp = rto.syncTypeCsync == 1 ? 0.174f : 0.058f; uint16_t start = 1 + (accInHlength * multiSt); // HPERIOD_IF: *0.04 seems good uint16_t stop = 2 + (accInHlength * multiSp); // HPERIOD_IF: *0.178 starts to creep into some EDTV modes - if (rto->inputIsYPbPr) { + if (rto.inputIsYPbPr) { // YUV: // ST shift forward to pass blacker than black HSync, sog: min * 0.08 - multiSt = rto->syncTypeCsync == 1 ? 0.089f : 0.032f; + multiSt = rto.syncTypeCsync == 1 ? 0.089f : 0.032f; start = 1 + (accInHlength * multiSt); // new: HDBypass rewrite to sync to falling HS edge: move clamp position forward // RGB can stay the same for now (clamp will start on sync pulse, a benefit in RGB - // if (rto->outModeHdBypass) { - if (uopt->resolutionID == OutputHdBypass) { + // if (rto.outModeHdBypass) { + if (uopt.resolutionID == OutputHdBypass) { if (videoStandardInputIsPalNtscSd()) { start += 0x60; stop += 0x60; @@ -3790,7 +3799,7 @@ void updateClampPosition() _WS(" / "); _WSN(accInHlength);*/ } - rto->clampPositionIsSet = true; + rto.clampPositionIsSet = true; } /** @@ -3799,7 +3808,7 @@ void updateClampPosition() */ // void fastSogAdjust() // { -// if (rto->noSyncCounter <= 5) { +// if (rto.noSyncCounter <= 5) { // uint8_t debug_backup = GBS::TEST_BUS_SEL::read(); // uint8_t debug_backup_SP = GBS::TEST_BUS_SP_SEL::read(); // if (debug_backup != 0xa) { @@ -3811,15 +3820,15 @@ void updateClampPosition() // if ((GBS::TEST_BUS_2F::read() & 0x05) != 0x05) { // while ((GBS::TEST_BUS_2F::read() & 0x05) != 0x05) { -// if (rto->currentLevelSOG >= 4) { -// rto->currentLevelSOG -= 2; +// if (rto.currentLevelSOG >= 4) { +// rto.currentLevelSOG -= 2; // } else { -// rto->currentLevelSOG = 13; -// setAndUpdateSogLevel(rto->currentLevelSOG); +// rto.currentLevelSOG = 13; +// setAndUpdateSogLevel(rto.currentLevelSOG); // delay(40); // break; // abort / restart next round // } -// setAndUpdateSogLevel(rto->currentLevelSOG); +// setAndUpdateSogLevel(rto.currentLevelSOG); // delay(28); // 4 // } // delay(10); @@ -3849,7 +3858,7 @@ uint32_t getPllRate() if (testBusSelBackup != 0xa) { GBS::TEST_BUS_SEL::write(0xa); } - if (rto->syncTypeCsync) { + if (rto.syncTypeCsync) { if (spBusSelBackup != 0x6b) GBS::TEST_BUS_SP_SEL::write(0x6b); } else { @@ -3884,7 +3893,7 @@ uint32_t getPllRate() */ void runSyncWatcher() { - if (!rto->boardHasPower) { + if (!rto.boardHasPower) { return; } @@ -3901,8 +3910,8 @@ void runSyncWatcher() uint8_t detectedVideoMode = getVideoMode(); bool status16SpHsStable = getStatus16SpHsStable(); - // if (rto->outModeHdBypass && status16SpHsStable) { - if (uopt->resolutionID == OutputHdBypass && status16SpHsStable) { + // if (rto.outModeHdBypass && status16SpHsStable) { + if (uopt.resolutionID == OutputHdBypass && status16SpHsStable) { if (videoStandardInputIsPalNtscSd()) { if (millis() - lastLineCountMeasure > 765) { thisStableLineCount = GBS::STATUS_SYNC_PROC_VTOTAL::read(); @@ -3941,7 +3950,7 @@ void runSyncWatcher() } } - if (rto->videoStandardInput == 13) { // using flaky graphic modes + if (rto.videoStandardInput == 13) { // using flaky graphic modes if (detectedVideoMode == 0) { if (GBS::STATUS_INT_SOG_BAD::read() == 0) { detectedVideoMode = 13; // then keep it @@ -3949,7 +3958,7 @@ void runSyncWatcher() } } - if (rto->syncTypeCsync && !rto->inputIsYPbPr && (newVideoModeCounter == 0)) { + if (rto.syncTypeCsync && !rto.inputIsYPbPr && (newVideoModeCounter == 0)) { // look for SOG instability if (GBS::STATUS_INT_SOG_BAD::read() == 1 || GBS::STATUS_INT_SOG_SW::read() == 1) { resetInterruptSogSwitchBit(); @@ -3966,7 +3975,7 @@ void runSyncWatcher() if (GBS::STATUS_INT_SOG_BAD::read() == 1 || GBS::STATUS_SYNC_PROC_HSACT::read() == 0) { resetInterruptSogBadBit(); uint16_t hlowStart = GBS::STATUS_SYNC_PROC_HLOW_LEN::read(); - if (rto->videoStandardInput == 0) + if (rto.videoStandardInput == 0) hlowStart = 777; // fix initial state no HLOW_LEN for (int a = 0; a < 20; a++) { if (GBS::STATUS_SYNC_PROC_HLOW_LEN::read() != hlowStart) { @@ -3986,9 +3995,9 @@ void runSyncWatcher() } if (badHsActive >= 17) { - if (rto->currentLevelSOG >= 2) { - rto->currentLevelSOG -= 1; - setAndUpdateSogLevel(rto->currentLevelSOG); + if (rto.currentLevelSOG >= 2) { + rto.currentLevelSOG -= 1; + setAndUpdateSogLevel(rto.currentLevelSOG); delay(30); updateStopPositionDynamic(false); badHsActive = 0; @@ -4002,59 +4011,59 @@ void runSyncWatcher() } } else if (lastAdjustWasInActiveWindow) { lastAdjustWasInActiveWindow = 0; - if (rto->currentLevelSOG >= 8) { - rto->currentLevelSOG -= 1; - setAndUpdateSogLevel(rto->currentLevelSOG); + if (rto.currentLevelSOG >= 8) { + rto.currentLevelSOG -= 1; + setAndUpdateSogLevel(rto.currentLevelSOG); delay(30); updateStopPositionDynamic(false); badHsActive = 0; - rto->phaseIsSet = 0; + rto.phaseIsSet = 0; } } } - if ((detectedVideoMode == 0 || !status16SpHsStable) && rto->videoStandardInput != 15) { - rto->noSyncCounter++; - rto->continousStableCounter = 0; + if ((detectedVideoMode == 0 || !status16SpHsStable) && rto.videoStandardInput != 15) { + rto.noSyncCounter++; + rto.continousStableCounter = 0; lastVsyncLock = millis(); // best reset this - if (rto->noSyncCounter == 1) { + if (rto.noSyncCounter == 1) { freezeVideo(); return; // do nothing else } - rto->phaseIsSet = 0; + rto.phaseIsSet = 0; - if (rto->noSyncCounter <= 3 || GBS::STATUS_SYNC_PROC_HSACT::read() == 0) { + if (rto.noSyncCounter <= 3 || GBS::STATUS_SYNC_PROC_HSACT::read() == 0) { freezeVideo(); } if (newVideoModeCounter == 0) { LEDOFF; // LEDOFF on sync loss - if (rto->noSyncCounter == 2) { // this usually repeats + if (rto.noSyncCounter == 2) { // this usually repeats // printInfo(); printInfo(); _WSN(); - // rto->printInfos = 0; + // rto.printInfos = 0; // if ((millis() - lastSyncDrop) > 1500) { // minimum space between runs - // if (rto->printInfos == false) { + // if (rto.printInfos == false) { // _DBGN(F(".")); // } // } else { - // if (rto->printInfos == false) { + // if (rto.printInfos == false) { // _DBGN(F(".")); // } // } // if sog is lowest, adjust up - if (rto->currentLevelSOG <= 1 && videoStandardInputIsPalNtscSd()) { - rto->currentLevelSOG += 1; - setAndUpdateSogLevel(rto->currentLevelSOG); + if (rto.currentLevelSOG <= 1 && videoStandardInputIsPalNtscSd()) { + rto.currentLevelSOG += 1; + setAndUpdateSogLevel(rto.currentLevelSOG); delay(30); } // lastSyncDrop = millis(); // restart timer } } - if (rto->noSyncCounter == 8) { + if (rto.noSyncCounter == 8) { GBS::SP_H_CST_ST::write(0x10); GBS::SP_H_CST_SP::write(0x100); // GBS::SP_H_PROTECT::write(1); // at noSyncCounter = 32 will alternate on / off @@ -4068,15 +4077,15 @@ void runSyncWatcher() GBS::SP_H_PULSE_IGNOR::write(ignore / 2); } } - rto->coastPositionIsSet = 0; + rto.coastPositionIsSet = 0; } - if (rto->noSyncCounter % 27 == 0) { + if (rto.noSyncCounter % 27 == 0) { // the * check needs to be first (go before auto sog level) to support SD > HDTV detection updateStopPositionDynamic(true); } - if (rto->noSyncCounter % 32 == 0) { + if (rto.noSyncCounter % 32 == 0) { if (GBS::STATUS_SYNC_PROC_HSACT::read() == 1) { unfreezeVideo(); } else { @@ -4084,25 +4093,25 @@ void runSyncWatcher() } } - if (rto->inputIsYPbPr && (rto->noSyncCounter == 34)) { + if (rto.inputIsYPbPr && (rto.noSyncCounter == 34)) { GBS::SP_NO_CLAMP_REG::write(1); // unlock clamp - rto->clampPositionIsSet = false; + rto.clampPositionIsSet = false; } - if (rto->noSyncCounter == 38) { + if (rto.noSyncCounter == 38) { nudgeMD(); } - if (rto->syncTypeCsync) { - if (rto->noSyncCounter > 47) { - if (rto->noSyncCounter % 16 == 0) { + if (rto.syncTypeCsync) { + if (rto.noSyncCounter > 47) { + if (rto.noSyncCounter % 16 == 0) { GBS::SP_H_PROTECT::write(!GBS::SP_H_PROTECT::read()); } } } - if (rto->noSyncCounter % 150 == 0) { - if (rto->noSyncCounter == 150 || rto->noSyncCounter % 900 == 0) { + if (rto.noSyncCounter % 150 == 0) { + if (rto.noSyncCounter == 150 || rto.noSyncCounter % 900 == 0) { _DBGN(F("\nno signal")); // check whether discrete VSync is present. if so, need to go to input detect uint8_t extSyncBackup = GBS::SP_EXT_SYNC_SEL::read(); @@ -4114,7 +4123,7 @@ void runSyncWatcher() if (GBS::STATUS_SYNC_PROC_VSACT::read() == 1) { delay(10); if (GBS::STATUS_SYNC_PROC_VSACT::read() == 1) { - rto->noSyncCounter = 0x07fe; + rto.noSyncCounter = 0x07fe; } } GBS::SP_EXT_SYNC_SEL::write(extSyncBackup); @@ -4139,17 +4148,17 @@ void runSyncWatcher() for (int a = 0; a < 128; a++) { if (GBS::STATUS_SYNC_PROC_HLOW_LEN::read() != hlowStart) { // source still there - if (rto->noSyncCounter % 450 == 0) { - rto->currentLevelSOG = 0; // worst case, sometimes necessary, will be unstable but at least detect - setAndUpdateSogLevel(rto->currentLevelSOG); + if (rto.noSyncCounter % 450 == 0) { + rto.currentLevelSOG = 0; // worst case, sometimes necessary, will be unstable but at least detect + setAndUpdateSogLevel(rto.currentLevelSOG); } else { optimizeSogLevel(); } break; } else if (a == 127) { // set sog to be able to see something - rto->currentLevelSOG = 5; - setAndUpdateSogLevel(rto->currentLevelSOG); + rto.currentLevelSOG = 5; + setAndUpdateSogLevel(rto.currentLevelSOG); } delay(0); } @@ -4161,7 +4170,7 @@ void runSyncWatcher() } // long no signal time, check other input - if (rto->noSyncCounter % 413 == 0) { + if (rto.noSyncCounter % 413 == 0) { if (GBS::ADC_INPUT_SEL::read() == 1) { GBS::ADC_INPUT_SEL::write(0); } else { @@ -4171,7 +4180,7 @@ void runSyncWatcher() unsigned long timeout = millis(); while (millis() - timeout <= 210) { if (getStatus16SpHsStable()) { - rto->noSyncCounter = 0x07fe; // will cause a return + rto.noSyncCounter = 0x07fe; // will cause a return break; } // wifiLoop(0); @@ -4192,14 +4201,14 @@ void runSyncWatcher() } // if format changed to valid, potentially new video mode - if (((detectedVideoMode != 0 && detectedVideoMode != rto->videoStandardInput) || - (detectedVideoMode != 0 && rto->videoStandardInput == 0)) && - rto->videoStandardInput != 15) + if (((detectedVideoMode != 0 && detectedVideoMode != rto.videoStandardInput) || + (detectedVideoMode != 0 && rto.videoStandardInput == 0)) && + rto.videoStandardInput != 15) { // before thoroughly checking for a mode change, watch format via newVideoModeCounter if (newVideoModeCounter < 255) { newVideoModeCounter++; - rto->continousStableCounter = 0; // usually already 0, but occasionally not + rto.continousStableCounter = 0; // usually already 0, but occasionally not #if defined(DEBUG_CODE_ENABLED) if (newVideoModeCounter > 1) { // help debug a few commits worth // if (newVideoModeCounter == 2) { @@ -4211,7 +4220,7 @@ void runSyncWatcher() freezeVideo(); GBS::SP_H_CST_ST::write(0x10); GBS::SP_H_CST_SP::write(0x100); - rto->coastPositionIsSet = 0; + rto.coastPositionIsSet = 0; delay(10); if (getVideoMode() == 0) { updateStopPositionDynamic(true); // check ntsc to 480p and back @@ -4235,26 +4244,26 @@ void runSyncWatcher() } if (newVideoModeCounter != 0) { // apply new mode - _WSF(PSTR(" %d (%d -> %d)\n"), vidModeReadout, rto->videoStandardInput, detectedVideoMode); - // _WS("Old: "); _WS(rto->videoStandardInput); + _WSF(PSTR(" %d (%d -> %d)\n"), vidModeReadout, rto.videoStandardInput, detectedVideoMode); + // _WS("Old: "); _WS(rto.videoStandardInput); // _WS(" New: "); _WSN(detectedVideoMode); - uopt->freezeCapture = false; + uopt.freezeCapture = false; if (GBS::SP_SOG_MODE::read() == 1) { - rto->syncTypeCsync = true; + rto.syncTypeCsync = true; } else { - rto->syncTypeCsync = false; + rto.syncTypeCsync = false; } - // bool wantPassThroughMode = uopt->presetPreference == 10; + // bool wantPassThroughMode = uopt.presetPreference == 10; bool wantPassThroughMode = utilsIsPassThroughMode(); - if (((rto->videoStandardInput == 1 || rto->videoStandardInput == 3) && (detectedVideoMode == 2 || detectedVideoMode == 4)) || - rto->videoStandardInput == 0 || - ((rto->videoStandardInput == 2 || rto->videoStandardInput == 4) && (detectedVideoMode == 1 || detectedVideoMode == 3))) { - rto->useHdmiSyncFix = 1; + if (((rto.videoStandardInput == 1 || rto.videoStandardInput == 3) && (detectedVideoMode == 2 || detectedVideoMode == 4)) || + rto.videoStandardInput == 0 || + ((rto.videoStandardInput == 2 || rto.videoStandardInput == 4) && (detectedVideoMode == 1 || detectedVideoMode == 3))) { + rto.useHdmiSyncFix = 1; _WSN(F("hdmi sync fix: yes")); } else { - rto->useHdmiSyncFix = 0; + rto.useHdmiSyncFix = 0; _WSN(F("hdmi sync fix: no")); } @@ -4262,12 +4271,12 @@ void runSyncWatcher() // needs to know the sync type for early updateclamp (set above) applyPresets(detectedVideoMode); } else { - rto->videoStandardInput = detectedVideoMode; + rto.videoStandardInput = detectedVideoMode; setOutputHdBypassMode(false); } - rto->videoStandardInput = detectedVideoMode; - rto->noSyncCounter = 0; - rto->continousStableCounter = 0; // also in postloadsteps + rto.videoStandardInput = detectedVideoMode; + rto.noSyncCounter = 0; + rto.continousStableCounter = 0; // also in postloadsteps newVideoModeCounter = 0; activeStableLineCount = 0; delay(20); // post delay @@ -4278,94 +4287,94 @@ void runSyncWatcher() _WSF(PSTR(" %d \n"), vidModeReadout); printInfo(); newVideoModeCounter = 0; - if (rto->videoStandardInput == 0) { + if (rto.videoStandardInput == 0) { // if we got here from standby mode, return there soon // but occasionally, this is a regular new mode that needs a SP parameter change to work // ie: 1080p needs longer post coast, which the syncwatcher loop applies at some point - rto->noSyncCounter = 0x05ff; // give some time in normal loop + rto.noSyncCounter = 0x05ff; // give some time in normal loop } } } - } else if (getStatus16SpHsStable() && detectedVideoMode != 0 && rto->videoStandardInput != 15 && (rto->videoStandardInput == detectedVideoMode)) { + } else if (getStatus16SpHsStable() && detectedVideoMode != 0 && rto.videoStandardInput != 15 && (rto.videoStandardInput == detectedVideoMode)) { // last used mode reappeared / stable again - if (rto->continousStableCounter < 255) { - rto->continousStableCounter++; + if (rto.continousStableCounter < 255) { + rto.continousStableCounter++; } static bool doFullRestore = 0; - if (rto->noSyncCounter >= 150) { + if (rto.noSyncCounter >= 150) { // source was gone for longer // clamp will be updated at continousStableCounter 50 - rto->coastPositionIsSet = false; - rto->phaseIsSet = false; - FrameSync::reset(uopt->frameTimeLockMethod); + rto.coastPositionIsSet = false; + rto.phaseIsSet = false; + FrameSync::reset(uopt.frameTimeLockMethod); doFullRestore = 1; _WSN(); } - rto->noSyncCounter = 0; + rto.noSyncCounter = 0; newVideoModeCounter = 0; - if (rto->continousStableCounter == 1 && !doFullRestore) { - // rto->videoIsFrozen = true; // ensures unfreeze + if (rto.continousStableCounter == 1 && !doFullRestore) { + // rto.videoIsFrozen = true; // ensures unfreeze unfreezeVideo(); } - if (rto->continousStableCounter == 2) { + if (rto.continousStableCounter == 2) { updateStopPositionDynamic(false); if (doFullRestore) { delay(20); optimizeSogLevel(); doFullRestore = 0; } - // rto->videoIsFrozen = true; // ensures unfreeze + // rto.videoIsFrozen = true; // ensures unfreeze unfreezeVideo(); // called 2nd time here to make sure } - if (rto->continousStableCounter == 4) { + if (rto.continousStableCounter == 4) { LEDON; } - if (!rto->phaseIsSet) { - if (rto->continousStableCounter >= 10 && rto->continousStableCounter < 61) { + if (!rto.phaseIsSet) { + if (rto.continousStableCounter >= 10 && rto.continousStableCounter < 61) { // added < 61 to make a window, else sources with little pll lock hammer this - if ((rto->continousStableCounter % 10) == 0) { - rto->phaseIsSet = optimizePhaseSP(); + if ((rto.continousStableCounter % 10) == 0) { + rto.phaseIsSet = optimizePhaseSP(); } } } // 5_3e 2 SP_H_COAST test - // if (rto->continousStableCounter == 11) { - // if (rto->coastPositionIsSet) { + // if (rto.continousStableCounter == 11) { + // if (rto.coastPositionIsSet) { // GBS::SP_H_COAST::write(1); // } //} - if (rto->continousStableCounter == 160) { + if (rto.continousStableCounter == 160) { resetInterruptSogBadBit(); } - if (rto->continousStableCounter == 45) { - GBS::ADC_UNUSED_67::write(0); // clear sync fix temp registers (67/68) - // rto->coastPositionIsSet = 0; // leads to a flicker - rto->clampPositionIsSet = 0; // run updateClampPosition occasionally + if (rto.continousStableCounter == 45) { + // GBS::ADC_UNUSED_67::write(0); // clear sync fix temp registers (67/68) + // rto.coastPositionIsSet = 0; // leads to a flicker + rto.clampPositionIsSet = 0; // run updateClampPosition occasionally } - if (rto->continousStableCounter % 31 == 0) { + if (rto.continousStableCounter % 31 == 0) { // new: 8 regular interval checks up until 255 updateStopPositionDynamic(false); } - if (rto->continousStableCounter >= 3) { - if ((rto->videoStandardInput == 1 || rto->videoStandardInput == 2) && - uopt->resolutionID != OutputHdBypass && rto->noSyncCounter == 0) { - // !rto->outModeHdBypass && rto->noSyncCounter == 0) { + if (rto.continousStableCounter >= 3) { + if ((rto.videoStandardInput == 1 || rto.videoStandardInput == 2) && + uopt.resolutionID != OutputHdBypass && rto.noSyncCounter == 0) { + // !rto.outModeHdBypass && rto.noSyncCounter == 0) { // deinterlacer and scanline code static uint8_t timingAdjustDelay = 0; static uint8_t oddEvenWhenArmed = 0; bool preventScanlines = 0; - if (rto->deinterlaceAutoEnabled) { + if (rto.deinterlaceAutoEnabled) { uint16_t VPERIOD_IF = GBS::VPERIOD_IF::read(); static uint8_t filteredLineCountMotionAdaptiveOn = 0, filteredLineCountMotionAdaptiveOff = 0; static uint16_t VPERIOD_IF_OLD = VPERIOD_IF; // for glitch filter @@ -4375,8 +4384,8 @@ void runSyncWatcher() preventScanlines = 1; filteredLineCountMotionAdaptiveOn = 0; filteredLineCountMotionAdaptiveOff = 0; - if (uopt->enableFrameTimeLock || rto->extClockGenDetected) { - if (uopt->deintMode == 1) { // using bob + if (uopt.enableFrameTimeLock || rto.extClockGenDetected) { + if (uopt.deintMode == 1) { // using bob timingAdjustDelay = 11; // arm timer (always) oddEvenWhenArmed = VPERIOD_IF % 2; } @@ -4389,9 +4398,9 @@ void runSyncWatcher() filteredLineCountMotionAdaptiveOff = 0; if (filteredLineCountMotionAdaptiveOn >= 2) // at least >= 2 { - if (uopt->deintMode == 0 && !rto->motionAdaptiveDeinterlaceActive) { - // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto->scanlinesEnabled - if (uopt->wantScanlines) { // don't rely on rto->scanlinesEnabled + if (uopt.deintMode == 0 && !rto.motionAdaptiveDeinterlaceActive) { + // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { // don't rely on rto.scanlinesEnabled + if (uopt.wantScanlines) { // don't rely on rto.scanlinesEnabled disableScanlines(); } enableMotionAdaptDeinterlace(); @@ -4411,7 +4420,7 @@ void runSyncWatcher() filteredLineCountMotionAdaptiveOn = 0; if (filteredLineCountMotionAdaptiveOff >= 2) // at least >= 2 { - if (uopt->deintMode == 0 && rto->motionAdaptiveDeinterlaceActive) { + if (uopt.deintMode == 0 && rto.motionAdaptiveDeinterlaceActive) { disableMotionAdaptDeinterlace(); if (timingAdjustDelay == 0) { timingAdjustDelay = 11; // arm timer only if it's not already armed @@ -4428,18 +4437,18 @@ void runSyncWatcher() VPERIOD_IF_OLD = VPERIOD_IF; // part of glitch filter - if (uopt->deintMode == 1) { // using bob - if (rto->motionAdaptiveDeinterlaceActive) { + if (uopt.deintMode == 1) { // using bob + if (rto.motionAdaptiveDeinterlaceActive) { disableMotionAdaptDeinterlace(); - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); // TODO logic! - uopt->enableFrameTimeLock = true; + uopt.enableFrameTimeLock = true; // GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); lastVsyncLock = millis(); } - if (uopt->wantScanlines) { // && !rto->scanlinesEnabled) { + if (uopt.wantScanlines) { // && !rto.scanlinesEnabled) { enableScanlines(); - // } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + // } else if (!uopt.wantScanlines && rto.scanlinesEnabled) { } else { disableScanlines(); } @@ -4454,10 +4463,10 @@ void runSyncWatcher() if ((VPERIOD_IF % 2) == oddEvenWhenArmed) { timingAdjustDelay--; if (timingAdjustDelay == 0) { - if (uopt->enableFrameTimeLock) { - FrameSync::reset(uopt->frameTimeLockMethod); + if (uopt.enableFrameTimeLock) { + FrameSync::reset(uopt.frameTimeLockMethod); // TODO logic! - uopt->enableFrameTimeLock = true; + uopt.enableFrameTimeLock = true; // GBS::GBS_RUNTIME_FTL_ADJUSTED::write(1); delay(10); lastVsyncLock = millis(); @@ -4472,11 +4481,11 @@ void runSyncWatcher() } // scanlines - // if (uopt->wantScanlines) { - // if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive && !preventScanlines) { - if (!rto->motionAdaptiveDeinterlaceActive && !preventScanlines) { + // if (uopt.wantScanlines) { + // if (!rto.scanlinesEnabled && !rto.motionAdaptiveDeinterlaceActive && !preventScanlines) { + if (!rto.motionAdaptiveDeinterlaceActive && !preventScanlines) { enableScanlines(); - // } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + // } else if (!uopt.wantScanlines && rto.scanlinesEnabled) { } else { disableScanlines(); } @@ -4485,15 +4494,15 @@ void runSyncWatcher() } } - if (rto->videoStandardInput >= 14) { // RGBHV checks + if (rto.videoStandardInput >= 14) { // RGBHV checks static uint16_t RGBHVNoSyncCounter = 0; - if (uopt->preferScalingRgbhv && rto->continousStableCounter >= 2) { + if (uopt.preferScalingRgbhv && rto.continousStableCounter >= 2) { bool needPostAdjust = 0; static uint16_t activePresetLineCount = 0; // is the source in range for scaling RGBHV and is it currently in mode 15? uint16 sourceLines = GBS::STATUS_SYNC_PROC_VTOTAL::read(); // if sourceLines = 0, might be in some reset state - if ((sourceLines <= 535 && sourceLines != 0) && rto->videoStandardInput == 15) { + if ((sourceLines <= 535 && sourceLines != 0) && rto.videoStandardInput == 15) { uint16_t firstDetectedSourceLines = sourceLines; bool moveOn = 1; for (int i = 0; i < 30; i++) { // not the best check, but we don't want to try if this is not stable (usually is though) @@ -4507,11 +4516,11 @@ void runSyncWatcher() } if (moveOn) { _WSN(F("RGB/HV upscale mode")); - rto->isValidForScalingRGBHV = true; + rto.isValidForScalingRGBHV = true; // GBS::GBS_OPTION_SCALING_RGBHV::write(1); - rto->autoBestHtotalEnabled = 1; + rto.autoBestHtotalEnabled = 1; - if (rto->syncTypeCsync == false) { + if (rto.syncTypeCsync == false) { GBS::SP_SOG_MODE::write(0); GBS::SP_NO_COAST_REG::write(1); GBS::ADC_5_00::write(0x10); // 5_00 might be required @@ -4530,44 +4539,44 @@ void runSyncWatcher() _WSN(sourceRate); // todo: this hack is hard to understand when looking at applypreset and mode is suddenly 1,2 or 3 - // if (uopt->presetPreference == 2) { - // if (uopt->resolutionID == OutputCustom) { - /* if (uopt->resolutionID != Output240p - && uopt->resolutionID != OutputBypass - && uopt->resolutionID != OutputHdBypass - && uopt->resolutionID != OutputRGBHVBypass) */ + // if (uopt.presetPreference == 2) { + // if (uopt.resolutionID == OutputCustom) { + /* if (uopt.resolutionID != Output240p + && uopt.resolutionID != OutputBypass + && uopt.resolutionID != OutputHdBypass + && uopt.resolutionID != OutputRGBHVBypass) */ if(utilsNotPassThroughMode()) { // custom preset defined, try to load (set mode = 14 here early) - rto->videoStandardInput = 14; + rto.videoStandardInput = 14; } else { if (sourceLines < 280) { // this is "NTSC like?" check, seen 277 lines in "512x512 interlaced (emucrt)" - rto->videoStandardInput = 1; + rto.videoStandardInput = 1; } else if (sourceLines < 380) { // this is "PAL like?" check, seen vt:369 (MDA mode) - rto->videoStandardInput = 2; + rto.videoStandardInput = 2; } else if (sourceRate > 44.0f && sourceRate < 53.8f) { // not low res but PAL = "EDTV" - rto->videoStandardInput = 4; + rto.videoStandardInput = 4; needPostAdjust = 1; } else { // sourceRate > 53.8f // "60Hz EDTV" - rto->videoStandardInput = 3; + rto.videoStandardInput = 3; needPostAdjust = 1; } } - // if (uopt->presetPreference == 10) { + // if (uopt.presetPreference == 10) { if (utilsIsPassThroughMode()) { - // uopt->presetPreference = Output960P; // fix presetPreference which can be "bypass" - uopt->resolutionID = Output960p; // fix presetPreference which can be "bypass" + // uopt.presetPreference = Output960P; // fix presetPreference which can be "bypass" + uopt.resolutionID = Output960p; // fix presetPreference which can be "bypass" } activePresetLineCount = sourceLines; - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // TODO enabling Upscaling here? - uopt->preferScalingRgbhv = true; + uopt.preferScalingRgbhv = true; // GBS::GBS_OPTION_SCALING_RGBHV::write(1); GBS::IF_INI_ST::write(16); // fixes pal(at least) interlace GBS::SP_SOG_P_ATO::write(1); // 5_20 1 auto SOG polarity (now "hpw" should never be close to "ht") @@ -4575,8 +4584,8 @@ void runSyncWatcher() GBS::SP_SDCS_VSST_REG_L::write(2); // 5_3f GBS::SP_SDCS_VSSP_REG_L::write(0); // 5_40 - rto->coastPositionIsSet = rto->clampPositionIsSet = 0; - rto->videoStandardInput = 14; + rto.coastPositionIsSet = rto.clampPositionIsSet = 0; + rto.videoStandardInput = 14; if (GBS::PLLAD_ICP::read() >= 6) { GBS::PLLAD_ICP::write(5); // reduce charge pump current for more general use @@ -4585,7 +4594,7 @@ void runSyncWatcher() } updateStopPositionDynamic(true); - if (rto->syncTypeCsync == false) { + if (rto.syncTypeCsync == false) { GBS::SP_SOG_MODE::write(0); GBS::SP_CLAMP_MANUAL::write(1); GBS::SP_NO_COAST_REG::write(1); @@ -4597,15 +4606,15 @@ void runSyncWatcher() } delay(300); - if (rto->extClockGenDetected) { + if (rto.extClockGenDetected) { // switch to ext clock - // if (!rto->outModeHdBypass) { - if (uopt->resolutionID != OutputHdBypass) { + // if (!rto.outModeHdBypass) { + if (uopt.resolutionID != OutputHdBypass) { uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D // GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); - rto->presetDisplayClock = pll648_value; + rto.presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -4623,8 +4632,8 @@ void runSyncWatcher() GBS::IF_HB_ST2::write(0x08); // patches GBS::IF_HB_SP2::write(0x68); // image GBS::IF_HBIN_SP::write(0x50); // position - // if (rto->presetID == 0x05) { - if (uopt->resolutionID == Output1080p) { + // if (rto.presetID == 0x05) { + if (uopt.resolutionID == Output1080p) { GBS::IF_HB_ST2::write(0x480); GBS::IF_HB_SP2::write(0x8E); } @@ -4646,18 +4655,18 @@ void runSyncWatcher() } } // if currently in scaling RGB/HV, check for "SD" < > "EDTV" style source changes - else if ((sourceLines <= 535 && sourceLines != 0) && rto->videoStandardInput == 14) { + else if ((sourceLines <= 535 && sourceLines != 0) && rto.videoStandardInput == 14) { // todo: custom presets? if (sourceLines < 280 && activePresetLineCount > 280) { - rto->videoStandardInput = 1; + rto.videoStandardInput = 1; } else if (sourceLines < 380 && activePresetLineCount > 380) { - rto->videoStandardInput = 2; + rto.videoStandardInput = 2; } else if (sourceLines > 380 && activePresetLineCount < 380) { - rto->videoStandardInput = 3; + rto.videoStandardInput = 3; needPostAdjust = 1; } - if (rto->videoStandardInput != 14) { + if (rto.videoStandardInput != 14) { // check thoroughly first uint16_t firstDetectedSourceLines = sourceLines; bool moveOn = 1; @@ -4672,23 +4681,23 @@ void runSyncWatcher() if (moveOn) { // need to change presets - if (rto->videoStandardInput <= 2) { + if (rto.videoStandardInput <= 2) { _WSN(F("RGB/HV upscale mode base 15kHz")); } else { _WSN(F("RGB/HV upscale mode base 31kHz")); } - // if (uopt->presetPreference == 10) { + // if (uopt.presetPreference == 10) { if (utilsIsPassThroughMode()) { - // uopt->presetPreference = Output960P; // fix presetPreference which can be "bypass" - uopt->resolutionID = Output960p; // fix presetPreference which can be "bypass" + // uopt.presetPreference = Output960P; // fix presetPreference which can be "bypass" + uopt.resolutionID = Output960p; // fix presetPreference which can be "bypass" } activePresetLineCount = sourceLines; - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // TODO enabling Upscale here? - uopt->preferScalingRgbhv = true; + uopt.preferScalingRgbhv = true; // GBS::GBS_OPTION_SCALING_RGBHV::write(1); GBS::IF_INI_ST::write(16); // fixes pal(at least) interlace GBS::SP_SOG_P_ATO::write(1); // 5_20 1 auto SOG polarity @@ -4697,8 +4706,8 @@ void runSyncWatcher() GBS::SP_SDCS_VSST_REG_L::write(2); // 5_3f GBS::SP_SDCS_VSSP_REG_L::write(0); // 5_40 - rto->coastPositionIsSet = rto->clampPositionIsSet = 0; - rto->videoStandardInput = 14; + rto.coastPositionIsSet = rto.clampPositionIsSet = 0; + rto.videoStandardInput = 14; if (GBS::PLLAD_ICP::read() >= 6) { GBS::PLLAD_ICP::write(5); // reduce charge pump current for more general use @@ -4706,7 +4715,7 @@ void runSyncWatcher() } updateStopPositionDynamic(true); - if (rto->syncTypeCsync == false) { + if (rto.syncTypeCsync == false) { GBS::SP_SOG_MODE::write(0); GBS::SP_CLAMP_MANUAL::write(1); GBS::SP_NO_COAST_REG::write(1); @@ -4718,15 +4727,15 @@ void runSyncWatcher() } delay(300); - if (rto->extClockGenDetected) { + if (rto.extClockGenDetected) { // switch to ext clock - // if (!rto->outModeHdBypass) { - if (uopt->resolutionID != OutputHdBypass) { + // if (!rto.outModeHdBypass) { + if (uopt.resolutionID != OutputHdBypass) { uint8_t pll648_value = GBS::PLL648_CONTROL_01::read(); if (pll648_value != 0x35 && pll648_value != 0x75) { // first store original in an option byte in 1_2D // GBS::GBS_PRESET_DISPLAY_CLOCK::write(GBS::PLL648_CONTROL_01::read()); - rto->presetDisplayClock = pll648_value; + rto.presetDisplayClock = pll648_value; // enable and switch input Si.enable(0); delayMicroseconds(800); @@ -4744,8 +4753,8 @@ void runSyncWatcher() GBS::IF_HB_ST2::write(0x08); // patches GBS::IF_HB_SP2::write(0x68); // image GBS::IF_HBIN_SP::write(0x50); // position - // if (rto->presetID == 0x05) { - if (uopt->resolutionID == Output1080p) { + // if (rto.presetID == 0x05) { + if (uopt.resolutionID == Output1080p) { GBS::IF_HB_ST2::write(0x480); GBS::IF_HB_SP2::write(0x8E); } @@ -4766,12 +4775,12 @@ void runSyncWatcher() } } else { // was unstable, undo videoStandardInput change - rto->videoStandardInput = 14; + rto.videoStandardInput = 14; } } } // check whether to revert back to full bypass - else if ((sourceLines > 535) && rto->videoStandardInput == 14) { + else if ((sourceLines > 535) && rto.videoStandardInput == 14) { uint16_t firstDetectedSourceLines = sourceLines; bool moveOn = 1; for (int i = 0; i < 30; i++) { @@ -4785,22 +4794,22 @@ void runSyncWatcher() } if (moveOn) { _WSN(F("RGB/HV upscale mode disabled")); - rto->videoStandardInput = 15; - rto->isValidForScalingRGBHV = false; + rto.videoStandardInput = 15; + rto.isValidForScalingRGBHV = false; activePresetLineCount = 0; - applyPresets(rto->videoStandardInput); // exception: apply preset here, not later in syncwatcher + applyPresets(rto.videoStandardInput); // exception: apply preset here, not later in syncwatcher delay(300); } } } // done preferScalingRgbhv - if (!uopt->preferScalingRgbhv && rto->videoStandardInput == 14) { + if (!uopt.preferScalingRgbhv && rto.videoStandardInput == 14) { // user toggled the web ui button / revert scaling rgbhv - rto->videoStandardInput = 15; - rto->isValidForScalingRGBHV = false; - applyPresets(rto->videoStandardInput); + rto.videoStandardInput = 15; + rto.isValidForScalingRGBHV = false; + applyPresets(rto.videoStandardInput); delay(300); } @@ -4808,7 +4817,7 @@ void runSyncWatcher() uint16_t limitNoSync = 0; uint8_t VSHSStatus = 0; bool stable = 0; - if (rto->syncTypeCsync == true) { + if (rto.syncTypeCsync == true) { if (GBS::STATUS_INT_SOG_BAD::read() == 1) { // STATUS_INT_SOG_BAD = 0x0f bit 0, interrupt reg resetModeDetect(); @@ -4833,16 +4842,16 @@ void runSyncWatcher() if (!stable) { LEDOFF; RGBHVNoSyncCounter++; - rto->continousStableCounter = 0; + rto.continousStableCounter = 0; if (RGBHVNoSyncCounter % 20 == 0) { _WS(F(".")); } } else { RGBHVNoSyncCounter = 0; LEDON; - if (rto->continousStableCounter < 255) { - rto->continousStableCounter++; - if (rto->continousStableCounter == 6) { + if (rto.continousStableCounter < 255) { + rto.continousStableCounter++; + if (rto.continousStableCounter == 6) { updateStopPositionDynamic(true); } } @@ -4855,13 +4864,13 @@ void runSyncWatcher() prepareSyncProcessor(); resetSyncProcessor(); // todo: fix MD being stuck in last mode when sync disappears // resetModeDetect(); - rto->noSyncCounter = 0; + rto.noSyncCounter = 0; // _WSN("RGBHV limit no sync"); } static unsigned long lastTimeSogAndPllRateCheck = millis(); if ((millis() - lastTimeSogAndPllRateCheck) > 900) { - if (rto->videoStandardInput == 15) { + if (rto.videoStandardInput == 15) { // start out by adjusting sync polarity, may reset sog unstable interrupt flag updateHVSyncEdge(); delay(100); @@ -4869,15 +4878,15 @@ void runSyncWatcher() static uint8_t runsWithSogBadStatus = 0; static uint8_t oldHPLLState = 0; - if (rto->syncTypeCsync == false) { + if (rto.syncTypeCsync == false) { if (GBS::STATUS_INT_SOG_BAD::read()) { // SOG source unstable indicator runsWithSogBadStatus++; // _WS(F("test: ")); _WSN(runsWithSogBadStatus); if (runsWithSogBadStatus >= 4) { _WSN(F("RGB/HV < > SOG")); - rto->syncTypeCsync = true; - rto->HPLLState = runsWithSogBadStatus = RGBHVNoSyncCounter = 0; - rto->noSyncCounter = 0x07fe; // will cause a return + rto.syncTypeCsync = true; + rto.HPLLState = runsWithSogBadStatus = RGBHVNoSyncCounter = 0; + rto.noSyncCounter = 0x07fe; // will cause a return } } else { runsWithSogBadStatus = 0; @@ -4913,46 +4922,46 @@ void runSyncWatcher() // short activeChargePumpLevel = GBS::PLLAD_ICP::read(); // short activeGainBoost = GBS::PLLAD_FS::read(); - // _WS(F(" rto->HPLLState: ")); _WSN(rto->HPLLState); + // _WS(F(" rto.HPLLState: ")); _WSN(rto.HPLLState); // _WS(F(" currentPllRate: ")); _WSN(currentPllRate); // _WS(F(" CPL: ")); _WS(activeChargePumpLevel); // _WS(F(" Gain: ")); _WS(activeGainBoost); // _WS(F(" KS: ")); _WS(GBS::PLLAD_KS::read()); - oldHPLLState = rto->HPLLState; // do this first, else it can miss events + oldHPLLState = rto.HPLLState; // do this first, else it can miss events if (currentPllRate != 0) { if (currentPllRate < 1030) { - rto->HPLLState = 1; + rto.HPLLState = 1; } else if (currentPllRate < 2300) { - rto->HPLLState = 2; + rto.HPLLState = 2; } else if (currentPllRate < 3200) { - rto->HPLLState = 3; + rto.HPLLState = 3; } else if (currentPllRate < 3800) { - rto->HPLLState = 4; + rto.HPLLState = 4; } else { - rto->HPLLState = 5; + rto.HPLLState = 5; } } - if (rto->videoStandardInput == 15) { - if (oldHPLLState != rto->HPLLState) { - if (rto->HPLLState == 1) { + if (rto.videoStandardInput == 15) { + if (oldHPLLState != rto.HPLLState) { + if (rto.HPLLState == 1) { GBS::PLLAD_KS::write(2); // KS = 2 okay GBS::PLLAD_FS::write(0); GBS::PLLAD_ICP::write(6); - } else if (rto->HPLLState == 2) { + } else if (rto.HPLLState == 2) { GBS::PLLAD_KS::write(1); GBS::PLLAD_FS::write(0); GBS::PLLAD_ICP::write(6); - } else if (rto->HPLLState == 3) { // KS = 1 okay + } else if (rto.HPLLState == 3) { // KS = 1 okay GBS::PLLAD_KS::write(1); GBS::PLLAD_FS::write(1); GBS::PLLAD_ICP::write(6); // would need 7 but this is risky - } else if (rto->HPLLState == 4) { + } else if (rto.HPLLState == 4) { GBS::PLLAD_KS::write(0); // KS = 0 from here on GBS::PLLAD_FS::write(0); GBS::PLLAD_ICP::write(6); - } else if (rto->HPLLState == 5) { + } else if (rto.HPLLState == 5) { GBS::PLLAD_KS::write(0); // KS = 0 GBS::PLLAD_FS::write(1); GBS::PLLAD_ICP::write(6); @@ -4961,42 +4970,42 @@ void runSyncWatcher() latchPLLAD(); delay(2); setOverSampleRatio(4, false); // false = do apply // will auto decrease to max possible factor - _WSF(PSTR("(H-PLL) rate: %ld state: %d\n"), currentPllRate, rto->HPLLState); + _WSF(PSTR("(H-PLL) rate: %ld state: %d\n"), currentPllRate, rto.HPLLState); delay(100); } - } else if (rto->videoStandardInput == 14) { - if (oldHPLLState != rto->HPLLState) { - _WSF(PSTR("(H-PLL) rate: %ld state (no change): %d\n"), currentPllRate, rto->HPLLState); + } else if (rto.videoStandardInput == 14) { + if (oldHPLLState != rto.HPLLState) { + _WSF(PSTR("(H-PLL) rate: %ld state (no change): %d\n"), currentPllRate, rto.HPLLState); // need to manage HPLL state change somehow - // FrameSync::reset(uopt->frameTimeLockMethod); + // FrameSync::reset(uopt.frameTimeLockMethod); } } - if (rto->videoStandardInput == 14) { + if (rto.videoStandardInput == 14) { // scanlines - // if (uopt->wantScanlines) { - // if (!rto->scanlinesEnabled && !rto->motionAdaptiveDeinterlaceActive) { - if (!rto->motionAdaptiveDeinterlaceActive) { + // if (uopt.wantScanlines) { + // if (!rto.scanlinesEnabled && !rto.motionAdaptiveDeinterlaceActive) { + if (!rto.motionAdaptiveDeinterlaceActive) { if (GBS::IF_LD_RAM_BYPS::read() == 0) { // line doubler on? enableScanlines(); } - // } else if (!uopt->wantScanlines && rto->scanlinesEnabled) { + // } else if (!uopt.wantScanlines && rto.scanlinesEnabled) { } else { disableScanlines(); } // } } - rto->clampPositionIsSet = false; // RGBHV should regularly check clamp position + rto.clampPositionIsSet = false; // RGBHV should regularly check clamp position lastTimeSogAndPllRateCheck = millis(); } } - if (rto->noSyncCounter >= 0x07fe) { + if (rto.noSyncCounter >= 0x07fe) { // couldn't recover, source is lost // restore initial conditions and move to input detect GBS::DAC_RGBS_PWDNZ::write(0); // 0 = disable DAC - rto->noSyncCounter = 0; + rto.noSyncCounter = 0; // _WSN(); // yield(); goLowPowerWithInputDetection(); // does not further nest, so it can be called here // sets reset parameters @@ -5057,9 +5066,9 @@ uint8_t detectAndSwitchToActiveInput() if (currentInput == 1) { // RGBS or RGBHV bool vsyncActive = 0; - rto->inputIsYPbPr = false; // declare for MD - rto->currentLevelSOG = 13; // test startup with MD and MS separately! - setAndUpdateSogLevel(rto->currentLevelSOG); + rto.inputIsYPbPr = false; // declare for MD + rto.currentLevelSOG = 13; // test startup with MD and MS separately! + setAndUpdateSogLevel(rto.currentLevelSOG); unsigned long timeOutStart = millis(); // vsync test @@ -5093,9 +5102,9 @@ uint8_t detectAndSwitchToActiveInput() for (int i = 0; i < 3; i++) { // no success if: no signal at all (returns 0.0f), no embedded VSync (returns ~18.5f) // todo: this takes a while with no csync present - rto->syncTypeCsync = 1; // temporary for test + rto.syncTypeCsync = 1; // temporary for test float sfr = getSourceFieldRate(1); - rto->syncTypeCsync = 0; // undo + rto.syncTypeCsync = 0; // undo if (sfr > 40.0f) decodeSuccess++; // properly decoded vsync from 40 to xx Hz } @@ -5104,10 +5113,10 @@ uint8_t detectAndSwitchToActiveInput() _WSN(F(" (with CSync)")); GBS::SP_PRE_COAST::write(0x10); // increase from 9 to 16 (EGA 364) delay(40); - rto->syncTypeCsync = true; + rto.syncTypeCsync = true; } else { _WSN(); - rto->syncTypeCsync = false; + rto.syncTypeCsync = false; } // check for 25khz, all regular SOG modes first // update: only check for mode 8 @@ -5117,8 +5126,8 @@ uint8_t detectAndSwitchToActiveInput() // printInfo(); uint8_t innerVideoMode = getVideoMode(); if (innerVideoMode == 8) { - setAndUpdateSogLevel(rto->currentLevelSOG); - rto->medResLineCount = GBS::MD_HD1250P_CNTRL::read(); + setAndUpdateSogLevel(rto.currentLevelSOG); + rto.medResLineCount = GBS::MD_HD1250P_CNTRL::read(); _WSN(F("med res")); return 1; @@ -5129,9 +5138,9 @@ uint8_t detectAndSwitchToActiveInput() delay(30); } - rto->videoStandardInput = 15; + rto.videoStandardInput = 15; // exception: apply preset here, not later in syncwatcher - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); delay(100); return 3; @@ -5142,7 +5151,7 @@ uint8_t detectAndSwitchToActiveInput() } if (!vsyncActive) { // then do RGBS check - rto->syncTypeCsync = true; + rto.syncTypeCsync = true; GBS::MD_SEL_VGA60::write(0); // EDTV60 more likely than VGA60 uint16_t testCycle = 0; timeOutStart = millis(); @@ -5157,22 +5166,22 @@ uint8_t detectAndSwitchToActiveInput() // post coast 18 can mislead occasionally (SNES 239 mode) // but even then it still detects the video mode pretty well if ((testCycle % 150) == 0) { - if (rto->currentLevelSOG == 1) { - rto->currentLevelSOG = 2; + if (rto.currentLevelSOG == 1) { + rto.currentLevelSOG = 2; } else { - rto->currentLevelSOG += 2; + rto.currentLevelSOG += 2; } - if (rto->currentLevelSOG >= 15) { - rto->currentLevelSOG = 1; + if (rto.currentLevelSOG >= 15) { + rto.currentLevelSOG = 1; } - setAndUpdateSogLevel(rto->currentLevelSOG); + setAndUpdateSogLevel(rto.currentLevelSOG); } // new: check for 25khz, use regular scaling route for those if (getVideoMode() == 8) { - rto->currentLevelSOG = rto->thisSourceMaxLevelSOG = 13; - setAndUpdateSogLevel(rto->currentLevelSOG); - rto->medResLineCount = GBS::MD_HD1250P_CNTRL::read(); + rto.currentLevelSOG = rto.thisSourceMaxLevelSOG = 13; + setAndUpdateSogLevel(rto.currentLevelSOG); + rto.medResLineCount = GBS::MD_HD1250P_CNTRL::read(); _WSN(F("med res")); return 1; } @@ -5186,8 +5195,8 @@ uint8_t detectAndSwitchToActiveInput() // _WSF("0x%04X", GBS::MD_HD1250P_CNTRL::read()); } - // rto->currentLevelSOG = rto->thisSourceMaxLevelSOG = 13; - // setAndUpdateSogLevel(rto->currentLevelSOG); + // rto.currentLevelSOG = rto.thisSourceMaxLevelSOG = 13; + // setAndUpdateSogLevel(rto.currentLevelSOG); return 1; // anyway, let later stage deal with it } @@ -5198,7 +5207,7 @@ uint8_t detectAndSwitchToActiveInput() delay(40); } else if (currentInput == 0) { // YUV uint16_t testCycle = 0; - rto->inputIsYPbPr = true; // declare for MD + rto.inputIsYPbPr = true; // declare for MD GBS::MD_SEL_VGA60::write(0); // EDTV more likely than VGA 640x480 unsigned long timeOutStart = millis(); @@ -5210,28 +5219,28 @@ uint8_t detectAndSwitchToActiveInput() testCycle++; if ((testCycle % 180) == 0) { - if (rto->currentLevelSOG == 1) { - rto->currentLevelSOG = 2; + if (rto.currentLevelSOG == 1) { + rto.currentLevelSOG = 2; } else { - rto->currentLevelSOG += 2; + rto.currentLevelSOG += 2; } - if (rto->currentLevelSOG >= 16) { - rto->currentLevelSOG = 1; + if (rto.currentLevelSOG >= 16) { + rto.currentLevelSOG = 1; } - setAndUpdateSogLevel(rto->currentLevelSOG); - rto->thisSourceMaxLevelSOG = rto->currentLevelSOG; + setAndUpdateSogLevel(rto.currentLevelSOG); + rto.thisSourceMaxLevelSOG = rto.currentLevelSOG; } } - rto->currentLevelSOG = rto->thisSourceMaxLevelSOG = 14; - setAndUpdateSogLevel(rto->currentLevelSOG); + rto.currentLevelSOG = rto.thisSourceMaxLevelSOG = 14; + setAndUpdateSogLevel(rto.currentLevelSOG); return 2; // anyway, let later stage deal with it } _WSN(F(" lost..")); - rto->currentLevelSOG = 2; - setAndUpdateSogLevel(rto->currentLevelSOG); + rto.currentLevelSOG = 2; + setAndUpdateSogLevel(rto.currentLevelSOG); } GBS::ADC_INPUT_SEL::write(!currentInput); // can only be 1 or 0 @@ -5244,14 +5253,14 @@ uint8_t detectAndSwitchToActiveInput() /** * @brief This sets the following runtime variables: - * rto->currentLevelSOG - * rto->inputIsYPbPr - * rto->isInLowPowerMode - * rto->sourceDisconnected - * rto->videoStandardInput - * rto->syncTypeCsync - * rto->thisSourceMaxLevelSOG - * rto->medResLineCount (only RGB/Component) + * rto.currentLevelSOG + * rto.inputIsYPbPr + * rto.isInLowPowerMode + * rto.sourceDisconnected + * rto.videoStandardInput + * rto.syncTypeCsync + * rto.thisSourceMaxLevelSOG + * rto.medResLineCount (only RGB/Component) * * @return uint8_t */ @@ -5261,39 +5270,39 @@ uint8_t inputAndSyncDetect() if (syncFound == 0) { if (!getSyncPresent()) { - if (rto->isInLowPowerMode == false) { - rto->sourceDisconnected = true; - rto->videoStandardInput = 0; + if (rto.isInLowPowerMode == false) { + rto.sourceDisconnected = true; + rto.videoStandardInput = 0; // reset to base settings, then go to low power GBS::SP_SOG_MODE::write(1); goLowPowerWithInputDetection(); delay(10); - rto->isInLowPowerMode = true; + rto.isInLowPowerMode = true; } } return 0; } else if (syncFound == 1) { // input is RGBS - rto->inputIsYPbPr = 0; - rto->sourceDisconnected = false; - rto->isInLowPowerMode = false; + rto.inputIsYPbPr = 0; + rto.sourceDisconnected = false; + rto.isInLowPowerMode = false; resetDebugPort(); applyRGBPatches(); LEDON; return 1; } else if (syncFound == 2) { // YUV (PAL) - rto->inputIsYPbPr = 1; - rto->sourceDisconnected = false; - rto->isInLowPowerMode = false; + rto.inputIsYPbPr = 1; + rto.sourceDisconnected = false; + rto.isInLowPowerMode = false; resetDebugPort(); applyYuvPatches(); LEDON; return 2; } else if (syncFound == 3) { // input is RGBHV // already applied - rto->isInLowPowerMode = false; - rto->inputIsYPbPr = 0; - rto->sourceDisconnected = false; - rto->videoStandardInput = 15; + rto.isInLowPowerMode = false; + rto.inputIsYPbPr = 0; + rto.sourceDisconnected = false; + rto.videoStandardInput = 15; resetDebugPort(); LEDON; return 3; diff --git a/src/wifiman.cpp b/src/wifiman.cpp index 49bb6240..ac236c8b 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Sunday, 16th June 2024 2:04:38 am # +# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -92,69 +92,69 @@ static void wifiEventHandler(System_Event_t *e) // // webSocket.disconnect(); // // } // #if WEB_SERVER_ENABLE == 1 -//// if (rto->webServerStarted) { +//// if (rto.webServerStarted) { // if (webSocket.connectedClients() > 0) { // constexpr size_t MESSAGE_LEN = 8; // uint8_t toSend[MESSAGE_LEN]; // memset(toSend, 0, MESSAGE_LEN); // // special character # used for message filtering in WebUI // toSend[0] = '#'; -// toSend[1] = uopt->slotID + '0'; +// toSend[1] = uopt.slotID + '0'; // // TODO: resolutionID must be INTEGER too? -// toSend[2] = (char)uopt->resolutionID; +// toSend[2] = (char)uopt.resolutionID; // // -// if (uopt->wantScanlines) +// if (uopt.wantScanlines) // toSend[3] |= (1 << 0); -// if (uopt->wantVdsLineFilter) +// if (uopt.wantVdsLineFilter) // toSend[3] |= (1 << 1); -// if (uopt->wantStepResponse) +// if (uopt.wantStepResponse) // toSend[3] |= (1 << 2); -// if (uopt->wantPeaking) +// if (uopt.wantPeaking) // toSend[3] |= (1 << 3); -// if (uopt->enableAutoGain) +// if (uopt.enableAutoGain) // toSend[3] |= (1 << 4); -// if (uopt->enableFrameTimeLock) +// if (uopt.enableFrameTimeLock) // toSend[3] |= (1 << 5); // // -// if (uopt->deintMode == 0) // motion adaptive if == 0 +// if (uopt.deintMode == 0) // motion adaptive if == 0 // toSend[4] |= (1 << 0); -// if (uopt->deintMode == 1) // bob if == 1 +// if (uopt.deintMode == 1) // bob if == 1 // toSend[4] |= (1 << 1); -// // if (uopt->wantTap6) { +// // if (uopt.wantTap6) { // // toSend[4] |= (1 << 1); // // } -// if (uopt->wantFullHeight) +// if (uopt.wantFullHeight) // toSend[4] |= (1 << 2); -// // if (uopt->matchPresetSource) +// // if (uopt.matchPresetSource) // // toSend[4] |= (1 << 3); -// if (uopt->PalForce60 == 1) +// if (uopt.PalForce60 == 1) // toSend[4] |= (1 << 3); // // system preferences -// if (uopt->wantOutputComponent) +// if (uopt.wantOutputComponent) // toSend[5] |= (1 << 0); -// if (uopt->enableCalibrationADC) +// if (uopt.enableCalibrationADC) // toSend[5] |= (1 << 1); -// if (uopt->preferScalingRgbhv) +// if (uopt.preferScalingRgbhv) // toSend[5] |= (1 << 2); -// if (uopt->disableExternalClockGenerator) +// if (uopt.disableExternalClockGenerator) // toSend[5] |= (1 << 3); // // developer panel controls status -// if(rto->printInfos) +// if(rto.printInfos) // toSend[6] |= (1 << 0); -// if(uopt->invertSync) +// if(uopt.invertSync) // toSend[6] |= (1 << 1); -// if(rto->osr != 0) +// if(rto.osr != 0) // toSend[6] |= (1 << 2); // if(GBS::ADC_FLTR::read() != 0) // toSend[6] |= (1 << 3); -// if(uopt->debugView) +// if(uopt.debugView) // toSend[6] |= (1 << 4); // // system tab controls -// if(rto->allowUpdatesOTA) +// if(rto.allowUpdatesOTA) // toSend[7] |= (1 << 0); // webSocket.broadcastBIN(toSend, MESSAGE_LEN); diff --git a/src/wserial.cpp b/src/wserial.cpp index c34ca631..4e4bf627 100644 --- a/src/wserial.cpp +++ b/src/wserial.cpp @@ -3,7 +3,7 @@ # File: wserial.cpp # # File Created: Friday, 19th April 2024 4:13:35 pm # # Author: Sergey Ko # -# Last Modified: Wednesday, 12th June 2024 12:40:45 am # +# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -19,7 +19,7 @@ static char * serialBuffer = nullptr; * If developer mode disabled serialBuffer will be destroyed. */ void serialDevModeToggle() { - if(uopt->developerMode) { + if(uopt.developerMode) { if(serialBuffer == nullptr) { serialBuffer = (char *)malloc(SERIAL_BUFFER_MAX_LEN); serialBufferClean(); @@ -70,7 +70,7 @@ void serialBufferClean() { * @param size */ void SerialMirror::pushToBuffer(void * data, size_t size) { - if(!uopt->developerMode) + if(!uopt.developerMode) return; uint16_t i = 0; const char * d = reinterpret_cast(data); diff --git a/src/wserver.cpp b/src/wserver.cpp index 8997d245..483c32f5 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Tuesday, 18th June 2024 12:25:32 am # +# Last Modified: Wednesday, 19th June 2024 12:47:07 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -12,6 +12,8 @@ #include "wserver.h" +static debugRegister * dbgReg = nullptr; + #define LOMEM_WEB ((ESP.getFreeHeap() < 1024UL)) #define ASSERT_LOMEM_RETURN() \ do \ @@ -64,13 +66,13 @@ void serverInit() } /** - * @brief If uopt->developerMode is true decrease timings on webSocket + * @brief If uopt.developerMode is true decrease timings on webSocket * */ void serverWebSocketToggleDeveloperMode() { webSocket.disableHeartbeat(); delay(10); - if(uopt->developerMode) { + if(uopt.developerMode) { webSocket.enableHeartbeat( WEBSOCK_HBEAT_DEV_INTVAL, WEBSOCK_HBEAT_DEV_PONG_TOUT, @@ -192,7 +194,7 @@ void serverSlotSet() _DBGF(PSTR("unable to read: %s\n"), FPSTR(slotsFile)); goto server_slot_set_failure; } - _WSF(PSTR("active slotID: %d\n"), uopt->slotID); + _WSF(PSTR("active slotID: %d\n"), uopt.slotID); server.send(200, mimeAppJson, F("[\"ok\"]")); // begin loading new preset on the next loop userCommand = '3'; @@ -296,7 +298,7 @@ void serverSlotRemove() setResetParameters(); _DBGN(F("(!) slot has been removed, parameters now reset to defaults")); // also reset resolution - uopt->resolutionID = Output240p; + uopt.resolutionID = Output240p; server_slot_remove_end: server.send(200, mimeAppJson, result ? F("[\"ok\"]") : F("[\"fail\"]")); @@ -586,10 +588,10 @@ void serverWiFiStatus() // bool result = false; // if (slotGetData(slotsObject)) // { -// uopt->wantScanlines = slotsObject.slot[uopt->slotID].scanlines; +// uopt.wantScanlines = slotsObject.slot[uopt.slotID].scanlines; -// _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[uopt->slotID].name, uopt->slotID); -// if (uopt->wantScanlines) +// _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[uopt.slotID].name, uopt.slotID); +// if (uopt.wantScanlines) // { // _WSN(F("on (Line Filter recommended)")); // } @@ -600,10 +602,10 @@ void serverWiFiStatus() // } // saveUserPrefs(); -// uopt->scanlineStrength = slotsObject.slot[uopt->slotID].scanlinesStrength; -// uopt->wantVdsLineFilter = slotsObject.slot[uopt->slotID].wantVdsLineFilter; -// uopt->wantStepResponse = slotsObject.slot[uopt->slotID].wantStepResponse; -// uopt->wantPeaking = slotsObject.slot[uopt->slotID].wantPeaking; +// uopt.scanlineStrength = slotsObject.slot[uopt.slotID].scanlinesStrength; +// uopt.wantVdsLineFilter = slotsObject.slot[uopt.slotID].wantVdsLineFilter; +// uopt.wantStepResponse = slotsObject.slot[uopt.slotID].wantStepResponse; +// uopt.wantPeaking = slotsObject.slot[uopt.slotID].wantPeaking; // result = true; // } @@ -762,8 +764,8 @@ void printInfo() GBS::STATUS_00::read(), GBS::STATUS_05::read(), GBS::SP_CS_0x3E::read(), h, HSp, v, VSp, stat0FIrq, GBS::TEST_BUS::read(), getVideoMode(), GBS::STATUS_SYNC_PROC_HTOTAL::read(), GBS::STATUS_SYNC_PROC_VTOTAL::read() /*+ 1*/, // emucrt: without +1 is correct line count - GBS::STATUS_SYNC_PROC_HLOW_LEN::read(), rto->noSyncCounter, rto->continousStableCounter, - rto->currentLevelSOG, wifi); + GBS::STATUS_SYNC_PROC_HLOW_LEN::read(), rto.noSyncCounter, rto.continousStableCounter, + rto.currentLevelSOG, wifi); // _WS(F("charsToPrint: ")); _WSN(charsToPrint); _WS(print); @@ -813,7 +815,7 @@ void printInfo() */ void printVideoTimings() { - // if (rto->presetID < 0x20) { + // if (rto.presetID < 0x20) { if (utilsNotPassThroughMode()) { // horizontal @@ -945,8 +947,8 @@ void handleSerialCommand() PSTR("serial"), serialCommand, serialCommand, - uopt->slotID, - uopt->resolutionID + uopt.slotID, + uopt.resolutionID ); // multistage with bad characters? @@ -971,15 +973,15 @@ void handleSerialCommand() { // TODO don't store scanlines - WHY? // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - // if (uopt->wantScanlines) + // if (uopt.wantScanlines) // { // disableScanlines(); // } // pal forced 60hz: no need to revert here. let the voffset function handle it - if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) + if (uopt.enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); } // dump for (int segment = 0; segment <= 5; segment++) @@ -1023,17 +1025,22 @@ void handleSerialCommand() break; case 'D': // toggle debug mode _WS(F("debug view: ")); - if (GBS::ADC_UNUSED_62::read() == 0x00) + + // if (GBS::ADC_UNUSED_62::read() == 0x00) + if (!uopt.debugView) { - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store + dbgReg = new debugRegister(); + dbgReg->HD_Y_OFFSET = GBS::HD_Y_OFFSET::read(); + dbgReg->VDS_Y_OFST = GBS::VDS_Y_OFST::read(); + // if (uopt.wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 - GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup - GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); - GBS::ADC_UNUSED_62::write(1); // remember to remove on restore + // GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup + // GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); + // GBS::ADC_UNUSED_62::write(1); // remember to remove on restore GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); - if (!rto->inputIsYPbPr) + if (!rto.inputIsYPbPr) { // RGB input that has HD_DYN bypassed, use it now GBS::HD_DYN_BYPS::write(0); @@ -1041,14 +1048,14 @@ void handleSerialCommand() GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); } // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly - uopt->debugView = true; + uopt.debugView = true; _WSN(F("on")); } else { - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 - // if (rto->presetID == 0x05) { - if (uopt->resolutionID == Output1080p) + // if (uopt.wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 + // if (rto.presetID == 0x05) { + if (uopt.resolutionID == Output1080p) { GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 @@ -1058,9 +1065,11 @@ void handleSerialCommand() GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 } - GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore - GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); - if (!rto->inputIsYPbPr) + // GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore + // GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); + GBS::VDS_Y_OFST::write(dbgReg->VDS_Y_OFST); // restore + GBS::HD_Y_OFFSET::write(dbgReg->HD_Y_OFFSET); + if (!rto.inputIsYPbPr) { // RGB input, HD_DYN_BYPS again GBS::HD_DYN_BYPS::write(1); @@ -1068,10 +1077,12 @@ void handleSerialCommand() GBS::HD_V_OFFSET::write(0); // probably just 0 by default } // GBS::IF_IN_DREG_BYPS::write(0); - GBS::ADC_UNUSED_60::write(0); // .. and clear - GBS::ADC_UNUSED_61::write(0); - GBS::ADC_UNUSED_62::write(0); - uopt->debugView = false; + // GBS::ADC_UNUSED_60::write(0); // .. and clear + // GBS::ADC_UNUSED_61::write(0); + // GBS::ADC_UNUSED_62::write(0); + uopt.debugView = false; + delete dbgReg; + dbgReg = NULL; _WSN(F("off")); } // serialCommand = '@'; @@ -1083,9 +1094,9 @@ void handleSerialCommand() GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) latchPLLAD(); // GBS::VDS_HSCALE::write(512); - rto->syncLockFailIgnore = 16; - FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock - rto->forceRetime = true; + rto.syncLockFailIgnore = 16; + FrameSync::reset(uopt.frameTimeLockMethod); // adjust htotal to new display clock + rto.forceRetime = true; // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock // applyBestHTotal(FrameSync::init()); // twice // GBS::VDS_FLOCK_EN::write(1); //risky @@ -1101,8 +1112,8 @@ void handleSerialCommand() break; case 'P': _WS(F("auto deinterlace: ")); - rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; - if (rto->deinterlaceAutoEnabled) + rto.deinterlaceAutoEnabled = !rto.deinterlaceAutoEnabled; + if (rto.deinterlaceAutoEnabled) { _WSN(F("on")); } @@ -1112,11 +1123,11 @@ void handleSerialCommand() } break; case 'p': - if (!rto->motionAdaptiveDeinterlaceActive) + if (!rto.motionAdaptiveDeinterlaceActive) { // TODO why disabling scanlines? // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - if (uopt->wantScanlines) + if (uopt.wantScanlines) { disableScanlines(); } @@ -1142,16 +1153,16 @@ void handleSerialCommand() break; case 'T': // toggle auto gain _WS(F("auto gain ")); - if (uopt->enableAutoGain == 0) + if (uopt.enableAutoGain == 0) { - uopt->enableAutoGain = 1; + uopt.enableAutoGain = 1; setAdcGain(AUTO_GAIN_INIT); GBS::DEC_TEST_ENABLE::write(1); _WSN(F("on")); } else { - uopt->enableAutoGain = 0; + uopt.enableAutoGain = 0; GBS::DEC_TEST_ENABLE::write(0); _WSN(F("off")); } @@ -1169,16 +1180,16 @@ void handleSerialCommand() break; case '.': // resync HTotal { - // if (!rto->outModeHdBypass) - if (uopt->resolutionID != OutputHdBypass) + // if (!rto.outModeHdBypass) + if (uopt.resolutionID != OutputHdBypass) { // bestHtotal recalc - rto->autoBestHtotalEnabled = true; - rto->syncLockFailIgnore = 16; - rto->forceRetime = true; - FrameSync::reset(uopt->frameTimeLockMethod); + rto.autoBestHtotalEnabled = true; + rto.syncLockFailIgnore = 16; + rto.forceRetime = true; + FrameSync::reset(uopt.frameTimeLockMethod); - if (!rto->syncWatcherEnabled) + if (!rto.syncWatcherEnabled) { bool autoBestHtotalSuccess = 0; delay(30); @@ -1233,20 +1244,20 @@ void handleSerialCommand() resetPLLAD(); break; case 'v': - rto->phaseSP += 1; - rto->phaseSP &= 0x1f; - _WSF(PSTR("SP: %d\n"), rto->phaseSP); + rto.phaseSP += 1; + rto.phaseSP &= 0x1f; + _WSF(PSTR("SP: %d\n"), rto.phaseSP); setAndLatchPhaseSP(); // setAndLatchPhaseADC(); break; case 'b': advancePhase(); latchPLLAD(); - _WSF(PSTR("ADC: %d\n"), rto->phaseADC); + _WSF(PSTR("ADC: %d\n"), rto.phaseADC); break; case '#': - rto->videoStandardInput = 13; - applyPresets(rto->videoStandardInput); + rto.videoStandardInput = 13; + applyPresets(rto.videoStandardInput); // _WSN(getStatus00IfHsVsStable()); // globalDelay++; // _WSN(globalDelay); @@ -1279,17 +1290,17 @@ void handleSerialCommand() // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); - // if (rto->scanlinesEnabled) + // if (rto.scanlinesEnabled) _DBG(F("scanlines: ")); - if (uopt->wantScanlines) + if (uopt.wantScanlines) { - // rto->scanlinesEnabled = false; + // rto.scanlinesEnabled = false; disableScanlines(); _DBGN(F("off")); } else { - // rto->scanlinesEnabled = true; + // rto.scanlinesEnabled = true; enableScanlines(); _DBGN(F("on")); } @@ -1299,12 +1310,12 @@ void handleSerialCommand() _WSF(PSTR("HTotal++: %d\n"), GBS::VDS_HSYNC_RST::read() + 1); if (GBS::VDS_HSYNC_RST::read() < 4095) { - if (uopt->enableFrameTimeLock) + if (uopt.enableFrameTimeLock) { // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); } - rto->forceRetime = 1; + rto.forceRetime = 1; applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); } break; @@ -1312,12 +1323,12 @@ void handleSerialCommand() _WSF(PSTR("HTotal--: %d\n"), GBS::VDS_HSYNC_RST::read() - 1); if (GBS::VDS_HSYNC_RST::read() > 0) { - if (uopt->enableFrameTimeLock) + if (uopt.enableFrameTimeLock) { // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); } - rto->forceRetime = 1; + rto.forceRetime = 1; applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); } break; @@ -1327,11 +1338,11 @@ void handleSerialCommand() break; case 'm': // toggle syncWatcher _WS(F("syncwatcher ")); - if (rto->syncWatcherEnabled == true) + if (rto.syncWatcherEnabled == true) { - rto->syncWatcherEnabled = false; - // if (rto->videoIsFrozen) - if (uopt->freezeCapture) + rto.syncWatcherEnabled = false; + // if (rto.videoIsFrozen) + if (uopt.freezeCapture) { unfreezeVideo(); } @@ -1339,7 +1350,7 @@ void handleSerialCommand() } else { - rto->syncWatcherEnabled = true; + rto.syncWatcherEnabled = true; _WSN(F("on")); } break; @@ -1347,40 +1358,42 @@ void handleSerialCommand() printVideoTimings(); break; case 'i': - rto->printInfos = !rto->printInfos; + rto.printInfos = !rto.printInfos; break; case 'c': // enableOTA mode initUpdateOTA(); - rto->allowUpdatesOTA = true; + rto.allowUpdatesOTA = true; _WSN(F("OTA Updates on")); break; +#ifdef HAVE_PINGER_LIBRARY case 'G': _WS(F("Debug Pings ")); - if (!rto->enableDebugPings) + if (!rto.enableDebugPings) { _WSN(F("on")); - rto->enableDebugPings = 1; + rto.enableDebugPings = 1; } else { _WSN(F("off")); - rto->enableDebugPings = 0; + rto.enableDebugPings = 0; } break; +#endif case 'u': ResetSDRAM(); break; case 'f': // toggle peaking _WS(F("peaking ")); - if (uopt->wantPeaking == 0) + if (uopt.wantPeaking == 0) { - uopt->wantPeaking = 1; + uopt.wantPeaking = 1; GBS::VDS_PK_Y_H_BYPS::write(0); _WSN(F("on")); } else { - uopt->wantPeaking = 0; + uopt.wantPeaking = 0; GBS::VDS_PK_Y_H_BYPS::write(1); _WSN(F("off")); } @@ -1393,31 +1406,31 @@ void handleSerialCommand() if (GBS::ADC_FLTR::read() != 0) { GBS::ADC_FLTR::write(0); - uopt->adcFilter = false; + uopt.adcFilter = false; _WSN(F("off")); } else { GBS::ADC_FLTR::write(3); - uopt->adcFilter = true; + uopt.adcFilter = true; _WSN(F("on")); } break; case 'L': // force outut component { // Component / VGA Output - uopt->wantOutputComponent = !uopt->wantOutputComponent; + uopt.wantOutputComponent = !uopt.wantOutputComponent; OutputComponentOrVGA(); // apply 1280x720 preset now, otherwise a reboot would be required uint8_t videoMode = getVideoMode(); if (videoMode == 0) - videoMode = rto->videoStandardInput; - // OutputResolution backup = uopt->resolutionID; - // uopt->presetPreference = Output720P; - // uopt->resolutionID = Output720p; - rto->videoStandardInput = 0; // force hard reset + videoMode = rto.videoStandardInput; + // OutputResolution backup = uopt.resolutionID; + // uopt.presetPreference = Output720P; + // uopt.resolutionID = Output720p; + rto.videoStandardInput = 0; // force hard reset applyPresets(videoMode); - // uopt->resolutionID = backup; + // uopt.resolutionID = backup; // saveUserPrefs(); savePresetToFS(); prefsSave(); @@ -1433,24 +1446,24 @@ void handleSerialCommand() break; // case 'Z': // { - // uopt->matchPresetSource = !uopt->matchPresetSource; + // uopt.matchPresetSource = !uopt.matchPresetSource; // // saveUserPrefs(); // slotFlush(); // uint8_t vidMode = getVideoMode(); - // // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { - // if (uopt->resolutionID == Output240p && GBS::GBS_PRESET_ID::read() == Output960p50) + // // if (uopt.presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { + // if (uopt.resolutionID == Output240p && GBS::GBS_PRESET_ID::read() == Output960p50) // { // applyPresets(vidMode); - // // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { + // // } else if (uopt.presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { // } - // else if (uopt->resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) + // else if (uopt.resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) // { // applyPresets(vidMode); // } // } // break; case 'W': - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + uopt.enableFrameTimeLock = !uopt.enableFrameTimeLock; break; case 'E': writeProgramArrayNew(ntsc_1280x1024, false); @@ -1500,8 +1513,8 @@ void handleSerialCommand() } break; case '6': - // if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) - if (videoStandardInputIsPalNtscSd() && uopt->resolutionID != OutputHdBypass) + // if (videoStandardInputIsPalNtscSd() && !rto.outModeHdBypass) + if (videoStandardInputIsPalNtscSd() && uopt.resolutionID != OutputHdBypass) { if (GBS::IF_HBIN_SP::read() >= 10) { // IF_HBIN_SP: min 2 @@ -1517,8 +1530,8 @@ void handleSerialCommand() _WSN(F("limit")); } } - // else if (!rto->outModeHdBypass) - else if (uopt->resolutionID != OutputHdBypass) + // else if (!rto.outModeHdBypass) + else if (uopt.resolutionID != OutputHdBypass) { if (GBS::IF_HB_SP2::read() >= 4) GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a @@ -1533,8 +1546,8 @@ void handleSerialCommand() } break; case '7': - // if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) - if (videoStandardInputIsPalNtscSd() && uopt->resolutionID != OutputHdBypass) + // if (videoStandardInputIsPalNtscSd() && !rto.outModeHdBypass) + if (videoStandardInputIsPalNtscSd() && uopt.resolutionID != OutputHdBypass) { if (GBS::IF_HBIN_SP::read() < 0x150) { // (arbitrary) max limit @@ -1545,8 +1558,8 @@ void handleSerialCommand() _WSN(F("limit")); } } - // else if (!rto->outModeHdBypass) - else if (uopt->resolutionID != OutputHdBypass) + // else if (!rto.outModeHdBypass) + else if (uopt.resolutionID != OutputHdBypass) { if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a @@ -1562,7 +1575,7 @@ void handleSerialCommand() break; case '8': // invert sync button (dev. mode) // _WSN("invert sync"); - uopt->invertSync = !uopt->invertSync; + uopt.invertSync = !uopt.invertSync; invertHS(); invertVS(); // optimizePhaseSP(); @@ -1573,22 +1586,22 @@ void handleSerialCommand() break; case 'o': { // oversampring button (dev.mode) - if (rto->osr == 1) + if (rto.osr == 1) { setOverSampleRatio(2, false); } - else if (rto->osr == 2) + else if (rto.osr == 2) { setOverSampleRatio(4, false); } - else if (rto->osr == 4) + else if (rto.osr == 4) { setOverSampleRatio(1, false); } delay(4); optimizePhaseSP(); - _WSF(PSTR("OSR 0x%02X\n"), rto->osr); - rto->phaseIsSet = 0; // do it again in modes applicable + _WSF(PSTR("OSR 0x%02X\n"), rto.osr); + rto.phaseIsSet = 0; // do it again in modes applicable } break; case 'g': @@ -1808,18 +1821,18 @@ void handleSerialCommand() } if (what.equals("f")) { - if (rto->extClockGenDetected) + if (rto.extClockGenDetected) { - _WSF(PSTR("old freqExtClockGen: %l\n"), rto->freqExtClockGen); - rto->freqExtClockGen = Serial.parseInt(); + _WSF(PSTR("old freqExtClockGen: %l\n"), rto.freqExtClockGen); + rto.freqExtClockGen = Serial.parseInt(); // safety range: 1 - 250 MHz - if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) + if (rto.freqExtClockGen >= 1000000 && rto.freqExtClockGen <= 250000000) { - Si.setFreq(0, rto->freqExtClockGen); - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; + Si.setFreq(0, rto.freqExtClockGen); + rto.clampPositionIsSet = 0; + rto.coastPositionIsSet = 0; } - _WSF(PSTR("set freqExtClockGen: %l\n"), rto->freqExtClockGen); + _WSF(PSTR("set freqExtClockGen: %l\n"), rto.freqExtClockGen); } break; } @@ -1831,10 +1844,10 @@ void handleSerialCommand() if (what.equals("ht")) { // set_htotal(value); - // if (!rto->outModeHdBypass) - if (uopt->resolutionID != OutputHdBypass) + // if (!rto.outModeHdBypass) + if (uopt.resolutionID != OutputHdBypass) { - rto->forceRetime = 1; + rto.forceRetime = 1; applyBestHTotal(value); } else @@ -1957,8 +1970,8 @@ void handleSerialCommand() case 'V': // toggle step response { _WS(F("step response ")); - uopt->wantStepResponse = !uopt->wantStepResponse; - if (uopt->wantStepResponse) + uopt.wantStepResponse = !uopt.wantStepResponse; + if (uopt.wantStepResponse) { GBS::VDS_UV_STEP_BYPS::write(0); _WSN(F("on")); @@ -1983,14 +1996,14 @@ void handleSerialCommand() break; case ';': externalClockGenResetClock(); - if (rto->extClockGenDetected) + if (rto.extClockGenDetected) { - rto->extClockGenDetected = 0; + rto.extClockGenDetected = 0; _WSN(F("ext clock gen bypass")); } else { - rto->extClockGenDetected = 1; + rto.extClockGenDetected = 1; _WSN(F("ext clock gen active")); externalClockGenSyncInOutRate(); } @@ -2016,7 +2029,7 @@ void handleSerialCommand() // { // // in case we handled a Serial or web server command and there's no more extra commands // // but keep debug view command (resets once called) - // // TODO: we have uopt->debugView + // // TODO: we have uopt.debugView // if (serialCommand != 'D') // { // serialCommand = '@'; @@ -2040,16 +2053,16 @@ void handleUserCommand() PSTR("user"), userCommand, userCommand, - uopt->slotID, - uopt->resolutionID + uopt.slotID, + uopt.resolutionID ); switch (userCommand) { case '0': // force increase frequency to 60Hz for PAL 50Hz _WS(F("pal force 60hz ")); - uopt->PalForce60 = !uopt->PalForce60; - if (uopt->PalForce60 == 1) + uopt.PalForce60 = !uopt.PalForce60; + if (uopt.PalForce60 == 1) _WSN(F("on")); else _WSN(F("off")); @@ -2071,14 +2084,14 @@ void handleUserCommand() case '3': // load new preset on slot change { // TODO: unknown logic - if (rto->videoStandardInput == 14) { + if (rto.videoStandardInput == 14) { // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; + rto.videoStandardInput = 15; } else { - applyPresets(rto->videoStandardInput); + applyPresets(rto.videoStandardInput); // if at this point isCustomPreset it true, // then preset is loaded from FS, therefore no need to save it again - if(!rto->isCustomPreset) + if(!rto.isCustomPreset) savePresetToFS(); } } @@ -2086,9 +2099,9 @@ void handleUserCommand() // case '4': // break; case '5': // Frame Time Lock toggle - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + uopt.enableFrameTimeLock = !uopt.enableFrameTimeLock; // saveUserPrefs(); - if (uopt->enableFrameTimeLock) + if (uopt.enableFrameTimeLock) { _WSN(F("FTL on")); } @@ -2096,11 +2109,11 @@ void handleUserCommand() { _WSN(F("FTL off")); } - if (!rto->extClockGenDetected) + if (!rto.extClockGenDetected) { - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); } - if (uopt->enableFrameTimeLock) + if (uopt.enableFrameTimeLock) { activeFrameTimeLockInitialSteps(); } @@ -2109,9 +2122,9 @@ void handleUserCommand() // case '6': // break; case '7': // toggle scanlines - uopt->wantScanlines = !uopt->wantScanlines; + uopt.wantScanlines = !uopt.wantScanlines; _WS(F("scanlines: ")); - if (uopt->wantScanlines) + if (uopt.wantScanlines) { _WSN(F("on (Line Filter recommended)")); } @@ -2130,7 +2143,7 @@ void handleUserCommand() resetInMSec(2000); break; case 'd': // toggle developer mode - uopt->developerMode = !uopt->developerMode; + uopt.developerMode = !uopt.developerMode; serverWebSocketToggleDeveloperMode(); serialDevModeToggle(); break; @@ -2184,48 +2197,48 @@ void handleUserCommand() // load preset via webui uint8_t videoMode = getVideoMode(); if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; // last known good as fallback + videoMode = rto.videoStandardInput; // last known good as fallback // else videoMode stays 0 and we'll apply via some assumptions if (userCommand == 'f') - // uopt->presetPreference = Output960P; // 1280x960 - uopt->resolutionID = Output960p; // 1280x960 + // uopt.presetPreference = Output960P; // 1280x960 + uopt.resolutionID = Output960p; // 1280x960 if (userCommand == 'g') - // uopt->presetPreference = Output720P; // 1280x720 - uopt->resolutionID = Output720p; // 1280x720 + // uopt.presetPreference = Output720P; // 1280x720 + uopt.resolutionID = Output720p; // 1280x720 if (userCommand == 'h') - // uopt->presetPreference = Output480P; // 720x480/768x576 - uopt->resolutionID = Output480p; // 720x480/768x576 + // uopt.presetPreference = Output480P; // 720x480/768x576 + uopt.resolutionID = Output480p; // 720x480/768x576 if (userCommand == 'p') - // uopt->presetPreference = Output1024P; // 1280x1024 - uopt->resolutionID = Output1024p; // 1280x1024 + // uopt.presetPreference = Output1024P; // 1280x1024 + uopt.resolutionID = Output1024p; // 1280x1024 if (userCommand == 's') - // uopt->presetPreference = Output1080P; // 1920x1080 - uopt->resolutionID = Output1080p; // 1920x1080 + // uopt.presetPreference = Output1080P; // 1920x1080 + uopt.resolutionID = Output1080p; // 1920x1080 if (userCommand == 'L') - // uopt->presetPreference = OutputDownscale; // downscale - uopt->resolutionID = Output15kHz; // downscale + // uopt.presetPreference = OutputDownscale; // downscale + uopt.resolutionID = Output15kHz; // downscale if (userCommand == 'k') - uopt->resolutionID = Output576p50; // PAL + uopt.resolutionID = Output576p50; // PAL if (userCommand == 'j') - uopt->resolutionID = Output240p; // 240p + uopt.resolutionID = Output240p; // 240p - rto->useHdmiSyncFix = 1; // disables sync out when programming preset - if (rto->videoStandardInput == 14) + rto.useHdmiSyncFix = 1; // disables sync out when programming preset + if (rto.videoStandardInput == 14) { // vga upscale path: let synwatcher handle it _DBGN(F("video input is #14, switch to #15")); - rto->videoStandardInput = 15; + rto.videoStandardInput = 15; } else { applyPresets(videoMode); // resolution is stored in GBSC registers // doing this after applyPresets to be able to find if resolution has changed - GBS::GBS_PRESET_ID::write(uopt->resolutionID); + GBS::GBS_PRESET_ID::write(uopt.resolutionID); // if at this point isCustomPreset it true, then preset is loaded from FS and // resolution doesn't change, therefore no need to save it again - if(!rto->isCustomPreset) { + if(!rto.isCustomPreset) { savePresetToFS(); slotFlush(); } @@ -2235,24 +2248,24 @@ void handleUserCommand() break; case 'i': // toggle active frametime lock method // enable FTL if disabled - if (uopt->enableFrameTimeLock == 0) - { - _WSN(F("FTL on")); - uopt->enableFrameTimeLock = 1; + if (uopt.enableFrameTimeLock == 0) { + _WS(F("FTL enabled, ")); + uopt.enableFrameTimeLock = 1; } - if (!rto->extClockGenDetected) + if (!rto.extClockGenDetected) { - FrameSync::reset(uopt->frameTimeLockMethod); + FrameSync::reset(uopt.frameTimeLockMethod); } - if (uopt->frameTimeLockMethod == 0) + if (uopt.frameTimeLockMethod == 0) { - uopt->frameTimeLockMethod = 1; + uopt.frameTimeLockMethod = 1; } - else if (uopt->frameTimeLockMethod == 1) + else if (uopt.frameTimeLockMethod == 1) { - uopt->frameTimeLockMethod = 0; + uopt.frameTimeLockMethod = 0; } + _WSF(PSTR("lock method: %d\n"), uopt.frameTimeLockMethod); // saveUserPrefs(); activeFrameTimeLockInitialSteps(); slotFlush(); @@ -2319,15 +2332,15 @@ void handleUserCommand() break; case 'm': // toggle line filter _WS(F("Line Filter: ")); - if (uopt->wantVdsLineFilter) + if (uopt.wantVdsLineFilter) { - uopt->wantVdsLineFilter = 0; + uopt.wantVdsLineFilter = 0; GBS::VDS_D_RAM_BYPS::write(1); _WSN(F("off")); } else { - uopt->wantVdsLineFilter = 1; + uopt.wantVdsLineFilter = 1; GBS::VDS_D_RAM_BYPS::write(0); _WSN(F("on")); } @@ -2336,12 +2349,12 @@ void handleUserCommand() // saveUserPrefs(); break; case 'n': - uopt->enableAutoGain = 0; + uopt.enableAutoGain = 0; setAdcGain(GBS::ADC_RGCTRL::read() - 1); _WSF(PSTR("ADC gain++ : 0x%04X\n"), GBS::ADC_RGCTRL::read()); break; case 'o': - uopt->enableAutoGain = 0; + uopt.enableAutoGain = 0; setAdcGain(GBS::ADC_RGCTRL::read() + 1); _WSF(PSTR("ADC gain-- : 0x%04X\n"), GBS::ADC_RGCTRL::read()); break; @@ -2412,14 +2425,14 @@ void handleUserCommand() } break; case 'q': // bob / motionAdaptive - if (uopt->deintMode != 1) + if (uopt.deintMode != 1) { // switch to bob mode - uopt->deintMode = 1; + uopt.deintMode = 1; disableMotionAdaptDeinterlace(); // TODO why disable scanlines? // if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) - if (uopt->wantScanlines) + if (uopt.wantScanlines) { disableScanlines(); } @@ -2427,7 +2440,7 @@ void handleUserCommand() _WSN(F("Deinterlacer: Bob")); } else { // switch to motion adaptive mode - uopt->deintMode = 0; + uopt.deintMode = 0; // saveUserPrefs(); _WSN(F("Deinterlacer: Motion Adaptive")); } @@ -2439,16 +2452,16 @@ void handleUserCommand() case 't': // unused now _WS(F("6-tap: ")); - if (uopt->wantTap6 == 0) + if (uopt.wantTap6 == 0) { - uopt->wantTap6 = 1; + uopt.wantTap6 = 1; GBS::VDS_TAP6_BYPS::write(0); GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() - 1); _WSN(F("on")); } else { - uopt->wantTap6 = 0; + uopt.wantTap6 = 0; GBS::VDS_TAP6_BYPS::write(1); GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() + 1); _WSN(F("off")); @@ -2459,7 +2472,7 @@ void handleUserCommand() case 'u': // extract backup extractBackup(); // reset active slot - uopt->slotID = 0; + uopt.slotID = 0; // saveUserPrefs(); prefsSave(); // reset device to apply new configuration @@ -2467,12 +2480,12 @@ void handleUserCommand() break; case 'v': // toggle full Height { - uopt->wantFullHeight = !uopt->wantFullHeight; + uopt.wantFullHeight = !uopt.wantFullHeight; // saveUserPrefs(); slotFlush(); uint8_t vidMode = getVideoMode(); - // if (uopt->presetPreference == 5) { - if (uopt->resolutionID == Output1080p) + // if (uopt.presetPreference == 5) { + if (uopt.resolutionID == Output1080p) { if (GBS::GBS_PRESET_ID::read() == 0x05 || GBS::GBS_PRESET_ID::read() == 0x15) { @@ -2484,8 +2497,8 @@ void handleUserCommand() break; case 'w': // ADC calibration _WS(F("ADC calibration: ")); - uopt->enableCalibrationADC = !uopt->enableCalibrationADC; - if(uopt->enableCalibrationADC) + uopt.enableCalibrationADC = !uopt.enableCalibrationADC; + if(uopt.enableCalibrationADC) _WSN(F("on")); else _WSN(F("off")); @@ -2494,9 +2507,9 @@ void handleUserCommand() prefsSave(); break; case 'x': // do upscaling on low resolutions (preferScalingRgbhv) - uopt->preferScalingRgbhv = !uopt->preferScalingRgbhv; + uopt.preferScalingRgbhv = !uopt.preferScalingRgbhv; _WS(F("preferScalingRgbhv: ")); - if (uopt->preferScalingRgbhv) + if (uopt.preferScalingRgbhv) { _WSN(F("on")); } @@ -2509,15 +2522,15 @@ void handleUserCommand() break; case 'X': // enable/disable ext. clock generator _WS(F("external clock generator: ")); - if (uopt->disableExternalClockGenerator == false) + if (uopt.disableExternalClockGenerator == false) { _WSN(F("off")); - uopt->disableExternalClockGenerator = true; + uopt.disableExternalClockGenerator = true; } else { _WSN(F("on, detecting...")); - uopt->disableExternalClockGenerator = false; + uopt.disableExternalClockGenerator = false; externalClockGenDetectAndInitialize(); } // saveUserPrefs(); @@ -2525,20 +2538,20 @@ void handleUserCommand() break; case 'z': // sog slicer level - if (rto->currentLevelSOG > 0) + if (rto.currentLevelSOG > 0) { - rto->currentLevelSOG -= 1; + rto.currentLevelSOG -= 1; } else { - rto->currentLevelSOG = 16; + rto.currentLevelSOG = 16; } - setAndUpdateSogLevel(rto->currentLevelSOG); + setAndUpdateSogLevel(rto.currentLevelSOG); optimizePhaseSP(); _WSF( PSTR("Phase: %d SOG: %d\n"), - rto->phaseSP, - rto->currentLevelSOG); + rto.phaseSP, + rto.currentLevelSOG); break; case 'E': // test option for now @@ -2566,24 +2579,24 @@ void handleUserCommand() } break; case 'K': // scanline strength - if (uopt->scanlineStrength >= 0x10) + if (uopt.scanlineStrength >= 0x10) { - uopt->scanlineStrength -= 0x10; + uopt.scanlineStrength -= 0x10; } else { - uopt->scanlineStrength = 0x50; + uopt.scanlineStrength = 0x50; } - // if (rto->scanlinesEnabled) - if (uopt->wantScanlines) + // if (rto.scanlinesEnabled) + if (uopt.wantScanlines) { - GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); - GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); + GBS::MADPT_Y_MI_OFFSET::write(uopt.scanlineStrength); + GBS::MADPT_UV_MI_OFFSET::write(uopt.scanlineStrength); } savePresetToFS(); slotFlush(); // saveUserPrefs(); - _WSF(PSTR("scanline strength set: 0x%04X\n"), uopt->scanlineStrength); + _WSF(PSTR("scanline strength set: 0x%04X\n"), uopt.scanlineStrength); break; case 'Z': // brightness++ GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 1); @@ -2671,9 +2684,9 @@ void handleUserCommand() GBS::VDS_Y_OFST::write(0); GBS::VDS_U_OFST::write(0); GBS::VDS_V_OFST::write(0); - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_BOFCTRL::write(adco->b_off); + GBS::ADC_ROFCTRL::write(adco.r_off); + GBS::ADC_GOFCTRL::write(adco.g_off); + GBS::ADC_BOFCTRL::write(adco.b_off); _WSN(F("RGB:defauit")); } else @@ -2684,9 +2697,9 @@ void handleUserCommand() GBS::VDS_Y_OFST::write(254); GBS::VDS_U_OFST::write(3); GBS::VDS_V_OFST::write(3); - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_BOFCTRL::write(adco->b_off); + GBS::ADC_ROFCTRL::write(adco.r_off); + GBS::ADC_GOFCTRL::write(adco.g_off); + GBS::ADC_BOFCTRL::write(adco.b_off); _WSN(F("YPbPr:defauit")); } break; @@ -2769,7 +2782,7 @@ void fsToFactory() { delay(50); } // set default slot ID - uopt->slotID = 0; + uopt.slotID = 0; } /** @@ -2789,7 +2802,7 @@ void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length) case WStype_PONG: if (webSocket.connectedClients() > 0) { // debug output - if(uopt->developerMode) { + if(uopt.developerMode) { const char * buff = serialGetBuffer(); if(*buff != '\0') { // sending to all clients @@ -2804,65 +2817,65 @@ void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length) memset(toSend, 0, MESSAGE_LEN); // special character # used for message filtering in WebUI toSend[0] = '#'; - toSend[1] = uopt->slotID; - toSend[2] = (uint8_t)uopt->resolutionID; + toSend[1] = uopt.slotID; + toSend[2] = (uint8_t)uopt.resolutionID; // - if (uopt->wantScanlines) + if (uopt.wantScanlines) toSend[3] |= (1 << 0); - if (uopt->wantVdsLineFilter) + if (uopt.wantVdsLineFilter) toSend[3] |= (1 << 1); - if (uopt->wantStepResponse) + if (uopt.wantStepResponse) toSend[3] |= (1 << 2); - if (uopt->wantPeaking) + if (uopt.wantPeaking) toSend[3] |= (1 << 3); - if (uopt->enableAutoGain) + if (uopt.enableAutoGain) toSend[3] |= (1 << 4); - if (uopt->enableFrameTimeLock) + if (uopt.enableFrameTimeLock) toSend[3] |= (1 << 5); // - if (uopt->deintMode == 0) // motion adaptive if == 0 + if (uopt.deintMode == 0) // motion adaptive if == 0 toSend[4] |= (1 << 0); - if (uopt->deintMode == 1) // bob if == 1 + if (uopt.deintMode == 1) // bob if == 1 toSend[4] |= (1 << 1); - // if (uopt->wantTap6) { + // if (uopt.wantTap6) { // toSend[4] |= (1 << 1); // } - if (uopt->wantFullHeight) + if (uopt.wantFullHeight) toSend[4] |= (1 << 2); - // if (uopt->matchPresetSource) + // if (uopt.matchPresetSource) // toSend[4] |= (1 << 3); - if (uopt->PalForce60 == 1) + if (uopt.PalForce60 == 1) toSend[4] |= (1 << 3); // system preferences - if (uopt->wantOutputComponent) + if (uopt.wantOutputComponent) toSend[5] |= (1 << 0); - if (uopt->enableCalibrationADC) + if (uopt.enableCalibrationADC) toSend[5] |= (1 << 1); - if (uopt->preferScalingRgbhv) + if (uopt.preferScalingRgbhv) toSend[5] |= (1 << 2); - if (uopt->disableExternalClockGenerator) + if (uopt.disableExternalClockGenerator) toSend[5] |= (1 << 3); // developer panel controls status - if(uopt->developerMode) + if(uopt.developerMode) toSend[6] |= (1 << 0); - if(rto->printInfos) + if(rto.printInfos) toSend[6] |= (1 << 1); - if(uopt->invertSync) + if(uopt.invertSync) toSend[6] |= (1 << 2); - if(rto->osr != 0) + if(rto.osr != 0) toSend[6] |= (1 << 3); - if(uopt->adcFilter) + if(uopt.adcFilter) toSend[6] |= (1 << 4); - if(uopt->debugView) + if(uopt.debugView) toSend[6] |= (1 << 5); - if(uopt->freezeCapture) + if(uopt.freezeCapture) toSend[6] |= (1 << 6); // system tab controls - if(rto->allowUpdatesOTA) + if(rto.allowUpdatesOTA) toSend[7] |= (1 << 0); webSocket.sendBIN(num, toSend, MESSAGE_LEN); diff --git a/src/wserver.h b/src/wserver.h index de8d9695..22f3b9b3 100644 --- a/src/wserver.h +++ b/src/wserver.h @@ -3,7 +3,7 @@ # File: wserver.h # # File Created: Friday, 19th April 2024 3:11:47 pm # # Author: Sergey Ko # -# Last Modified: Thursday, 13th June 2024 4:40:11 pm # +# Last Modified: Wednesday, 19th June 2024 12:44:38 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -35,6 +35,12 @@ extern ESP8266WebServer server; extern char serialCommand; extern char userCommand; +// see: serialCommand = 'D' +typedef struct { + uint8_t VDS_Y_OFST = 0; + uint8_t HD_Y_OFFSET = 0; +} debugRegister; + const char indexPage[] PROGMEM = "/__index"; const char backupFile[] PROGMEM = "/__backup"; const char notFouldMessage[] PROGMEM = "

    404 | Page Not Found

    "; From b88d64ff6b6c83f05f3e4f3ffa8ca6dc2c6f3a3b Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Thu, 20 Jun 2024 20:08:36 -0600 Subject: [PATCH 38/41] WIP: do not upload --- README.md | 1 + gbs-control.ino | 146 +++++++++++++++---------------- public/scripts/build.js | 12 ++- public/src/index.ts | 9 +- src/main.cpp | 150 +++++++++++++++----------------- src/menu.cpp | 24 +++--- src/options.h | 2 +- src/presets.cpp | 56 ++++++------ src/presets.h | 4 +- src/tv5725.h | 25 +++--- src/utils.cpp | 185 +++++++++++++++++++++++++++++++--------- src/utils.h | 10 ++- src/video.cpp | 158 +++++----------------------------- src/video.h | 6 +- src/wserver.cpp | 144 +++++++++++++++++++++++-------- 15 files changed, 499 insertions(+), 433 deletions(-) diff --git a/README.md b/README.md index 5562e3f3..f400d767 100644 --- a/README.md +++ b/README.md @@ -310,6 +310,7 @@ ESP8266 version of the factory built GBSC, boots into firmware upload mode by pr - [ ] disable ambigous preset paramters inside slots - [ ] startup reuntime parameters loading malfunction - [ ] De-interlacer noise reduction ctl. +- [ ] color artifacts on screen depending on SDRAM frequency - [x] fix OLEDMenu items list offset - [x] feature request [#553] - [x] creation/destruction OLEDMenuItem procedure diff --git a/gbs-control.ino b/gbs-control.ino index 31db2ef1..62634641 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -8,7 +8,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Wednesday, 19th June 2024 12:38:05 pm # +# Last Modified: Thursday, 20th June 2024 7:48:13 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -103,6 +103,13 @@ void setup() // bool powerOrWireIssue = false; lastVsyncLock = millis(); + pinMode(DEBUG_IN_PIN, INPUT); + pinMode(LED_BUILTIN, OUTPUT); + pinMode(PIN_CLK, INPUT_PULLUP); + pinMode(PIN_DATA, INPUT_PULLUP); + pinMode(PIN_SWITCH, INPUT_PULLUP); + LEDON; // enable the LED, lets users know the board is starting up + Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); @@ -158,13 +165,6 @@ void setup() // adco.g_off = 0; // adco.b_off = 0; - pinMode(DEBUG_IN_PIN, INPUT); - pinMode(LED_BUILTIN, OUTPUT); - pinMode(PIN_CLK, INPUT_PULLUP); - pinMode(PIN_DATA, INPUT_PULLUP); - pinMode(PIN_SWITCH, INPUT_PULLUP); - LEDON; // enable the LED, lets users know the board is starting up - // filesystem (web page, custom presets, etc) if (!LittleFS.begin()) { _DBGN(F("FS mount failed ((1M FS) selected?)")); @@ -229,25 +229,20 @@ void setup() } display.clear(); - // software reset - resetAllOffline(); - delay(100); - resetAllOnline(); - // load user preferences file if(!prefsLoad()) prefsLoadDefaults(); GBS::PAD_CKIN_ENZ::write(1); // disable to prevent startup spike damage - if(externalClockGenDetectAndInitialize() == -1) { + if(utilsExternClockGenInit() == -1) { retryExtClockDetect = true; _DBGN(F("(!) unable to detect ext. clock, going to try later...")); } // library may change i2c clock or pins, so restart - startWire(); - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); + // startWire(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); // delay 2 of 2 // ? WHY? @@ -262,7 +257,7 @@ void setup() // GBS::STATUS_00::read(); // GBS::STATUS_00::read(); - /* if (!checkBoardPower()) { + /* if (!utilsCheckBoardPower()) { _DBGN(F("(!) board has no power")); int i = 0; stopWire(); // sets pinmodes SDA, SCL to INPUT @@ -285,7 +280,7 @@ void setup() i++; } - if (!checkBoardPower()) { + if (!utilsCheckBoardPower()) { stopWire(); rto.syncWatcherEnabled = false; _DBGN(F("(!) timeout, unable to init board connection")); @@ -296,43 +291,48 @@ void setup() } */ // if (powerOrWireIssue == 0) { - if (checkBoardPower()) { - // second init, in cases where i2c got stuck earlier but has recovered - // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running - if (!rto.extClockGenDetected && retryExtClockDetect) - externalClockGenDetectAndInitialize(); - - zeroAll(); - setResetParameters(); - prepareSyncProcessor(); - - if (uopt.enableCalibrationADC) { - // enabled by default - calibrateAdcOffset(); - } + // second init, in cases where i2c got stuck earlier but has recovered + // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running + if (!rto.extClockGenDetected && retryExtClockDetect + && utilsExternClockGenInit() != 1) { + _WSN(F("\n (!) No external clock detected\n")); + return; + } - // prefs data loaded, load current slot - if(!slotLoad(uopt.slotID)) - slotResetFlush(uopt.slotID); - - // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here - // inputAndSyncDetect(); - // if (rto.syncWatcherEnabled == true) { - // rto.isInLowPowerMode = true; // just for initial detection; simplifies code later - // for (uint8_t i = 0; i < 3; i++) { - // if (inputAndSyncDetect()) { - // break; - // } - // } - // rto.isInLowPowerMode = false; - // } - } else { + // software reset + utilsZeroAll(); + // utilsResetAllOffline(); + // utilsResetOnline(); + delay(10); + // put system in the default state + presetsResetParameters(); + prepareSyncProcessor(); + + if (uopt.enableCalibrationADC) { + // enabled by default + calibrateAdcOffset(); + } + + // prefs data loaded, load current slot + if(!slotLoad(uopt.slotID)) + slotResetFlush(uopt.slotID); + + // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here + // inputAndSyncDetect(); + // if (rto.syncWatcherEnabled == true) { + // rto.isInLowPowerMode = true; // just for initial detection; simplifies code later + // for (uint8_t i = 0; i < 3; i++) { + // if (inputAndSyncDetect()) { + // break; + // } + // } + // rto.isInLowPowerMode = false; + // } + if(!utilsCheckBoardPower()) { _WSN(F("\n (!) Please check board power and cabling or restart\n")); return; } - LEDOFF; // LED behaviour: only light LED on active sync - // some debug tools leave garbage in the serial rx buffer discardSerialRxData(); @@ -343,6 +343,8 @@ void setup() ); // system init is OK rto.systemInitOK = true; + + LEDOFF; // LED behaviour: only light LED on active sync } @@ -360,7 +362,7 @@ void loop() wifiLoop(); // run FrameTimeLock if enabled - if (uopt.enableFrameTimeLock && rto.sourceDisconnected == false + if (uopt.enableFrameTimeLock && !rto.sourceDisconnected && rto.autoBestHtotalEnabled && rto.syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval && rto.continousStableCounter > 20 && rto.noSyncCounter == 0) @@ -391,7 +393,6 @@ void loop() if (debug_backup != 0x0) { GBS::TEST_BUS_SEL::write(debug_backup); } -_DBGN(F("11")); } lastVsyncLock = millis(); } @@ -406,7 +407,7 @@ _DBGN(F("11")); } // TODO heavy load for serial and WS. to reimplement - if (rto.printInfos == true) { + if (rto.printInfos) { printInfo(); } // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; @@ -418,14 +419,14 @@ _DBGN(F("11")); // } // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes - if (rto.sourceDisconnected == false && rto.syncWatcherEnabled == true + if (!rto.sourceDisconnected && rto.syncWatcherEnabled && (millis() - lastTimeSyncWatcher) > 20) { runSyncWatcher(); lastTimeSyncWatcher = millis(); // auto adc gain - if (uopt.enableAutoGain == 1 && !rto.sourceDisconnected + if (uopt.enableAutoGain && !rto.sourceDisconnected && rto.videoStandardInput > 0 && rto.clampPositionIsSet && rto.noSyncCounter == 0 && rto.continousStableCounter > 90 && rto.boardHasPower) @@ -464,10 +465,10 @@ _DBGN(F("11")); } // update clamp + coast positions after preset change // do it quickly - if ((rto.videoStandardInput <= 14 && rto.videoStandardInput != 0) && + if (rto.videoStandardInput <= 14 && rto.videoStandardInput != 0 && rto.syncWatcherEnabled && !rto.coastPositionIsSet) { if (rto.continousStableCounter >= 7) { - if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto.videoStandardInput)) { + if (getStatus16SpHsStable() == 1 && getVideoMode() == rto.videoStandardInput) { updateCoastPosition(0); if (rto.coastPositionIsSet && videoStandardInputIsPalNtscSd()) { // TODO: verify for other csync formats @@ -479,17 +480,16 @@ _DBGN(F("11")); } // don't exclude modes 13 / 14 / 15 (rgbhv bypass) - if ((rto.videoStandardInput != 0) && (rto.continousStableCounter >= 4) && + if (rto.videoStandardInput != 0 && rto.continousStableCounter >= 4 && !rto.clampPositionIsSet && rto.syncWatcherEnabled) { updateClampPosition(); if (rto.clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { GBS::SP_NO_CLAMP_REG::write(0); -_DBGN(F("6")); } } // later stage post preset adjustments - if ((rto.applyPresetDoneStage == 1) && + if (rto.applyPresetDoneStage == 1 && ((rto.continousStableCounter > 35 && rto.continousStableCounter < 45) || // this !rto.syncWatcherEnabled)) // or that { @@ -498,12 +498,10 @@ _DBGN(F("6")); GBS::DAC_RGBS_PWDNZ::write(1); // 2nd chance if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 2nd chance -_DBGN(F("72")); } if (!rto.syncWatcherEnabled) { updateClampPosition(); GBS::SP_NO_CLAMP_REG::write(0); // 5_57 0 -_DBGN(F("73")); } if (rto.extClockGenDetected && rto.videoStandardInput != 14) { @@ -519,41 +517,34 @@ _DBGN(F("73")); Si.enable(0); delayMicroseconds(800); GBS::PLL648_CONTROL_01::write(0x75); -_DBGN(F("76")); } -_DBGN(F("75")); } // sync clocks now externalClockGenSyncInOutRate(); -_DBGN(F("74")); } rto.applyPresetDoneStage = 0; -_DBGN(F("71")); } - } else if (rto.applyPresetDoneStage == 1 && (rto.continousStableCounter > 35)) { + } else if (rto.applyPresetDoneStage == 1 && rto.continousStableCounter > 35) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 3rd chance -_DBGN(F("81")); } // sync clocks now externalClockGenSyncInOutRate(); rto.applyPresetDoneStage = 0; // timeout -_DBGN(F("8")); } if (rto.applyPresetDoneStage == 10) { rto.applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutputHdBypassMode(false); -_DBGN(F("9")); } // Input signal detection - if (rto.syncWatcherEnabled == true && rto.sourceDisconnected == true && rto.boardHasPower) { + if (rto.syncWatcherEnabled && rto.sourceDisconnected && rto.boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { - if (checkBoardPower()) { + if (utilsCheckBoardPower()) { inputAndSyncDetect(); } else { // rto.boardHasPower = false; @@ -578,7 +569,7 @@ _DBGN(F("9")); // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues if ((rto.noSyncCounter == 61 || rto.noSyncCounter == 62) && rto.boardHasPower) { - if (!checkBoardPower()) { + if (!utilsCheckBoardPower()) { rto.noSyncCounter = 1; // some neutral "no sync" value rto.continousStableCounter = 0; // rto.syncWatcherEnabled = false; @@ -596,7 +587,7 @@ _DBGN(F("9")); if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { - _DBGN(F("board power is ok")); + _DBGN(F("(!) board power recovered")); delay(350); // i've seen the MTV230 go on briefly on GBS power cycle startWire(); { @@ -608,7 +599,8 @@ _DBGN(F("9")); GBS::STATUS_00::read(); } rto.syncWatcherEnabled = true; - rto.boardHasPower = true; + utilsCheckBoardPower(); + // rto.boardHasPower = true; delay(100); goLowPowerWithInputDetection(); } diff --git a/public/scripts/build.js b/public/scripts/build.js index 8b3d3f34..83fd18d5 100755 --- a/public/scripts/build.js +++ b/public/scripts/build.js @@ -3,8 +3,11 @@ if (!fs.existsSync('data')) { fs.mkdirSync('data') } const path = require('path'); -var html = fs.readFileSync('public/src/index.html.tpl', 'utf-8') -var js = fs.readFileSync('public/src/index.js', 'utf-8') +var html = fs + .readFileSync('public/src/index.html.tpl', 'utf-8') +var js = fs + .readFileSync('public/src/index.js', 'utf-8') + .replaceAll(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm, '') // // A simple script which does i18n of HTML template. @@ -89,7 +92,7 @@ fs.writeFileSync( 'data/webui.html', html .replace('${styles}', css) - .replace('${js}', js) + .replace('${js}', js.trim()) .replace('${favicon}', `data:image/png;base64,${favicon}`) .replace('${VERSION_FIRMWARE}', config['version']) .replace('${VERSION_UI}', package['version']) @@ -97,6 +100,7 @@ fs.writeFileSync( '${manifest}', `data:application/json;base64,${Buffer.from(manifest).toString('base64')}` ) - .replace('${icon1024}', `data:image/png;base64,${icon1024}`), + .replace('${icon1024}', `data:image/png;base64,${icon1024}`) + .trim(), 'utf8' ) \ No newline at end of file diff --git a/public/src/index.ts b/public/src/index.ts index 17d31b3e..b57ff93d 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -753,7 +753,10 @@ const createWebSocket = () => { ) const freezeCaptureButton = document.querySelector( `button[gbs-message="F"][gbs-message-type="user"]` - ); + ) + const syncWatcherButton = document.querySelector( + `button[gbs-message="m"][gbs-message-type="action"]` + ) if ((optionByte6 & 0x01) == 0x01) GBSControl.developerMode = true; else @@ -784,6 +787,10 @@ const createWebSocket = () => { freezeCaptureButton.setAttribute('active', '') else freezeCaptureButton.removeAttribute('active') + if ((optionByte6 & 0x80) == 0x80) + syncWatcherButton.setAttribute('active', '') + else + syncWatcherButton.removeAttribute('active') // system tab const enableOTAButton = document.querySelector( diff --git a/src/main.cpp b/src/main.cpp index f6ef4509..3fbe8e6d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Wednesday, 19th June 2024 1:02:38 pm # +# Last Modified: Thursday, 20th June 2024 7:48:13 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -98,6 +98,13 @@ void setup() // bool powerOrWireIssue = false; lastVsyncLock = millis(); + pinMode(DEBUG_IN_PIN, INPUT); + pinMode(LED_BUILTIN, OUTPUT); + pinMode(PIN_CLK, INPUT_PULLUP); + pinMode(PIN_DATA, INPUT_PULLUP); + pinMode(PIN_SWITCH, INPUT_PULLUP); + LEDON; // enable the LED, lets users know the board is starting up + Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); @@ -153,13 +160,6 @@ void setup() // adco.g_off = 0; // adco.b_off = 0; - pinMode(DEBUG_IN_PIN, INPUT); - pinMode(LED_BUILTIN, OUTPUT); - pinMode(PIN_CLK, INPUT_PULLUP); - pinMode(PIN_DATA, INPUT_PULLUP); - pinMode(PIN_SWITCH, INPUT_PULLUP); - LEDON; // enable the LED, lets users know the board is starting up - // filesystem (web page, custom presets, etc) if (!LittleFS.begin()) { _DBGN(F("FS mount failed ((1M FS) selected?)")); @@ -224,25 +224,20 @@ void setup() } display.clear(); - // software reset - resetAllOffline(); - delay(100); - resetAllOnline(); - // load user preferences file if(!prefsLoad()) prefsLoadDefaults(); GBS::PAD_CKIN_ENZ::write(1); // disable to prevent startup spike damage - if(externalClockGenDetectAndInitialize() == -1) { + if(utilsExternClockGenInit() == -1) { retryExtClockDetect = true; _DBGN(F("(!) unable to detect ext. clock, going to try later...")); } // library may change i2c clock or pins, so restart - startWire(); - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); - GBS::STATUS_00::read(); + // startWire(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); + // GBS::STATUS_00::read(); // delay 2 of 2 // ? WHY? @@ -257,7 +252,7 @@ void setup() // GBS::STATUS_00::read(); // GBS::STATUS_00::read(); - /* if (!checkBoardPower()) { + /* if (!utilsCheckBoardPower()) { _DBGN(F("(!) board has no power")); int i = 0; stopWire(); // sets pinmodes SDA, SCL to INPUT @@ -280,7 +275,7 @@ void setup() i++; } - if (!checkBoardPower()) { + if (!utilsCheckBoardPower()) { stopWire(); rto.syncWatcherEnabled = false; _DBGN(F("(!) timeout, unable to init board connection")); @@ -291,53 +286,60 @@ void setup() } */ // if (powerOrWireIssue == 0) { - if (checkBoardPower()) { - // second init, in cases where i2c got stuck earlier but has recovered - // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running - if (!rto.extClockGenDetected && retryExtClockDetect) - externalClockGenDetectAndInitialize(); - - zeroAll(); - setResetParameters(); - prepareSyncProcessor(); - - if (uopt.enableCalibrationADC) { - // enabled by default - calibrateAdcOffset(); - } + // second init, in cases where i2c got stuck earlier but has recovered + // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running + if (!rto.extClockGenDetected && retryExtClockDetect + && utilsExternClockGenInit() != 1) { + _WSN(F("\n (!) No external clock detected\n")); + return; + } - // prefs data loaded, load current slot - if(!slotLoad(uopt.slotID)) - slotResetFlush(uopt.slotID); - - // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here - // inputAndSyncDetect(); - // if (rto.syncWatcherEnabled == true) { - // rto.isInLowPowerMode = true; // just for initial detection; simplifies code later - // for (uint8_t i = 0; i < 3; i++) { - // if (inputAndSyncDetect()) { - // break; - // } - // } - // rto.isInLowPowerMode = false; - // } - } else { + // software reset + utilsZeroAll(); + // utilsResetAllOffline(); + // utilsResetOnline(); + delay(10); + // put system in the default state + presetsResetParameters(); + prepareSyncProcessor(); + + if (uopt.enableCalibrationADC) { + // enabled by default + calibrateAdcOffset(); + } + + // prefs data loaded, load current slot + if(!slotLoad(uopt.slotID)) + slotResetFlush(uopt.slotID); + + // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here + // inputAndSyncDetect(); + // if (rto.syncWatcherEnabled == true) { + // rto.isInLowPowerMode = true; // just for initial detection; simplifies code later + // for (uint8_t i = 0; i < 3; i++) { + // if (inputAndSyncDetect()) { + // break; + // } + // } + // rto.isInLowPowerMode = false; + // } + if(!utilsCheckBoardPower()) { _WSN(F("\n (!) Please check board power and cabling or restart\n")); return; } - LEDOFF; // LED behaviour: only light LED on active sync - // some debug tools leave garbage in the serial rx buffer discardSerialRxData(); - _DBGF(PSTR("\n GBS-Control v.%s\n\n\nTV id: 0x%02X rev: 0x%02X\n"), + _DBGF(PSTR("\n\n GBS-Control v.%s\n\n\nTV id: 0x%02X rev: 0x%02X\n"), STRING(VERSION), GBS::CHIP_ID_PRODUCT::read(), GBS::CHIP_ID_REVISION::read() ); // system init is OK rto.systemInitOK = true; + + LEDOFF; // LED behaviour: only light LED on active sync } @@ -355,7 +357,7 @@ void loop() wifiLoop(); // run FrameTimeLock if enabled - if (uopt.enableFrameTimeLock && rto.sourceDisconnected == false + if (uopt.enableFrameTimeLock && !rto.sourceDisconnected && rto.autoBestHtotalEnabled && rto.syncWatcherEnabled && FrameSync::ready() && millis() - lastVsyncLock > FrameSyncAttrs::lockInterval && rto.continousStableCounter > 20 && rto.noSyncCounter == 0) @@ -386,7 +388,6 @@ void loop() if (debug_backup != 0x0) { GBS::TEST_BUS_SEL::write(debug_backup); } -_DBGN(F("11")); } lastVsyncLock = millis(); } @@ -401,7 +402,7 @@ _DBGN(F("11")); } // TODO heavy load for serial and WS. to reimplement - if (rto.printInfos == true) { + if (rto.printInfos) { printInfo(); } // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; @@ -413,14 +414,14 @@ _DBGN(F("11")); // } // syncwatcher polls SP status. when necessary, initiates adjustments or preset changes - if (rto.sourceDisconnected == false && rto.syncWatcherEnabled == true + if (!rto.sourceDisconnected && rto.syncWatcherEnabled && (millis() - lastTimeSyncWatcher) > 20) { runSyncWatcher(); lastTimeSyncWatcher = millis(); // auto adc gain - if (uopt.enableAutoGain == 1 && !rto.sourceDisconnected + if (uopt.enableAutoGain && !rto.sourceDisconnected && rto.videoStandardInput > 0 && rto.clampPositionIsSet && rto.noSyncCounter == 0 && rto.continousStableCounter > 90 && rto.boardHasPower) @@ -459,10 +460,10 @@ _DBGN(F("11")); } // update clamp + coast positions after preset change // do it quickly - if ((rto.videoStandardInput <= 14 && rto.videoStandardInput != 0) && + if (rto.videoStandardInput <= 14 && rto.videoStandardInput != 0 && rto.syncWatcherEnabled && !rto.coastPositionIsSet) { if (rto.continousStableCounter >= 7) { - if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto.videoStandardInput)) { + if (getStatus16SpHsStable() == 1 && getVideoMode() == rto.videoStandardInput) { updateCoastPosition(0); if (rto.coastPositionIsSet && videoStandardInputIsPalNtscSd()) { // TODO: verify for other csync formats @@ -474,17 +475,16 @@ _DBGN(F("11")); } // don't exclude modes 13 / 14 / 15 (rgbhv bypass) - if ((rto.videoStandardInput != 0) && (rto.continousStableCounter >= 4) && + if (rto.videoStandardInput != 0 && rto.continousStableCounter >= 4 && !rto.clampPositionIsSet && rto.syncWatcherEnabled) { updateClampPosition(); if (rto.clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { GBS::SP_NO_CLAMP_REG::write(0); -_DBGN(F("6")); } } // later stage post preset adjustments - if ((rto.applyPresetDoneStage == 1) && + if (rto.applyPresetDoneStage == 1 && ((rto.continousStableCounter > 35 && rto.continousStableCounter < 45) || // this !rto.syncWatcherEnabled)) // or that { @@ -493,12 +493,10 @@ _DBGN(F("6")); GBS::DAC_RGBS_PWDNZ::write(1); // 2nd chance if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 2nd chance -_DBGN(F("72")); } if (!rto.syncWatcherEnabled) { updateClampPosition(); GBS::SP_NO_CLAMP_REG::write(0); // 5_57 0 -_DBGN(F("73")); } if (rto.extClockGenDetected && rto.videoStandardInput != 14) { @@ -514,41 +512,34 @@ _DBGN(F("73")); Si.enable(0); delayMicroseconds(800); GBS::PLL648_CONTROL_01::write(0x75); -_DBGN(F("76")); } -_DBGN(F("75")); } // sync clocks now externalClockGenSyncInOutRate(); -_DBGN(F("74")); } rto.applyPresetDoneStage = 0; -_DBGN(F("71")); } - } else if (rto.applyPresetDoneStage == 1 && (rto.continousStableCounter > 35)) { + } else if (rto.applyPresetDoneStage == 1 && rto.continousStableCounter > 35) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance if (!uopt.wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 3rd chance -_DBGN(F("81")); } // sync clocks now externalClockGenSyncInOutRate(); rto.applyPresetDoneStage = 0; // timeout -_DBGN(F("8")); } if (rto.applyPresetDoneStage == 10) { rto.applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutputHdBypassMode(false); -_DBGN(F("9")); } // Input signal detection - if (rto.syncWatcherEnabled == true && rto.sourceDisconnected == true && rto.boardHasPower) { + if (rto.syncWatcherEnabled && rto.sourceDisconnected && rto.boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { - if (checkBoardPower()) { + if (utilsCheckBoardPower()) { inputAndSyncDetect(); } else { // rto.boardHasPower = false; @@ -573,7 +564,7 @@ _DBGN(F("9")); // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues if ((rto.noSyncCounter == 61 || rto.noSyncCounter == 62) && rto.boardHasPower) { - if (!checkBoardPower()) { + if (!utilsCheckBoardPower()) { rto.noSyncCounter = 1; // some neutral "no sync" value rto.continousStableCounter = 0; // rto.syncWatcherEnabled = false; @@ -591,7 +582,7 @@ _DBGN(F("9")); if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { - _DBGN(F("board power is ok")); + _DBGN(F("(!) board power recovered")); delay(350); // i've seen the MTV230 go on briefly on GBS power cycle startWire(); { @@ -603,8 +594,9 @@ _DBGN(F("9")); GBS::STATUS_00::read(); } rto.syncWatcherEnabled = true; - rto.boardHasPower = true; - // delay(100); + utilsCheckBoardPower(); + // rto.boardHasPower = true; + delay(100); goLowPowerWithInputDetection(); } } diff --git a/src/menu.cpp b/src/menu.cpp index 21eb116f..f9471f5e 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Tuesday, 18th June 2024 1:29:36 pm # +# Last Modified: Thursday, 20th June 2024 6:26:05 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -860,14 +860,22 @@ void menuInit() { * */ void menuLoop() { - #if ! USE_NEW_OLED_MENU +#ifdef HAVE_BUTTONS + static unsigned long lastButton = micros(); + if (micros() - lastButton > buttonPollInterval) { + lastButton = micros(); + handleButtons(); + } +#endif // HAVE_BUTTONS + +#if USE_NEW_OLED_MENU != 1 settingsMenuOLED(); if (oled_encoder_pos != oled_lastCount) { oled_lastCount = oled_encoder_pos; } - #else // \! USE_NEW_OLED_MENU +#else // \! USE_NEW_OLED_MENU uint8_t oldIsrID = rotaryIsrID; // make sure no rotary encoder isr happened while menu was updating. @@ -878,13 +886,5 @@ void menuLoop() { oledNav = OLEDMenuNav::IDLE; } - #endif // \! USE_NEW_OLED_MENU - -#ifdef HAVE_BUTTONS - static unsigned long lastButton = micros(); - if (micros() - lastButton > buttonPollInterval) { - lastButton = micros(); - handleButtons(); - } -#endif // HAVE_BUTTONS +#endif // \! USE_NEW_OLED_MENU } \ No newline at end of file diff --git a/src/options.h b/src/options.h index ce53f604..bcdbb326 100644 --- a/src/options.h +++ b/src/options.h @@ -185,7 +185,7 @@ typedef struct // system state bool systemInitOK = false; // source identification - bool boardHasPower = true; // ambigous, it is enough to checkBoardPower at all times + bool boardHasPower = true; // ambigous, it is enough to utilsCheckBoardPower at all times uint8_t continousStableCounter = 0; bool syncWatcherEnabled = true; bool inputIsYPbPr = false; diff --git a/src/presets.cpp b/src/presets.cpp index 560f57e2..855114b5 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Wednesday, 19th June 2024 12:43:23 pm # +# Last Modified: Thursday, 20th June 2024 6:23:27 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -37,7 +37,7 @@ void loadPresetMdSection() * @brief reset runtime parameters and some registers * */ -void setResetParameters() +void presetsResetParameters() { rto.videoStandardInput = 0; rto.presetDisplayClock = 0; @@ -95,7 +95,6 @@ void setResetParameters() FrameSync::cleanup(); GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD - GBS::DAC_RGBS_PWDNZ::write(0); // disable DAC GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 1 // minor SOG clamp effect GBS::ADC_TEST_04::write(0x02); // 5_04 GBS::ADC_TEST_0C::write(0x12); // 5_0c 1 4 @@ -142,7 +141,6 @@ void setResetParameters() GBS::PLLAD_CONTROL_00_5x11::write(0x01); // reset on resetDebugPort(); - // GBS::RESET_CONTROL_0x47::write(0x16); GBS::RESET_CONTROL_0x46::write(0x41); // new 23.07.19 GBS::RESET_CONTROL_0x47::write(0x17); // new 23.07.19 (was 0x16) GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts @@ -154,6 +152,8 @@ void setResetParameters() rto.phaseIsSet = 0; rto.continousStableCounter = 0; + _DBGN(F("(!) reset preset parameters")); + serialCommand = '@'; userCommand = '@'; } @@ -164,6 +164,7 @@ void setResetParameters() */ void doPostPresetLoadSteps() { + bool avoidAutoBest = false; // unsigned long postLoadTimer = millis(); // delay(10); // adco.r_gain gets applied if uopt.enableAutoGain is set. @@ -203,7 +204,7 @@ void doPostPresetLoadSteps() // GBS::ADC_UNUSED_65::write(0); // clear temp storage // GBS::ADC_UNUSED_66::write(0); // GBS::ADC_UNUSED_67::write(0); // clear temp storage - // GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) + GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) // if preset is not loaded from FS if (!rto.isCustomPreset) @@ -331,13 +332,13 @@ void doPostPresetLoadSteps() rto.boardHasPower = true; // same // if (rto.presetID == 0x06 || rto.presetID == 0x16) { - if (utilsIsDownscaleMode()) - { + // if (utilsIsDownscaleMode()) + // { // override so it applies section 2 deinterlacer settings - rto.isCustomPreset = false; - } + // rto.isCustomPreset = false; + // } - if (!rto.isCustomPreset) + if (!rto.isCustomPreset || utilsIsDownscaleMode()) { if (rto.videoStandardInput == 3 || rto.videoStandardInput == 4 || rto.videoStandardInput == 8 || rto.videoStandardInput == 9) @@ -665,7 +666,6 @@ void doPostPresetLoadSteps() resetDebugPort(); - bool avoidAutoBest = 0; if (rto.syncTypeCsync) { if (GBS::TEST_BUS_2F::read() == 0) @@ -748,7 +748,7 @@ void doPostPresetLoadSteps() GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 // auto ADC gain - if (uopt.enableAutoGain == 1) + if (uopt.enableAutoGain) { if (adco.r_gain == 0) { @@ -870,7 +870,7 @@ void doPostPresetLoadSteps() { GBS::PAD_SYNC_OUT_ENZ::write(0); // sync out } - delay(70); // minimum delay without random failures: TBD + delay(100); // minimum delay without random failures: TBD for (uint8_t i = 0; i < 4; i++) { @@ -901,7 +901,7 @@ void doPostPresetLoadSteps() if (ok) { // else leave it for later runAutoBestHTotal(); - delay(1); // wifi + // delay(1); // wifi break; } } @@ -1060,13 +1060,13 @@ void doPostPresetLoadSteps() unsigned long timeout = millis(); while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { - delay(4); + delay(10); // wifiLoop(0); updateStopPositionDynamic(false); } while ((getVideoMode() == 0) && (millis() - timeout < 1505)) { - delay(4); + delay(10); // wifiLoop(0); updateStopPositionDynamic(false); } @@ -1178,11 +1178,10 @@ void doPostPresetLoadSteps() if (utilsIsPassThroughMode()) { _WS(F(" (bypass)")); - } - // else if (rto.isCustomPreset) - // { - // _WS(F(" (custom)")); - // } + } /* else if (rto.isCustomPreset) + { + _WS(F(" (custom)")); + } */ _WS(F(" for ")); if (rto.videoStandardInput == 1) @@ -1241,7 +1240,7 @@ void doPostPresetLoadSteps() */ void applyPresets(uint8_t videoMode) { - bool waitExtra = 0; + bool waitExtra = false; // TODO replace videoMode with VideoStandardInput enum if (!rto.boardHasPower) @@ -1271,7 +1270,7 @@ void applyPresets(uint8_t videoMode) // if (rto.outModeHdBypass || rto.videoStandardInput == 15 || rto.videoStandardInput == 0) if (uopt.resolutionID == OutputHdBypass || rto.videoStandardInput == 15 || rto.videoStandardInput == 0) { - waitExtra = 1; + waitExtra = true; if (videoMode <= 4 || videoMode == 14 || videoMode == 8 || videoMode == 9) { GBS::SFTRST_IF_RSTZ::write(1); // early init @@ -1296,7 +1295,8 @@ void applyPresets(uint8_t videoMode) // serialCommand = 'D'; // debug view // } // } - +// FIXME to remove +_DBGF(PSTR("apply presets: %d\n"), videoMode); if (videoMode == 0) { // Unknown @@ -1335,12 +1335,12 @@ void applyPresets(uint8_t videoMode) { // found nothing at all, turn off output - // If we call setResetParameters(), soon afterwards loop() -> + // If we call presetsResetParameters(), soon afterwards loop() -> // inputAndSyncDetect() -> goLowPowerWithInputDetection() will - // call setResetParameters() again. But if we don't call - // setResetParameters() here, the second call will never happen. + // call presetsResetParameters() again. But if we don't call + // presetsResetParameters() here, the second call will never happen. _DBGN(F("(!) reset runtime parameters while applying preset")); - setResetParameters(); + presetsResetParameters(); // Deselect the output resolution in the web UI. We cannot call // doPostPresetLoadSteps() to select the right resolution, since diff --git a/src/presets.h b/src/presets.h index 7060c902..496f5d27 100644 --- a/src/presets.h +++ b/src/presets.h @@ -3,7 +3,7 @@ # File: presets.h # # File Created: Thursday, 2nd May 2024 6:38:29 pm # # Author: # -# Last Modified: Saturday, 15th June 2024 12:59:28 pm # +# Last Modified: Wednesday, 19th June 2024 7:05:06 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -37,7 +37,7 @@ extern char serialCommand; extern char userCommand; void loadPresetMdSection(); -void setResetParameters(); +void presetsResetParameters(); void doPostPresetLoadSteps(); void applyPresets(uint8_t result); void loadPresetDeinterlacerSection(); diff --git a/src/tv5725.h b/src/tv5725.h index 67c9c1af..1c90d4ef 100644 --- a/src/tv5725.h +++ b/src/tv5725.h @@ -173,10 +173,11 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x00, 0x40, 1, 1> PLL_DIVBY2Z; // DIVBY2Z, PLL source clock divide bypass (When = 0, PLL source clock divide by two When = 1, PLL source clock bypass divide) typedef UReg<0x00, 0x40, 2, 1> PLL_IS; // IS, ICLK source selection (When = 0, ICLK use PLL clock When = 1, ICLK use input clock) typedef UReg<0x00, 0x40, 3, 1> PLL_ADS; // ADS, input clock selection (When = 0, input clock is from PCLKIN(pin40) When = 1, input clock is from ADC) - typedef UReg<0x00, 0x40, 4, 3> PLL_MS; // MS[2:0], memory clock control - // When = 000, memory clock =108MHz + typedef UReg<0x00, 0x40, 4, 3> PLL_MS; // Memory clock control: + // When = 000, memory clock = 108MHz // When = 001, memory clock = 81MHz - // When = 010, memory clock from FBCLK (pin110) When = 011, memory clock = 162MHz + // When = 010, memory clock from FBCLK (pin 110) + // When = 011, memory clock = 162MHz // When = 100, memory clock = 144MHz // When = 101, memory clock = 185MHz // When = 110, memory clock = 216MHz @@ -220,7 +221,7 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x00, 0x47, 0, 8> RESET_CONTROL_0x47; // CONTROL 01 typedef UReg<0x00, 0x47, 0, 1> SFTRST_DEC_RSTZ; // Decimation reset control (When = 0, decimation is in reset status; When = 1, decimation work normally) typedef UReg<0x00, 0x47, 1, 1> SFTRST_MODE_RSTZ; // Mode detection reset control (When = 0, mode detection is in reset status When = 1, mode detection work normally) - typedef UReg<0x00, 0x47, 2, 1> SFTRST_SYNC_RSTZ; // Sync procesor reset control (When = 0, sync processor is in reset status When = 1, sync processor work normally) + typedef UReg<0x00, 0x47, 2, 1> SFTRST_SYNC_RSTZ; // Sync processor reset control (When = 0, sync processor is in reset status When = 1, sync processor work normally) typedef UReg<0x00, 0x47, 3, 1> SFTRST_HDBYPS_RSTZ; // HD bypass channel reset control (When = 0, HD bypass is in reset status; When = 1, HD bypasswork normally) typedef UReg<0x00, 0x47, 4, 1> SFTRST_INT_RSTZ; // Interrupt generator reset control (When = 0, interrupt generator is in reset status; When = 1, interrupt generator work normally) // 47_5:3 - reserved @@ -253,11 +254,15 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x00, 0x4E, 0, 1> DIGOUT_BYPS2PAD; // HD bypass channel to digital output control (When = 0, disable HD bypass to digital output; When = 1, enable HD bypass to digital output (VG_[7:0], VR_[7:0], VB_[7:0])) typedef UReg<0x00, 0x4E, 1, 1> DIGOUT_ADC2PAD; // ADC to digital output control (When = 0, disable ADC to digital output; When = 1, enable ADC (with decimation) to digital output (VG, VR, VB)) // 4E_2:6 - reserved - typedef UReg<0x00, 0x4F, 0, 1> DAC_RGBS_V4CLK_INVT; // V4CLK invert control () - typedef UReg<0x00, 0x4F, 1, 1> OUT_CLK_PHASE_CNTRL; // CLKOUT invert control () - typedef UReg<0x00, 0x4F, 2, 1> OUT_CLK_EN; // CLKOUT selection control () - typedef UReg<0x00, 0x4F, 3, 2> CLKOUT_EN; // CLKOUT enable control () - typedef UReg<0x00, 0x4F, 5, 1> OUT_SYNC_CNTRL; // H/V sync output enable () + typedef UReg<0x00, 0x4F, 0, 1> DAC_RGBS_V4CLK_INVT; // V4CLK invert control (When = 0, V4CLK to DAC directly; When = 1, V4CLK will invert before go to DAC) + typedef UReg<0x00, 0x4F, 1, 1> OUT_CLK_PHASE_CNTRL; // CLKOUT invert control (When = 0, CLKOUT output no invert; When = 1, CLKOUT will invert before output) + typedef UReg<0x00, 0x4F, 2, 2> OUT_CLK_EN; // CLKOUT selection control: + // When = 00, CLKOUT = V4CLK + // When = 01, CLKOUT = V2CLK + // When = 10, CLKOUT = VCLK + // When = 11, CLKOUT = ADC output clock + typedef UReg<0x00, 0x4F, 4, 1> CLKOUT_EN; // CLKOUT enable control (When = 0, disable CLKOUT to PAD When = 1, enable CLKOUT to PAD) + typedef UReg<0x00, 0x4F, 5, 1> OUT_SYNC_CNTRL; // H/V sync output enable (When = 0, disable H/V sync output to PAD When = 1, enable H/V sync output to PAD) typedef UReg<0x00, 0x4F, 6, 2> OUT_SYNC_SEL; // H/V sync output selection control // When = 00, H/V sync output are from vds_proc // When = 01, H/V sync output are from HD bypass @@ -398,7 +403,7 @@ class TV5725 : public tw::SegmentedSlave typedef UReg<0x01, 0x2A, 0, 4> IF_AUTO_OFST_U_RANGE; // U channel offset detection range typedef UReg<0x01, 0x2A, 4, 4> IF_AUTO_OFST_V_RANGE; // V channel offset detection range // 01_2B:2F - not described registers - typedef UReg<0x01, 0x2B, 0, 7> GBS_PRESET_ID; + typedef UReg<0x01, 0x2B, 0, 7> GBS_PRESET_ID; // used to store output resolutionID // ! @sk: supressed for now // typedef UReg<0x01, 0x2B, 7, 1> GBS_PRESET_CUSTOM; diff --git a/src/utils.cpp b/src/utils.cpp index 291329a4..08365c29 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,7 +3,7 @@ # File: utils.cpp # # File Created: Thursday, 2nd May 2024 5:37:47 pm # # Author: # -# Last Modified: Wednesday, 19th June 2024 11:36:06 am # +# Last Modified: Thursday, 20th June 2024 6:41:56 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -585,6 +585,70 @@ void startWire() // Wire.setClock(700000); } +/** + * @brief Detect if external clock installed + * + * @return int8_t + * 1 = device ready, init completed, + * 0 - no device detected + * -1 - any other error + */ +int8_t utilsExternClockGenInit() +{ + const uint8_t xtal_cl = 0xD2; // 10pF, other choices are 8pF (0x92) and 6pF (0x52) NOTE: Per AN619, the low bytes should be written 0b010010 + + // MHz: 27, 32.4, 40.5, 54, 64.8, 81, 108, 129.6, 162 + rto.freqExtClockGen = 81000000; + rto.extClockGenDetected = 0; + + if (uopt.disableExternalClockGenerator) { + _DBGN(F("(!) external clock generator disabled, skipping detection")); + return 0; + } + + uint8_t retVal = 0; + Wire.beginTransmission(SIADDR); + // returns: + // 4 = line busy + // 3 = received NACK on transmit of data + // 2 = received NACK on transmit of address + // 0 = success + retVal = Wire.endTransmission(); + _DBGF(PSTR("(i) external clock, status: %d\n"), retVal); + if (retVal != 0) { + return -1; + } + + Wire.beginTransmission(SIADDR); + Wire.write(0); // Device Status + Wire.endTransmission(); + size_t bytes_read = Wire.requestFrom((uint8_t)SIADDR, (size_t)1, false); + + if (bytes_read == 1) { + retVal = Wire.read(); + if ((retVal & 0x80) == 0) { + // SYS_INIT indicates device is ready. + rto.extClockGenDetected = 1; + } else { + return 0; + } + } else { + return -1; + } + + _DBGN(F("external clock detected")); + + Si.init(25000000L); // many Si5351 boards come with 25MHz crystal; 27000000L for one with 27MHz + Wire.beginTransmission(SIADDR); + Wire.write(183); // XTAL_CL + Wire.write(xtal_cl); + Wire.endTransmission(); + Si.setPower(0, SIOUT_6mA); + Si.setFreq(0, rto.freqExtClockGen); + Si.disable(0); + return 1; +} + /** * @brief Check if TV chip is acting as expeced when all systems are powered-on * (this function sets rto.boardHasPower status variable) @@ -592,14 +656,12 @@ void startWire() * @return true * @return false */ -bool checkBoardPower() +bool utilsCheckBoardPower() { - // assume everything works fine, then read specific registers and decide - rto.boardHasPower = true; - // check DAC + // check DAC (disabled by default) if(!rto.isInLowPowerMode && GBS::DAC_RGBS_PWDNZ::read() == 0) { - _DBGN(F("(!) DAC is in power down mode")); - goto board_power_bad; + _DBGN(F("(i) DAC is in power down mode")); + // goto board_power_bad; } // check ADC @@ -609,16 +671,19 @@ bool checkBoardPower() } // check PLL power - if(GBS::PLLAD_PDZ::read() == 0) { - _DBGN(F("(!) PLL is in power down mode")); - goto board_power_bad; - } + // if(GBS::PLLAD_PDZ::read() == 0) { + // _DBGN(F("(i) PLL is in power down mode")); + // // goto board_power_bad; + // } - return true; + rto.boardHasPower = true; + goto board_power_end; board_power_bad: rto.boardHasPower = false; - return false; + +board_power_end: + return rto.boardHasPower; // GBS::ADC_UNUSED_69::write(0x6a); // 0110 1010 // if (GBS::ADC_UNUSED_69::read() == 0x6a) { @@ -634,25 +699,6 @@ bool checkBoardPower() // rto.boardHasPower = false; // return false; - - // stopWire(); // sets pinmodes SDA, SCL to INPUT - // uint8_t SCL_SDA = 0; - // for (int i = 0; i < 2; i++) { - // SCL_SDA += digitalRead(SCL); - // SCL_SDA += digitalRead(SDA); - // } - - // if (SCL_SDA != 6) - //{ - // if (rto.boardHasPower == true) { - // _WSN("! power / i2c lost !"); - // } - // // I2C stays off and pins are INPUT - // return 0; - // } - - // startWire(); - // return 1; } /** @@ -662,12 +708,15 @@ bool checkBoardPower() * state machine is only reset by external reset..." * */ -void resetAllOffline() { +void utilsResetAllOffline() { GBS::PLL_VCORST::write(1); GBS::ADC_POWDZ::write(0); GBS::PLLAD_PDZ::write(0); + GBS::PLLAD_LEN::write(0); GBS::DAC_RGBS_PWDNZ::write(0); + GBS::OUT_SYNC_CNTRL::write(0); + GBS::SFTRST_VDS_RSTZ::write(0); GBS::SFTRST_SYNC_RSTZ::write(0); GBS::SFTRST_DEC_RSTZ::write(0); GBS::SFTRST_IF_RSTZ::write(0); @@ -676,22 +725,25 @@ void resetAllOffline() { GBS::SFTRST_MEM_RSTZ::write(0); GBS::SFTRST_FIFO_RSTZ::write(0); GBS::SFTRST_OSD_RSTZ::write(0); - GBS::SFTRST_VDS_RSTZ::write(0); GBS::SFTRST_MODE_RSTZ::write(0); GBS::SFTRST_HDBYPS_RSTZ::write(0); GBS::SFTRST_INT_RSTZ::write(0); + + GBS::PAD_CONTROL_00_0x48::write(0); + GBS::PAD_CONTROL_01_0x49::write(0); } /** * @brief All systems online * */ -void resetAllOnline() { - GBS::PLLAD_VCORST::write(1); - +void utilsResetOnline() { GBS::ADC_POWDZ::write(1); - GBS::PLLAD_PDZ::write(1); + resetDigital(); + resetPLLAD(); + GBS::PLLAD_LEN::write(1); GBS::DAC_RGBS_PWDNZ::write(1); + GBS::OUT_SYNC_CNTRL::write(1); GBS::SFTRST_SYNC_RSTZ::write(1); GBS::SFTRST_DEC_RSTZ::write(1); GBS::SFTRST_IF_RSTZ::write(1); @@ -704,6 +756,63 @@ void resetAllOnline() { GBS::SFTRST_MODE_RSTZ::write(1); GBS::SFTRST_HDBYPS_RSTZ::write(1); GBS::SFTRST_INT_RSTZ::write(1); + + // GBS::PAD_CONTROL_00_0x48::write(0x2b); + GBS::PAD_CKIN_ENZ::write(1); + GBS::PAD_CKOUT_ENZ::write(1); + GBS::PAD_SYNC_OUT_ENZ::write(1); + GBS::PAD_BLK_OUT_ENZ::write(1); + GBS::PAD_TRI_ENZ::write(1); +} + +/** + * @brief Clear tv5725 registers + * "All registers (except chapter 01 status register is read only) + * have default value “0x00” after power up." + * "All registers require segment for access. + * Segment is defined in address F0." + * + */ +void utilsZeroAll() +{ + // this goes into utilsResetAllOffline() + // turn processing units off first + // writeOneByte(0xF0, 0); + // writeOneByte(0x46, 0x00); // reset controls 1 + // writeOneByte(0x47, 0x00); // reset controls 2 + + // zero out entire register space = (6 segments * 255 bytes) + uint8_t y = 0; + uint8_t z = 0; + + while (y < 6) { + writeOneByte(0xF0, y); + // skip RO registers + if(y == 0) z = 3; + while (z < 16) { + // while(w < 16) { + // bank[w] = 0; + // // exceptions + // // if (y == 5 && z == 0 && w == 2) { + // // bank[w] = 0x51; // 5_02 + // //} + // // if (y == 5 && z == 5 && w == 6) { + // // bank[w] = 0x01; // 5_56 + // //} + // // if (y == 5 && z == 5 && w == 7) { + // // bank[w] = 0xC0; // 5_57 + // //} + // w++; + // } + uint8_t bank[16]; + memset(bank, 0, 16); + writeBytes(z * 16, bank, 16); + z++; + } + z = 0; + y++; + } + _DBGN(F("(!) all registers reset")); } /** diff --git a/src/utils.h b/src/utils.h index 9516053c..7b4eac76 100644 --- a/src/utils.h +++ b/src/utils.h @@ -3,7 +3,7 @@ # File: utils.h # # File Created: Thursday, 2nd May 2024 5:38:14 pm # # Author: # -# Last Modified: Tuesday, 18th June 2024 2:46:52 pm # +# Last Modified: Wednesday, 19th June 2024 8:19:02 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -54,9 +54,11 @@ void dumpRegisters(byte segment); void stopWire(); void startWire(); -bool checkBoardPower(); -void resetAllOffline(); -void resetAllOnline(); +int8_t utilsExternClockGenInit(); +bool utilsCheckBoardPower(); +void utilsResetAllOffline(); +void utilsResetOnline(); +void utilsZeroAll(); void calibrateAdcOffset(); void setExternalClockGenFrequencySmooth(uint32_t freq); diff --git a/src/video.cpp b/src/video.cpp index 61498028..fe87e884 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Wednesday, 19th June 2024 12:23:54 pm # +# Last Modified: Thursday, 20th June 2024 7:30:37 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -296,113 +296,43 @@ float getOutputFrameRate() */ void externalClockGenSyncInOutRate() { - _DBGN("externalClockGenSyncInOutRate()"); - - if (!rto.extClockGenDetected) { - return; - } - if (GBS::PAD_CKIN_ENZ::read() != 0) { - return; - } - // if (rto.outModeHdBypass) { - if (uopt.resolutionID == OutputHdBypass) { - return; - } - if (GBS::PLL648_CONTROL_01::read() != 0x75) { + if (!rto.extClockGenDetected || GBS::PAD_CKIN_ENZ::read() != 0 + || uopt.resolutionID == OutputHdBypass + || GBS::PLL648_CONTROL_01::read() != 0x75) { return; } + _DBGN(F("external clock sync I/O rate")); + + int32_t diff = 0; + uint32_t old = rto.freqExtClockGen; float sfr = getSourceFieldRate(0); + float ofr = getOutputFrameRate(); + if (sfr < 47.0f || sfr > 86.0f) { - _WSF(PSTR("sync skipped sfr wrong: %.02f\n"), sfr); + _DBGF(PSTR("sync skipped sfr wrong: %.02f\n"), sfr); return; } - float ofr = getOutputFrameRate(); if (ofr < 47.0f || ofr > 86.0f) { - _WSF(PSTR("sync skipped ofr wrong: %.02f\n"), ofr); + _DBGF(PSTR("sync skipped ofr wrong: %.02f\n"), ofr); return; } - uint32_t old = rto.freqExtClockGen; FrameSync::initFrequency(ofr, old); setExternalClockGenFrequencySmooth((sfr / ofr) * rto.freqExtClockGen); - int32_t diff = rto.freqExtClockGen - old; + diff = rto.freqExtClockGen - old; - _WSF(PSTR("source Hz: %.5f new out: %.5f clock: %u (%s%d)\n"), + _DBGF(PSTR("source Hz: %.5f new out: %.5f clock: %u (%s%d)\n"), sfr, - getOutputFrameRate(), + ofr, rto.freqExtClockGen, (diff >= 0 ? "+" : ""), diff); } -/** - * @brief Detect if external clock installed - * - * @return int8_t - * 1 = device ready, init completed, - * 0 - no device detected - * -1 - any other error - */ -int8_t externalClockGenDetectAndInitialize() -{ - const uint8_t xtal_cl = 0xD2; // 10pF, other choices are 8pF (0x92) and 6pF (0x52) NOTE: Per AN619, the low bytes should be written 0b010010 - - // MHz: 27, 32.4, 40.5, 54, 64.8, 81, 108, 129.6, 162 - rto.freqExtClockGen = 81000000; - rto.extClockGenDetected = 0; - - if (uopt.disableExternalClockGenerator) { - _DBGN(F("(!) external clock generator disabled, skipping detection")); - return 0; - } - - uint8_t retVal = 0; - Wire.beginTransmission(SIADDR); - // returns: - // 4 = line busy - // 3 = received NACK on transmit of data - // 2 = received NACK on transmit of address - // 0 = success - retVal = Wire.endTransmission(); - _DBGF(PSTR("(!) a problem while detect external clock, err: %d\n"), retVal); - if (retVal != 0) { - return -1; - } - - Wire.beginTransmission(SIADDR); - Wire.write(0); // Device Status - Wire.endTransmission(); - size_t bytes_read = Wire.requestFrom((uint8_t)SIADDR, (size_t)1, false); - - if (bytes_read == 1) { - retVal = Wire.read(); - if ((retVal & 0x80) == 0) { - // SYS_INIT indicates device is ready. - rto.extClockGenDetected = 1; - } else { - return 0; - } - } else { - return -1; - } - - _DBGN(F("ext. clock detected")); - - Si.init(25000000L); // many Si5351 boards come with 25MHz crystal; 27000000L for one with 27MHz - Wire.beginTransmission(SIADDR); - Wire.write(183); // XTAL_CL - Wire.write(xtal_cl); - Wire.endTransmission(); - Si.setPower(0, SIOUT_6mA); - Si.setFreq(0, rto.freqExtClockGen); - Si.disable(0); - return 1; -} - /** * @brief * @@ -413,7 +343,6 @@ void externalClockGenResetClock() _DBGN(F(" no ext.clock detected")); return; } - _DBGN("externalClockGenResetClock()"); uint8_t activeDisplayClock = GBS::PLL648_CONTROL_01::read(); @@ -2095,53 +2024,6 @@ void disableMotionAdaptDeinterlace() rto.motionAdaptiveDeinterlaceActive = false; } -/** - * @brief Clear tv5725 registers - * "All registers (except chapter 01 status register is read only) - * have default value “0x00” after power up." - * "All registers require segment for access. - * Segment is defined in address F0." - * - */ -void zeroAll() -{ - // this goes into resetAllOffline() - // turn processing units off first - // writeOneByte(0xF0, 0); - // writeOneByte(0x46, 0x00); // reset controls 1 - // writeOneByte(0x47, 0x00); // reset controls 2 - - // zero out entire register space = (6 segments * 255 bytes) - uint8_t y = 0; - uint8_t z = 0; - - while (y < 6) { - writeOneByte(0xF0, y); - while (z < 16) { - // while(w < 16) { - // bank[w] = 0; - // // exceptions - // // if (y == 5 && z == 0 && w == 2) { - // // bank[w] = 0x51; // 5_02 - // //} - // // if (y == 5 && z == 5 && w == 6) { - // // bank[w] = 0x01; // 5_56 - // //} - // // if (y == 5 && z == 5 && w == 7) { - // // bank[w] = 0xC0; // 5_57 - // //} - // w++; - // } - uint8_t bank[16]; - memset(bank, 0, 16); - writeBytes(z * 16, bank, 16); - z++; - } - z = 0; - y++; - } -} - /** * @brief programs all valid registers (the register map has holes in * it, so it's not straight forward) 'index' keeps track of the current @@ -2567,7 +2449,7 @@ void updateHVSyncEdge() * thus "see" a source. It is possible to run in low power mode. Function * should not further nest, so it can be called in syncwatcher * - * before making changes, see: checkBoardPower() + * before making changes, see: utilsCheckBoardPower() * * in operation: t5t04t1 for 10% lower power on ADC * also: s0s40s1c for 5% (lower memclock of 108mhz) @@ -2582,9 +2464,9 @@ void goLowPowerWithInputDetection() { GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD GBS::DAC_RGBS_PWDNZ::write(0); // direct disableDAC() - // zeroAll(); + // utilsZeroAll(); _DBGN(F("(!) reset runtime parameters while going LowPower")); - setResetParameters(); // includes rto.videoStandardInput = 0 + presetsResetParameters(); // includes rto.videoStandardInput = 0 prepareSyncProcessor(); delay(100); rto.isInLowPowerMode = true; @@ -2598,7 +2480,7 @@ void goLowPowerWithInputDetection() */ void optimizeSogLevel() { - if (rto.boardHasPower == false) // checkBoardPower is too invasive now + if (rto.boardHasPower == false) // utilsCheckBoardPower is too invasive now { rto.thisSourceMaxLevelSOG = rto.currentLevelSOG = 13; return; @@ -4860,7 +4742,7 @@ void runSyncWatcher() if (RGBHVNoSyncCounter > limitNoSync) { RGBHVNoSyncCounter = 0; _DBGN(F("(!) reset runtime parameters while running syncWatcher")); - setResetParameters(); + presetsResetParameters(); prepareSyncProcessor(); resetSyncProcessor(); // todo: fix MD being stuck in last mode when sync disappears // resetModeDetect(); diff --git a/src/video.h b/src/video.h index c65afb45..ca76fe7e 100644 --- a/src/video.h +++ b/src/video.h @@ -3,7 +3,7 @@ # File: video.h # # File Created: Thursday, 2nd May 2024 4:08:03 pm # # Author: # -# Last Modified: Monday, 17th June 2024 12:00:54 am # +# Last Modified: Wednesday, 19th June 2024 8:02:40 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -22,7 +22,7 @@ extern void doPostPresetLoadSteps(); extern void printInfo(); extern void loadPresetMdSection(); extern void loadPresetDeinterlacerSection(); -extern void setResetParameters(); +extern void presetsResetParameters(); extern void printVideoTimings(); extern void applyPresets(uint8_t result); @@ -35,7 +35,6 @@ bool getStatus16SpHsStable(); float getSourceFieldRate(bool useSPBus); float getOutputFrameRate(); void externalClockGenSyncInOutRate(); -int8_t externalClockGenDetectAndInitialize(); void externalClockGenResetClock(); bool applyBestHTotal(uint16_t bestHTotal); bool runAutoBestHTotal(); @@ -56,7 +55,6 @@ void enableScanlines(); void disableScanlines(); void enableMotionAdaptDeinterlace(); void disableMotionAdaptDeinterlace(); -void zeroAll(); void writeProgramArrayNew(const uint8_t *programArray, bool skipMDSection); void activeFrameTimeLockInitialSteps(); void applyComponentColorMixing(); diff --git a/src/wserver.cpp b/src/wserver.cpp index 483c32f5..ba08be25 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Wednesday, 19th June 2024 12:47:07 pm # +# Last Modified: Thursday, 20th June 2024 8:06:39 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -295,7 +295,7 @@ void serverSlotRemove() result = true; } // reset parameters - setResetParameters(); + presetsResetParameters(); _DBGN(F("(!) slot has been removed, parameters now reset to defaults")); // also reset resolution uopt.resolutionID = Output240p; @@ -2122,10 +2122,11 @@ void handleUserCommand() // case '6': // break; case '7': // toggle scanlines - uopt.wantScanlines = !uopt.wantScanlines; + // uopt.wantScanlines = !uopt.wantScanlines; _WS(F("scanlines: ")); - if (uopt.wantScanlines) + if (!uopt.wantScanlines) { + enableScanlines(); _WSN(F("on (Line Filter recommended)")); } else @@ -2167,8 +2168,8 @@ void handleUserCommand() else { _WSF( - PSTR("\nsystem preferences:\n active slotID = %d\n component out. = %d\n scaling RGBHV = %d\n" \ - " ADC calibration = %d\n ext. clock gen. = %d\n\n"), + PSTR("\nsystem preferences:\n active slotID: %d\n component out.: %d\n scaling RGBHV: %d\n" \ + " ADC calibration: %d\n ext. clock gen.: %d\n"), f.read(), f.read(), f.read(), @@ -2178,6 +2179,83 @@ void handleUserCommand() f.close(); } + // + _WSF( + PSTR("\nruntime parameters:\n"\ + " board power: %d\n sync watcher: %d\n" \ + " input YPbRp: %d\n is low power: %d\n"\ + " source disconnected: %d\n" \ + " video std. inp.: %d\n"\ + " continousStableCounter: %d\n" \ + " currentLevelSOG: %d\n" \ + " syncTypeCsync: %d\n" \ + " thisSourceMaxLevelSOG: %d\n" \ + " medResLineCount: %d\n" \ + " isCustomPreset: %d\n" \ + " presetDisplayClock: %d\n" \ + " freqExtClockGen: %d\n" \ + " noSyncCounter: %d\n" \ + " presetVlineShift: %d\n" \ + " phaseSP: %d\n" \ + " phaseADC: %d\n" \ + " syncLockFailIgnore: %d\n" \ + " applyPresetDoneStage: %d\n" \ + " failRetryAttempts: %d\n" \ + " HPLLState: %d\n" \ + " osr: %d\n" \ + " notRecognizedCounter: %d\n" \ + " clampPositionIsSet: %d\n" \ + " coastPositionIsSet: %d\n" \ + " phaseIsSet: %d\n" \ + " printInfos: %d\n" \ + " allowUpdatesOTA: %d\n" \ + " autoBestHtotalEnabled: %d\n" \ + " forceRetime: %d\n" \ + " motionAdaptiveDeinterlaceActive: %d\n" \ + " deinterlaceAutoEnabled: %d\n" \ + " presetIsPalForce60: %d\n" \ + " isValidForScalingRGBHV: %d\n" \ + " useHdmiSyncFix: %d\n" \ + " extClockGenDetected: %d\n\n" + ), + rto.boardHasPower, + rto.syncWatcherEnabled, + rto.inputIsYPbPr, + rto.isInLowPowerMode, + rto.sourceDisconnected, + rto.videoStandardInput, + rto.continousStableCounter, + rto.currentLevelSOG, + rto.syncTypeCsync, + rto.thisSourceMaxLevelSOG, + rto.medResLineCount, + rto.isCustomPreset, + rto.presetDisplayClock, + rto.freqExtClockGen, + rto.noSyncCounter, + rto.presetVlineShift, + rto.phaseSP, + rto.phaseADC, + rto.syncLockFailIgnore, + rto.applyPresetDoneStage, + rto.failRetryAttempts, + rto.HPLLState, + rto.osr, + rto.notRecognizedCounter, + rto.clampPositionIsSet, + rto.coastPositionIsSet, + rto.phaseIsSet, + rto.printInfos, + rto.allowUpdatesOTA, + rto.autoBestHtotalEnabled, + rto.forceRetime, + rto.motionAdaptiveDeinterlaceActive, + rto.deinterlaceAutoEnabled, + rto.presetIsPalForce60, + rto.isValidForScalingRGBHV, + rto.useHdmiSyncFix, + rto.extClockGenDetected + ); } break; /** @@ -2273,61 +2351,55 @@ void handleUserCommand() case 'l': // cycle through available SDRAM clocks { + _WS(F("SDRAM clock: ")); uint8_t PLL_MS = GBS::PLL_MS::read(); - uint8_t memClock = 0; if (PLL_MS == 0) - PLL_MS = 2; - else if (PLL_MS == 2) - PLL_MS = 7; - else if (PLL_MS == 7) - PLL_MS = 4; - else if (PLL_MS == 4) - PLL_MS = 3; - else if (PLL_MS == 3) - PLL_MS = 5; - else if (PLL_MS == 5) - PLL_MS = 0; + PLL_MS = 0b001; + else if (PLL_MS == 0x001) + PLL_MS = 0b010; + else if (PLL_MS == 0b010) + PLL_MS = 0b011; + else if (PLL_MS == 0b011) + PLL_MS = 0b100; + else if (PLL_MS == 0b100) + PLL_MS = 0b101; + else if (PLL_MS == 0b101) + PLL_MS = 0b110; + else if (PLL_MS == 0b110) + PLL_MS = 0b111; switch (PLL_MS) { case 0: - memClock = 108; + _WSN(F("100MHz")); break; case 1: - memClock = 81; + _WSN(F("81MHz")); break; // goes well with 4_2C = 0x14, 4_2D = 0x27 case 2: - memClock = 10; + _WSN(F("feedback clock (pin 110)")); break; // feedback clock case 3: - memClock = 162; + _WSN(F("162MHz")); break; case 4: - memClock = 144; + _WSN(F("144MHz")); break; case 5: - memClock = 185; + _WSN(F("185MHz")); break; // slight OC case 6: - memClock = 216; + _WSN(F("216MHz")); break; // !OC! case 7: - memClock = 129; + _WSN(F("129.6MHz")); break; default: break; } GBS::PLL_MS::write(PLL_MS); ResetSDRAM(); - if (memClock != 10) - { - _WSF(PSTR("SDRAM clock: %dMhz\n"), memClock); - } - else - { - _WSN(F("SDRAM clock: feedback clock")); - } } break; case 'm': // toggle line filter @@ -2531,7 +2603,7 @@ void handleUserCommand() { _WSN(F("on, detecting...")); uopt.disableExternalClockGenerator = false; - externalClockGenDetectAndInitialize(); + utilsExternClockGenInit(); } // saveUserPrefs(); prefsSave(); @@ -2873,6 +2945,8 @@ void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length) toSend[6] |= (1 << 5); if(uopt.freezeCapture) toSend[6] |= (1 << 6); + if(rto.syncWatcherEnabled) + toSend[6] |= (1 << 7); // system tab controls if(rto.allowUpdatesOTA) From 24077fa95981c96976b3a3b3a6bad2decf532211 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Fri, 21 Jun 2024 17:25:45 -0600 Subject: [PATCH 39/41] WIP: developer menu - tv register CMD, active slot reset button --- configure.json | 4 +- gbs-control.ino | 70 ++------- package-lock.json | 307 +++++++++++++++++++++++++++++++++++++- package.json | 3 + public/scripts/build.js | 89 +++++++---- public/src/index.html.tpl | 67 ++++++--- public/src/index.ts | 122 ++++++++++++++- public/src/style.css | 74 ++++++++- src/main.cpp | 68 ++------- src/options.h | 11 +- src/presets.cpp | 248 +++++++++++++++--------------- src/utils.cpp | 50 +++++-- src/utils.h | 3 +- src/wserver.cpp | 133 +++++++++++++++-- src/wserver.h | 3 +- translation.webui.json | 64 ++++++-- 16 files changed, 965 insertions(+), 351 deletions(-) diff --git a/configure.json b/configure.json index 8b45bd76..e506a1c8 100644 --- a/configure.json +++ b/configure.json @@ -17,10 +17,10 @@ "oled_menu_screen_saver_kick_in_seconds": 180, "oled_menu_over_draw": 0, "oled_menu_reset_always_scroll_on_selection": 0, - "serial_buffer_max_len": 1024 + "serial_buffer_max_len": 2048 }, "ui-lang": "en", "ui-hdw-fonts": "12@FreeSans,16@FreeSans", "ui-web-font": "Oswald Regular", - "version": "24.0620" + "version": "24.0621" } \ No newline at end of file diff --git a/gbs-control.ino b/gbs-control.ino index 62634641..6103e862 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -1,14 +1,14 @@ //! This is autogenerated file //! Please do not edit if you're using PlatformIO -#define VERSION "24.0620" +#define VERSION "24.0621" /* ########################################################################### # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Thursday, 20th June 2024 7:48:13 pm # +# Last Modified: Friday, 21st June 2024 5:05:30 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -61,12 +61,9 @@ DNSServer dnsServer; WebSocketsServer webSocket(81); SSD1306Wire display(0x3c, D2, D1); // inits I2C address & pins for OLED -// runTimeOptions rtos; -runTimeOptions rto; // = &rtos; -// userOptions uopts; -userOptions uopt; // = &uopts; -// struct adcOptions adcopts; -adcOptions adco; // = &adcopts; +runTimeOptions rto; +userOptions uopt; +adcOptions adco; char serialCommand = '@'; // Serial / Web Server commands char userCommand = '@'; // Serial / Web Server commands unsigned long lastVsyncLock = 0; @@ -113,51 +110,6 @@ void setup() Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); - // prefsLoadDefaults(); - // rto.systemInitOK = false; - // rto.allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface - // // rto.enableDebugPings = false; - // rto.autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing - // rto.syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) - // rto.forceRetime = false; - // rto.syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation - // rto.phaseADC = 16; - // rto.phaseSP = 16; - // rto.failRetryAttempts = 0; - // rto.isCustomPreset = false; - // rto.HPLLState = 0; - // rto.motionAdaptiveDeinterlaceActive = false; - // rto.deinterlaceAutoEnabled = true; - // // rto.scanlinesEnabled = false; - // rto.boardHasPower = true; - // rto.presetIsPalForce60 = false; - // rto.syncTypeCsync = false; - // rto.isValidForScalingRGBHV = false; - // rto.medResLineCount = 0x33; // 51*8=408 - // rto.osr = 0; - // rto.useHdmiSyncFix = 0; - // rto.notRecognizedCounter = 0; - // rto.presetDisplayClock = 0; - // rto.inputIsYPbPr = false; - // rto.videoStandardInput = 0; - // // rto.outModeHdBypass = false; - // // rto.videoIsFrozen = false; - // rto.printInfos = false; - // rto.sourceDisconnected = true; - // rto.isInLowPowerMode = false; - // rto.applyPresetDoneStage = 0; - // rto.presetVlineShift = 0; - // rto.clampPositionIsSet = 0; - // rto.coastPositionIsSet = 0; - // rto.continousStableCounter = 0; - // rto.currentLevelSOG = 5; - // rto.thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run - // // dev - // uopt.invertSync = false; - // uopt.debugView = false; - // uopt.developerMode = false; - // uopt.freezeCapture = false; - // uopt.adcFilter = true; // adco.r_gain = 0; // adco.g_gain = 0; // adco.b_gain = 0; @@ -180,9 +132,9 @@ void setup() startWire(); // run some dummy commands to init I2C to GBS and cached segments - GBS::SP_SOG_MODE::read(); writeOneByte(0xF0, 0); - writeOneByte(0x00, 0); + GBS::SP_SOG_MODE::read(); + // writeOneByte(0x00, 0); GBS::STATUS_00::read(); #if WEB_SERVER_ENABLE == 1 @@ -225,7 +177,7 @@ void setup() while (millis() - initDelay < 1500) { display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); display.display(); - optimistic_yield(1000); + optimistic_yield(500); } display.clear(); @@ -302,7 +254,7 @@ void setup() // software reset utilsZeroAll(); // utilsResetAllOffline(); - // utilsResetOnline(); + utilsResetOnline(); delay(10); // put system in the default state presetsResetParameters(); @@ -592,10 +544,10 @@ void loop() startWire(); { // run some dummy commands to init I2C + writeOneByte(0xF0, 0); GBS::SP_SOG_MODE::read(); GBS::SP_SOG_MODE::read(); - writeOneByte(0xF0, 0); - writeOneByte(0x00, 0); // update cached segment + // writeOneByte(0x00, 0); // update cached segment GBS::STATUS_00::read(); } rto.syncWatcherEnabled = true; diff --git a/package-lock.json b/package-lock.json index 27c6dbfd..38f08f48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,74 @@ { "name": "gbscontrol-webui", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gbscontrol-webui", - "version": "1.2.0", + "version": "1.3.0", "license": "GPL-3.0", "devDependencies": { + "@node-minify/core": "^8.0.6", + "@node-minify/html-minifier": "^8.0.6", + "@node-minify/uglify-js": "^8.0.6", "@types/node": "^20.14.2", "prettier": "^3.2.5", "typescript": "^4.1.3" } }, + "node_modules/@node-minify/core": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/core/-/core-8.0.6.tgz", + "integrity": "sha512-/vxN46ieWDLU67CmgbArEvOb41zlYFOkOtr9QW9CnTrBLuTyGgkyNWC2y5+khvRw3Br58p2B5ZVSx/PxCTru6g==", + "dev": true, + "dependencies": { + "@node-minify/utils": "8.0.6", + "glob": "9.3.5", + "mkdirp": "1.0.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@node-minify/html-minifier": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/html-minifier/-/html-minifier-8.0.6.tgz", + "integrity": "sha512-EC2addokm54UbLJkACumSRh1pCmwUEVcT+57rRstC/fyQsX3S3fBBFTtUUG+LS4Re3AbmLfllMJyEQcP9G+j5A==", + "dev": true, + "dependencies": { + "@node-minify/utils": "8.0.6", + "html-minifier": "4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@node-minify/uglify-js": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/uglify-js/-/uglify-js-8.0.6.tgz", + "integrity": "sha512-t6NNJwqnCwfFbbYOKv9bY3v43DcEkIUq4aaj4gtElJnx9tQaELiI0vsX9WuvQFrJlRI1xAwiNzYc+U05PWpscw==", + "dev": true, + "dependencies": { + "@node-minify/utils": "8.0.6", + "uglify-js": "3.17.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@node-minify/utils": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/utils/-/utils-8.0.6.tgz", + "integrity": "sha512-csY4qcR7jUwiZmkreNTJhcypQfts2aY2CK+a+rXgXUImZiZiySh0FvwHjRnlqWKvg+y6ae9lHFzDRjBTmqlTIQ==", + "dev": true, + "dependencies": { + "gzip-size": "6.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@types/node": { "version": "20.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", @@ -23,6 +78,218 @@ "undici-types": "~5.26.4" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/prettier": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", @@ -38,6 +305,24 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -51,11 +336,29 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true } } } diff --git a/package.json b/package.json index feeb77ab..f863378e 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,9 @@ "proseWrap": "preserve" }, "devDependencies": { + "@node-minify/core": "^8.0.6", + "@node-minify/html-minifier": "^8.0.6", + "@node-minify/uglify-js": "^8.0.6", "@types/node": "^20.14.2", "prettier": "^3.2.5", "typescript": "^4.1.3" diff --git a/public/scripts/build.js b/public/scripts/build.js index 83fd18d5..976f902b 100755 --- a/public/scripts/build.js +++ b/public/scripts/build.js @@ -1,13 +1,20 @@ -const fs = require('fs') -if (!fs.existsSync('data')) { - fs.mkdirSync('data') -} const path = require('path'); +const root = path.resolve('.'); +const nodeModulesPath = `${root}/node_modules`; +const dataPath = `${root}/data`; +const webRootPath = `${root}/public`; +const fs = require('fs'); +if (!fs.existsSync(dataPath)) { + fs.mkdirSync(dataPath) +} +const minify = require(`${nodeModulesPath}/@node-minify/core`); +const htmlMinifier = require(`${nodeModulesPath}/@node-minify/html-minifier`); +const uglifyJS = require(`${nodeModulesPath}/@node-minify/uglify-js`); var html = fs - .readFileSync('public/src/index.html.tpl', 'utf-8') + .readFileSync(`${webRootPath}/src/index.html.tpl`, 'utf-8'); var js = fs - .readFileSync('public/src/index.js', 'utf-8') - .replaceAll(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm, '') + .readFileSync(`${webRootPath}/src/index.js`, 'utf-8') + .replaceAll(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm, ''); // // A simple script which does i18n of HTML template. @@ -18,9 +25,9 @@ var js = fs // In order to keep things "as is" as possible, let's search and replace a tag both HTML and JS // const default_ui_lang = 'en'; -const config = require(path.resolve(__dirname + '/../../configure.json')); -const package = require(path.resolve(__dirname + '/../../package.json')); -const lang = require(path.resolve(__dirname + '/../../translation.webui.json')); +const config = require(`${root}/configure.json`); +const package = require(`${root}/package.json`); +const lang = require(`${root}/translation.webui.json`); String.prototype.format = function() { a = this; for (k in arguments) { @@ -66,41 +73,59 @@ for(const l in lang) { // i18n end const icon1024 = fs - .readFileSync('public/assets/icons/icon-1024-maskable.png') + .readFileSync(`${webRootPath}/assets/icons/icon-1024-maskable.png`) .toString('base64') const webUIFont = fs - .readFileSync(`public/assets/fonts/${config['ui-web-font']}.woff2`) + .readFileSync(`${webRootPath}/assets/fonts/${config['ui-web-font']}.woff2`) .toString('base64') const material = fs - .readFileSync('public/assets/fonts/material.woff2') + .readFileSync(`${webRootPath}/assets/fonts/material.woff2`) .toString('base64') const favicon = fs - .readFileSync('public/assets/icons/gbsc-logo.png') + .readFileSync(`${webRootPath}/assets/icons/gbsc-logo.png`) .toString('base64') const css = fs - .readFileSync('public/src/style.css', 'utf-8') + .readFileSync(`${webRootPath}/src/style.css`, 'utf-8') .replaceAll('${webUIFontName}', config['ui-web-font']) .replaceAll('${webUIFont}', webUIFont) .replace('${material}', material) const manifest = fs - .readFileSync('public/src/manifest.json', 'utf-8') + .readFileSync(`${webRootPath}/src/manifest.json`, 'utf-8') .replaceAll(/\$\{icon1024\}/g, `data:image/png;base64,${icon1024}`) -fs.writeFileSync( - 'data/webui.html', - html - .replace('${styles}', css) - .replace('${js}', js.trim()) - .replace('${favicon}', `data:image/png;base64,${favicon}`) - .replace('${VERSION_FIRMWARE}', config['version']) - .replace('${VERSION_UI}', package['version']) - .replace( - '${manifest}', - `data:application/json;base64,${Buffer.from(manifest).toString('base64')}` - ) - .replace('${icon1024}', `data:image/png;base64,${icon1024}`) - .trim(), - 'utf8' -) \ No newline at end of file +minify({ + compressor: uglifyJS, + content: js, + options: { + warnings: true, + mangle: true, + compress: true + } +}).then((minifiedJS) => { + minify({ + compressor: htmlMinifier, + content: html + .replace('${styles}', css) + .replace('${js}', minifiedJS) + .replace('${favicon}', `data:image/png;base64,${favicon}`) + .replace('${VERSION_FIRMWARE}', config['version']) + .replace('${VERSION_UI}', package['version']) + .replace( + '${manifest}', + `data:application/json;base64,${Buffer.from(manifest).toString('base64')}` + ) + .replace('${icon1024}', `data:image/png;base64,${icon1024}`) + .trim(), + options: { + removeAttributeQuotes: true + }, + }).then((minifiedHtml) => { + fs.writeFileSync( + 'data/webui.html', + minifiedHtml, + 'utf8' + ); + }); +}); diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index b1a8d16c..2ab1de12 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -366,19 +366,6 @@
    L{SLOT_SETTINGS_LEGEND}
    - - -
    L{FULL_HEIGHT_SWITCH} @@ -555,10 +542,31 @@
    input
    L{DEVELOPER_LEGEND}
    -
    -
    @@ -584,6 +592,10 @@
    + +
    + +
    -
    - -
    @@ -708,10 +720,19 @@ + +
    +
    - +
    diff --git a/public/src/index.ts b/public/src/index.ts index b57ff93d..a1c375d7 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -217,6 +217,10 @@ const GBSControl = { slotButtonList: null, slotContainer: null, terminal: null, + registerCmdRegSection: null, + registerCmdRegOp: null, + registerCmdRegData: null, + registerCmdRegSubmit: null, toggleConsole: null, toggleList: null, toggleSwichList: null, @@ -1068,6 +1072,10 @@ const initUIElements = () => { slotButtonList: nodelistToArray( document.querySelectorAll('[gbs-role="slot"]') ) as HTMLElement[], + registerCmdRegSection: document.querySelector('[gbs-register-section]'), + registerCmdRegOp: document.querySelector('[gbs-register-operation]'), + registerCmdRegData: document.querySelector('[gbs-register-data]'), + registerCmdRegSubmit: document.querySelector('[gbs-register-submit]'), toggleConsole: document.querySelector('[gbs-output-toggle]'), toggleList: document.querySelectorAll('[gbs-toggle]'), toggleSwichList: document.querySelectorAll('[gbs-toggle-switch]'), @@ -1368,6 +1376,62 @@ const updateHelp = (help: boolean) => { } } + +/** + * A simple functionality that changes visual represetation of register data + * dependint on the operation + */ +const switchRegisterCmdOp = () => { + const dta = GBSControl.ui.registerCmdRegData.value + if(GBSControl.ui.registerCmdRegOp.value === '0') { + // write + GBSControl.ui.registerCmdRegData.value = dta.replaceAll('\u21E5', '\u2190') + } else { + // read + GBSControl.ui.registerCmdRegData.value = dta.replaceAll('\u2190', '\u21E5') + } +} + +/** + * Prepare and submit register data + */ +const submitRegisterCmd = () => { + const formData = new FormData(); + GBSControl.ui.registerCmdRegSubmit.setAttribute('disabled', '') + formData.append('s', GBSControl.ui.registerCmdRegSection.value.trim()) + formData.append('o', GBSControl.ui.registerCmdRegOp.value.trim()) + const dataStringRaw = GBSControl.ui.registerCmdRegData.value.trim() + if(dataStringRaw.length <= 1) { + GBSControl.ui.registerCmdRegData.focus() + GBSControl.ui.registerCmdRegData.classList.add('gbs-focus-form-element') + GBSControl.ui.registerCmdRegSubmit.removeAttribute('disabled') + console.log('data cannot be empty') + return false + } + const dataRaw = dataStringRaw.split(' ') + var data = new Array() + dataRaw.map((val: string) => { + // there are different delimiters for read and write + const reg = val.split((GBSControl.ui.registerCmdRegOp.value === '0' ? '\u2190' : '\u21E5')) + // only pairs [address <- value | -> length] + if(reg[0] !== undefined && reg[1] !== undefined) { + const a = parseInt(reg[0], 16) + const v = parseInt(reg[1], 16) + data.push(a) + data.push(v) + } + }) + formData.append('d', data.join(',')) + + fetch(`http://${GBSControl.serverIP}/data/cmd`, { + method: 'POST', + body: formData, + }).then((response) => { + console.log('data sent, response: ', response.statusText) + GBSControl.ui.registerCmdRegSubmit.removeAttribute('disabled') + }) +} + /** * Toggle console visibility (see corresponding button) * @@ -1601,7 +1665,7 @@ const initGBSButtons = () => { if(message == '1' && messageType == 'user') { // reset to defaults (factory) button gbsAlert( - 'L{RESET_BUTTON_JS_ALERT_MESSAGE}', + 'L{RESET_FACTORY_BUTTON_JS_ALERT_MESSAGE}', '
    close
    L{JS_NO}
    ', '
    done
    L{ALERT_BUTTON_JS_ACK}
    ' ) @@ -1610,6 +1674,27 @@ const initGBSButtons = () => { // do nothing }, () => { + button.setAttribute('disabled', '') + action(message, button) + window.setTimeout(() => { + window.location.reload() + }, 5000) + } + ).catch(() => { + }) + } else if(message == '2' && messageType == 'user') { + // reset active slot + gbsAlert( + 'L{RESET_ACTIVE_SLOT_JS_ALERT_MESSAGE}', + '
    close
    L{JS_NO}
    ', + '
    done
    L{ALERT_BUTTON_JS_ACK}
    ' + ) + .then( + () => { + // do nothing + }, + () => { + button.setAttribute('disabled', '') action(message, button) window.setTimeout(() => { window.location.reload() @@ -1806,6 +1891,41 @@ const initGeneralListeners = () => { } }) + // register cmd data filtering function + GBSControl.ui.registerCmdRegData.addEventListener('keydown', (e: KeyboardEvent) => { + const cc = e.key.charCodeAt(0) + const target = e.target as HTMLTextAreaElement; + if(cc != 0x42) { + // not the backspace key + if((cc > 57 && cc < 97) || cc < 48 || cc > 102) { // && cc != 0x20) { + e.preventDefault() + return false + } + GBSControl.ui.registerCmdRegData.classList.remove('gbs-focus-form-element') + const dtaLen = target.value.length + if(dtaLen % 6 == 0) { + target.value = `${target.value} ` + } else if(dtaLen % 3 == 0) { + target.value = (GBSControl.ui.registerCmdRegOp.value === '0' ? `${target.value}\u2190` : `${target.value}\u21E5`) + } + } else { + // backspace + e.preventDefault(); + const lastChar = target.value.charAt(target.value.length-1) + target.value = target.value.substring(0, target.value.length - ((lastChar == ' ' || lastChar == '\u2190' || lastChar == '\u21E5') ? 3 : 1)) + } + }) + + // register cmd switch operation + GBSControl.ui.registerCmdRegOp.addEventListener('change', () => { + switchRegisterCmdOp() + }) + + // register cmd submit button in developer tab + GBSControl.ui.registerCmdRegSubmit.addEventListener('click', () => { + submitRegisterCmd() + }) + // toggle console visibility button GBSControl.ui.toggleConsole.addEventListener('click', () => { updateConsoleVisibility() diff --git a/public/src/style.css b/public/src/style.css index b2f055d6..953c176d 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -1,3 +1,10 @@ +/* + * DEVELOPER MEMO: + * 1. WebUI icons: https://jossef.github.io/material-design-icons-iconfont + * 2. prettier config: https://prettier.io/docs/en/options + * + */ + /** variables */ :root { --color-black: black; @@ -11,8 +18,9 @@ --color-secondary-rgba: 234, 182, 56; --color-secondary: #eab638; --color-silver-chalice: #aaa; - --color-warning: red; - --color-white: white; + --color-warning: #ff0000; + --color-warning-rgba: 255, 0, 0; + --color-white: 255,255,255; --viewport-height: 100%; /*GBC @@ -81,6 +89,33 @@ body { user-select: none; } +textarea[gbs-register-data=""], select { + appearance: none; + background-color: var(--color-mine-shaft-light); + border-radius: 5px; + /* border: 1px dashed rgba(var(--color-primary-rgba), 0.2); */ + border: 1px solid rgba(var(--color-primary-rgba), .2); + color: rgb(var(--color-white)); + flex-grow: 1; + font-family: inherit; + font-size: 14px; + font-weight: 300; + outline: 0; + width: 100%; +} + +select { + padding: 2px 5px; + cursor: pointer; +} + +textarea[gbs-register-data=""] { + padding: 6px; + height: 150px; + text-transform:uppercase; + resize:vertical; +} + .gbs-text-center { text-align: center; } @@ -340,6 +375,13 @@ a:hover { text-align: right; } +.gbs-button__reg-cmd-submit { + position: absolute; + bottom: 5px; + right: 5px; + font-size: 12px; +} + /* fieldset */ .gbs-fieldset { border-radius: 4px; @@ -502,7 +544,7 @@ a:hover { flex-grow: 1; height: 400px; outline: 0; - padding: 16px; + padding: 5px 10px; resize: none; scrollbar-color: var(--color-primary) var(--color-black); scrollbar-width: thin; @@ -690,10 +732,18 @@ section[name="alert"] { margin-bottom: 8px; } +.gbs-margin__left--8 { + margin-left: 8px; +} + .gbs-margin__bottom--16 { margin-bottom: 16px; } +.gbs-padding__bottom-8 { + padding-bottom: 8px; +} + .gbs-padding__left-16 { padding-left: 16px; } @@ -703,6 +753,24 @@ section[name="alert"] { padding-right: 16px; } +.gbs-input-group { + width: 100%; + margin-top: 15px; + position: relative; +} + +.gbs-input-group legend { + position: absolute; + top: -18px; + left: 0px; + font-size: 10px; +} + +.gbs-focus-form-element { + border: 1px solid rgba(var(--color-warning-rgba), .9)!important; + box-shadow: inset 0 0 6px 4px rgba(var(--color-warning-rgba), 0.2), 0 0 6px 4px rgba(var(--color-warning-rgba), 0.2)!important; +} + @media (max-width: 414px) { .gbs-scroll__footer { display: none; diff --git a/src/main.cpp b/src/main.cpp index 3fbe8e6d..4713041f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Thursday, 20th June 2024 7:48:13 pm # +# Last Modified: Friday, 21st June 2024 5:05:30 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -56,12 +56,9 @@ DNSServer dnsServer; WebSocketsServer webSocket(81); SSD1306Wire display(0x3c, D2, D1); // inits I2C address & pins for OLED -// runTimeOptions rtos; -runTimeOptions rto; // = &rtos; -// userOptions uopts; -userOptions uopt; // = &uopts; -// struct adcOptions adcopts; -adcOptions adco; // = &adcopts; +runTimeOptions rto; +userOptions uopt; +adcOptions adco; char serialCommand = '@'; // Serial / Web Server commands char userCommand = '@'; // Serial / Web Server commands unsigned long lastVsyncLock = 0; @@ -108,51 +105,6 @@ void setup() Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); - // prefsLoadDefaults(); - // rto.systemInitOK = false; - // rto.allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface - // // rto.enableDebugPings = false; - // rto.autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing - // rto.syncLockFailIgnore = 16; // allow syncLock to fail x-1 times in a row before giving up (sync glitch immunity) - // rto.forceRetime = false; - // rto.syncWatcherEnabled = true; // continously checks the current sync status. required for normal operation - // rto.phaseADC = 16; - // rto.phaseSP = 16; - // rto.failRetryAttempts = 0; - // rto.isCustomPreset = false; - // rto.HPLLState = 0; - // rto.motionAdaptiveDeinterlaceActive = false; - // rto.deinterlaceAutoEnabled = true; - // // rto.scanlinesEnabled = false; - // rto.boardHasPower = true; - // rto.presetIsPalForce60 = false; - // rto.syncTypeCsync = false; - // rto.isValidForScalingRGBHV = false; - // rto.medResLineCount = 0x33; // 51*8=408 - // rto.osr = 0; - // rto.useHdmiSyncFix = 0; - // rto.notRecognizedCounter = 0; - // rto.presetDisplayClock = 0; - // rto.inputIsYPbPr = false; - // rto.videoStandardInput = 0; - // // rto.outModeHdBypass = false; - // // rto.videoIsFrozen = false; - // rto.printInfos = false; - // rto.sourceDisconnected = true; - // rto.isInLowPowerMode = false; - // rto.applyPresetDoneStage = 0; - // rto.presetVlineShift = 0; - // rto.clampPositionIsSet = 0; - // rto.coastPositionIsSet = 0; - // rto.continousStableCounter = 0; - // rto.currentLevelSOG = 5; - // rto.thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run - // // dev - // uopt.invertSync = false; - // uopt.debugView = false; - // uopt.developerMode = false; - // uopt.freezeCapture = false; - // uopt.adcFilter = true; // adco.r_gain = 0; // adco.g_gain = 0; // adco.b_gain = 0; @@ -175,9 +127,9 @@ void setup() startWire(); // run some dummy commands to init I2C to GBS and cached segments - GBS::SP_SOG_MODE::read(); writeOneByte(0xF0, 0); - writeOneByte(0x00, 0); + GBS::SP_SOG_MODE::read(); + // writeOneByte(0x00, 0); GBS::STATUS_00::read(); #if WEB_SERVER_ENABLE == 1 @@ -220,7 +172,7 @@ void setup() while (millis() - initDelay < 1500) { display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); display.display(); - optimistic_yield(1000); + optimistic_yield(500); } display.clear(); @@ -297,7 +249,7 @@ void setup() // software reset utilsZeroAll(); // utilsResetAllOffline(); - // utilsResetOnline(); + utilsResetOnline(); delay(10); // put system in the default state presetsResetParameters(); @@ -587,10 +539,10 @@ void loop() startWire(); { // run some dummy commands to init I2C + writeOneByte(0xF0, 0); GBS::SP_SOG_MODE::read(); GBS::SP_SOG_MODE::read(); - writeOneByte(0xF0, 0); - writeOneByte(0x00, 0); // update cached segment + // writeOneByte(0x00, 0); // update cached segment GBS::STATUS_00::read(); } rto.syncWatcherEnabled = true; diff --git a/src/options.h b/src/options.h index bcdbb326..2bf675ac 100644 --- a/src/options.h +++ b/src/options.h @@ -36,7 +36,7 @@ #define BACK_SHIFT 4 #endif // HAVE_BUTTONS #if !defined(SERIAL_BUFFER_MAX_LEN) -#define SERIAL_BUFFER_MAX_LEN 512UL // use a number aligned with 4 +#define SERIAL_BUFFER_MAX_LEN 1024UL // use a number aligned with 4 #endif // SERIAL_BUFFER_MAX_LEN #if !defined(DISPLAY_SDA) // SDA = D2 (Lolin), D14 (Wemos D1) // ESP8266 Arduino default map: SDA @@ -110,11 +110,11 @@ #define OLED_MENU_USABLE_AREA_HEIGHT (OLED_MENU_HEIGHT - OLED_MENU_STATUS_BAR_HEIGHT) #define OLED_MENU_SCROLL_LEAD_IN_FRAMES (OLED_MENU_SCROLL_LEAD_IN_TIME_IN_MS / OLED_MENU_REFRESH_INTERVAL_IN_MS) -#define LEDON \ - pinMode(LED_BUILTIN, OUTPUT); \ +#define LEDON \ + pinMode(LED_BUILTIN, OUTPUT); \ digitalWrite(LED_BUILTIN, LOW) -#define LEDOFF \ - digitalWrite(LED_BUILTIN, HIGH); \ +#define LEDOFF \ + digitalWrite(LED_BUILTIN, HIGH); \ pinMode(LED_BUILTIN, INPUT) // fast ESP8266 digitalRead (21 cycles vs 77), *should* work with all possible input pins // but only "D7" and "D6" have been tested so far @@ -283,6 +283,7 @@ extern userOptions uopt; // extern struct adcOptions *adco; extern adcOptions adco; +// this is probably TODO // const char preset_ntsc[] PROGMEM = "/preset_ntsc."; // const char preset_pal[] PROGMEM = "/preset_pal."; // const char preset_ntsc_480p[] PROGMEM = "/preset_ntsc_480p."; diff --git a/src/presets.cpp b/src/presets.cpp index 855114b5..35647718 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Thursday, 20th June 2024 6:23:27 pm # +# Last Modified: Friday, 21st June 2024 4:43:15 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -73,6 +73,9 @@ void presetsResetParameters() adco.r_gain = 0; adco.g_gain = 0; adco.b_gain = 0; + adco.r_off = 0; + adco.g_off = 0; + adco.b_off = 0; // clear temp storage // GBS::ADC_UNUSED_64::write(0); @@ -94,44 +97,44 @@ void presetsResetParameters() // could stop ext clock gen output here? FrameSync::cleanup(); - GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD - GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 1 // minor SOG clamp effect - GBS::ADC_TEST_04::write(0x02); // 5_04 - GBS::ADC_TEST_0C::write(0x12); // 5_0c 1 4 - GBS::ADC_CLK_PA::write(0); // 5_00 0/1 PA_ADC input clock = PLLAD CLKO2 + GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD + GBS::ADC_TA_05_CTRL::write(0x02); // 5_05 1 // minor SOG clamp effect + GBS::ADC_TEST_04::write(0x02); // 5_04 + GBS::ADC_TEST_0C::write(0x12); // 5_0c 1 4 + GBS::ADC_CLK_PA::write(0); // 5_00 0/1 PA_ADC input clock = PLLAD CLKO2 GBS::ADC_SOGEN::write(1); GBS::SP_SOG_MODE::write(1); - GBS::ADC_INPUT_SEL::write(1); // 1 = RGBS / RGBHV adc data input - GBS::ADC_POWDZ::write(1); // ADC on + GBS::ADC_INPUT_SEL::write(1); // 1 = RGBS / RGBHV adc data input + GBS::ADC_POWDZ::write(1); // ADC on setAndUpdateSogLevel(rto.currentLevelSOG); - GBS::RESET_CONTROL_0x46::write(0x00); // all units off + GBS::RESET_CONTROL_0x46::write(0x00); // all units off GBS::RESET_CONTROL_0x47::write(0x00); - GBS::GPIO_CONTROL_00::write(0x67); // most GPIO pins regular GPIO - GBS::GPIO_CONTROL_01::write(0x00); // all GPIO outputs disabled - GBS::DAC_RGBS_PWDNZ::write(0); // disable DAC (output) - GBS::PLL648_CONTROL_01::write(0x00); // VCLK(1/2/4) display clock // needs valid for debug bus - GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) - GBS::PAD_CKOUT_ENZ::write(1); // clock output disable - GBS::IF_SEL_ADC_SYNC::write(1); // ! 1_28 2 - GBS::PLLAD_VCORST::write(1); // reset = 1 - GBS::PLL_ADS::write(1); // When = 1, input clock is from ADC ( otherwise, from unconnected clock at pin 40 ) - GBS::PLL_CKIS::write(0); // PLL use OSC clock - GBS::PLL_MS::write(2); // fb memory clock can go lower power - GBS::PAD_CONTROL_00_0x48::write(0x2b); // disable digital inputs, enable debug out pin - GBS::PAD_CONTROL_01_0x49::write(0x1f); // pad control pull down/up transistors on - loadHdBypassSection(); // 1_30 to 1_55 - loadPresetMdSection(); // 1_60 to 1_83 + GBS::GPIO_CONTROL_00::write(0x67); // most GPIO pins regular GPIO + GBS::GPIO_CONTROL_01::write(0x00); // all GPIO outputs disabled + GBS::DAC_RGBS_PWDNZ::write(0); // disable DAC (output) + GBS::PLL648_CONTROL_01::write(0x00); // VCLK(1/2/4) display clock // needs valid for debug bus + GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) + GBS::PAD_CKOUT_ENZ::write(1); // clock output disable + GBS::IF_SEL_ADC_SYNC::write(1); // ! 1_28 2 + GBS::PLLAD_VCORST::write(1); // reset = 1 + GBS::PLL_ADS::write(1); // When = 1, input clock is from ADC ( otherwise, from unconnected clock at pin 40 ) + GBS::PLL_CKIS::write(0); // PLL use OSC clock + GBS::PLL_MS::write(2); // fb memory clock can go lower power + GBS::PAD_CONTROL_00_0x48::write(0x2b); // disable digital inputs, enable debug out pin + GBS::PAD_CONTROL_01_0x49::write(0x1f); // pad control pull down/up transistors on + loadHdBypassSection(); // 1_30 to 1_55 + loadPresetMdSection(); // 1_60 to 1_83 setAdcParametersGainAndOffset(); - GBS::SP_PRE_COAST::write(9); // was 0x07 // need pre / poast to allow all sources to detect - GBS::SP_POST_COAST::write(18); // was 0x10 // ps2 1080p 18 - GBS::SP_NO_COAST_REG::write(0); // can be 1 in some soft reset situations, will prevent sog vsync decoding << really? - GBS::SP_CS_CLP_ST::write(32); // define it to something at start + GBS::SP_PRE_COAST::write(9); // was 0x07 // need pre / poast to allow all sources to detect + GBS::SP_POST_COAST::write(18); // was 0x10 // ps2 1080p 18 + GBS::SP_NO_COAST_REG::write(0); // can be 1 in some soft reset situations, will prevent sog vsync decoding << really? + GBS::SP_CS_CLP_ST::write(32); // define it to something at start GBS::SP_CS_CLP_SP::write(48); - GBS::SP_SOG_SRC_SEL::write(0); // SOG source = ADC - GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) + GBS::SP_SOG_SRC_SEL::write(0); // SOG source = ADC + GBS::SP_EXT_SYNC_SEL::write(0); // connect HV input ( 5_20 bit 3 ) GBS::SP_NO_CLAMP_REG::write(1); - GBS::PLLAD_ICP::write(0); // lowest charge pump current - GBS::PLLAD_FS::write(0); // low gain (have to deal with cold and warm startups) + GBS::PLLAD_ICP::write(0); // lowest charge pump current + GBS::PLLAD_FS::write(0); // low gain (have to deal with cold and warm startups) GBS::PLLAD_5_16::write(0x1f); GBS::PLLAD_MD::write(0x700); resetPLL(); // cycles PLL648 @@ -146,8 +149,8 @@ void presetsResetParameters() GBS::INTERRUPT_CONTROL_01::write(0xff); // enable interrupts GBS::INTERRUPT_CONTROL_00::write(0xff); // reset irq status GBS::INTERRUPT_CONTROL_00::write(0x00); - GBS::PAD_SYNC_OUT_ENZ::write(0); // sync output enabled, will be low (HC125 fix) - rto.clampPositionIsSet = 0; // some functions override these, so make sure + GBS::PAD_SYNC_OUT_ENZ::write(0); // sync output enabled, will be low (HC125 fix) + rto.clampPositionIsSet = 0; // some functions override these, so make sure rto.coastPositionIsSet = 0; rto.phaseIsSet = 0; rto.continousStableCounter = 0; @@ -1281,22 +1284,6 @@ void applyPresets(uint8_t videoMode) rto.presetIsPalForce60 = 0; // the default // rto.outModeHdBypass = 0; // the default at this stage - // in case it is set; will get set appropriately later in doPostPresetLoadSteps() - // GBS::GBS_PRESET_CUSTOM::write(0); - // rto.isCustomPreset = false; - - // carry over debug view if possible - // if (GBS::ADC_UNUSED_62::read() != 0x00) - // { - // only if the preset to load isn't custom - // (else the command will instantly disable debug view) - // if (rto.presetID != OutputCustom) { - // if (uopt.resolutionID != OutputCustom) { - // serialCommand = 'D'; // debug view - // } - // } -// FIXME to remove -_DBGF(PSTR("apply presets: %d\n"), videoMode); if (videoMode == 0) { // Unknown @@ -1643,9 +1630,10 @@ void loadPresetDeinterlacerSection() #if defined(ESP8266) /** - * @brief Load preset preferences from "preset.slot" file - * into an array that must be deleted afterwards, - * if file not found, returns nullptr + * @brief Read preset preferences from "preset_name.slotID", + * file for active Slot, into an array that + * MUST be DELETED + * afterwards. If preset file doesn't esists, returns nullptr. * * @param forVideoMode * @return const uint8_t* @@ -1655,7 +1643,7 @@ const uint8_t *loadPresetFromFS(byte forVideoMode) // static uint8_t preset[432]; static uint8_t * preset = nullptr; String s = ""; - uint8_t slot = 0; + // uint8_t slot = 0; char buffer[32] = ""; fs::File f; char *tmp; @@ -1664,7 +1652,7 @@ const uint8_t *loadPresetFromFS(byte forVideoMode) // we may change this assumption below the code rto.isCustomPreset = false; - f = LittleFS.open(FPSTR(preferencesFile), "r"); + /* f = LittleFS.open(FPSTR(preferencesFile), "r"); if (f) { slot = static_cast(f.read()); @@ -1680,44 +1668,46 @@ const uint8_t *loadPresetFromFS(byte forVideoMode) // return ntsc_240p; _WSF(PSTR("unable to open: %s\n"), FPSTR(preferencesFile)); goto load_preset_from_fs_end; - } + } */ - if (forVideoMode == 1) - { - sprintf(buffer, PSTR("/preset_ntsc.%d"), slot); - } - else if (forVideoMode == 2) - { - sprintf(buffer, PSTR("/preset_pal.%d"), slot); - } - else if (forVideoMode == 3) - { - sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), slot); - } - else if (forVideoMode == 4) - { - sprintf(buffer, PSTR("/preset_pal_576p.%d"), slot); - } - else if (forVideoMode == 5) - { - sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), slot); - } - else if (forVideoMode == 6) - { - sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), slot); - } - else if (forVideoMode == 8) - { - sprintf(buffer, PSTR("/preset_medium_res.%d"), slot); - } - else if (forVideoMode == 14) - { - sprintf(buffer, PSTR("/preset_vga_upscale.%d"), slot); - } - else if (forVideoMode == 0) - { - sprintf(buffer, PSTR("/preset_unknown.%d"), slot); - } + utilsGetPresetsFileNameFor(forVideoMode, buffer); + + // if (forVideoMode == 1) + // { + // sprintf(buffer, PSTR("/preset_ntsc.%d"), slot); + // } + // else if (forVideoMode == 2) + // { + // sprintf(buffer, PSTR("/preset_pal.%d"), slot); + // } + // else if (forVideoMode == 3) + // { + // sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), slot); + // } + // else if (forVideoMode == 4) + // { + // sprintf(buffer, PSTR("/preset_pal_576p.%d"), slot); + // } + // else if (forVideoMode == 5) + // { + // sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), slot); + // } + // else if (forVideoMode == 6) + // { + // sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), slot); + // } + // else if (forVideoMode == 8) + // { + // sprintf(buffer, PSTR("/preset_medium_res.%d"), slot); + // } + // else if (forVideoMode == 14) + // { + // sprintf(buffer, PSTR("/preset_vga_upscale.%d"), slot); + // } + // else if (forVideoMode == 0) + // { + // sprintf(buffer, PSTR("/preset_unknown.%d"), slot); + // } // reading preset data f = LittleFS.open(buffer, "r"); @@ -1781,42 +1771,44 @@ void savePresetToFS() // return; // } - if (rto.videoStandardInput == 1) - { - sprintf(buffer, PSTR("/preset_ntsc.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 2) - { - sprintf(buffer, PSTR("/preset_pal.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 3) - { - sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 4) - { - sprintf(buffer, PSTR("/preset_pal_576p.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 5) - { - sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 6) - { - sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 8) - { - sprintf(buffer, PSTR("/preset_medium_res.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 14) - { - sprintf(buffer, PSTR("/preset_vga_upscale.%d"), uopt.slotID); - } - else if (rto.videoStandardInput == 0) - { - sprintf(buffer, PSTR("/preset_unknown.%d"), uopt.slotID); - } + utilsGetPresetsFileNameFor(rto.videoStandardInput, buffer); + + // if (rto.videoStandardInput == 1) + // { + // sprintf(buffer, PSTR("/preset_ntsc.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 2) + // { + // sprintf(buffer, PSTR("/preset_pal.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 3) + // { + // sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 4) + // { + // sprintf(buffer, PSTR("/preset_pal_576p.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 5) + // { + // sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 6) + // { + // sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 8) + // { + // sprintf(buffer, PSTR("/preset_medium_res.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 14) + // { + // sprintf(buffer, PSTR("/preset_vga_upscale.%d"), uopt.slotID); + // } + // else if (rto.videoStandardInput == 0) + // { + // sprintf(buffer, PSTR("/preset_unknown.%d"), uopt.slotID); + // } // open preset file f = LittleFS.open(buffer, "w"); diff --git a/src/utils.cpp b/src/utils.cpp index 08365c29..56e29cb1 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,7 +3,7 @@ # File: utils.cpp # # File Created: Thursday, 2nd May 2024 5:37:47 pm # # Author: # -# Last Modified: Thursday, 20th June 2024 6:41:56 pm # +# Last Modified: Friday, 21st June 2024 5:05:30 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -481,6 +481,7 @@ void dumpRegisters(byte segment) { if (segment > 5) return; + writeOneByte(0xF0, segment); int x = 0x40; switch (segment) { @@ -792,16 +793,16 @@ void utilsZeroAll() while (z < 16) { // while(w < 16) { // bank[w] = 0; - // // exceptions - // // if (y == 5 && z == 0 && w == 2) { - // // bank[w] = 0x51; // 5_02 - // //} - // // if (y == 5 && z == 5 && w == 6) { - // // bank[w] = 0x01; // 5_56 - // //} - // // if (y == 5 && z == 5 && w == 7) { - // // bank[w] = 0xC0; // 5_57 - // //} + // exceptions + // if (y == 5 && z == 0 && w == 2) { + // bank[w] = 0x51; // 5_02 + //} + // if (y == 5 && z == 5 && w == 6) { + // bank[w] = 0x01; // 5_56 + //} + // if (y == 5 && z == 5 && w == 7) { + // bank[w] = 0xC0; // 5_57 + //} // w++; // } uint8_t bank[16]; @@ -815,6 +816,33 @@ void utilsZeroAll() _DBGN(F("(!) all registers reset")); } +/** + * @brief A simple getter for preset file names depending on videoMode ID + * + * @param videoMode + * @param buffer + */ +void utilsGetPresetsFileNameFor(uint8_t & videoMode, char * buffer) { + if (rto.videoStandardInput == 1) + sprintf(buffer, PSTR("/preset_ntsc.%d"), uopt.slotID); + else if (rto.videoStandardInput == 2) + sprintf(buffer, PSTR("/preset_pal.%d"), uopt.slotID); + else if (rto.videoStandardInput == 3) + sprintf(buffer, PSTR("/preset_ntsc_480p.%d"), uopt.slotID); + else if (rto.videoStandardInput == 4) + sprintf(buffer, PSTR("/preset_pal_576p.%d"), uopt.slotID); + else if (rto.videoStandardInput == 5) + sprintf(buffer, PSTR("/preset_ntsc_720p.%d"), uopt.slotID); + else if (rto.videoStandardInput == 6) + sprintf(buffer, PSTR("/preset_ntsc_1080p.%d"), uopt.slotID); + else if (rto.videoStandardInput == 8) + sprintf(buffer, PSTR("/preset_medium_res.%d"), uopt.slotID); + else if (rto.videoStandardInput == 14) + sprintf(buffer, PSTR("/preset_vga_upscale.%d"), uopt.slotID); + else // if (rto.videoStandardInput == 0) + sprintf(buffer, PSTR("/preset_unknown.%d"), uopt.slotID); +} + /** * @brief * diff --git a/src/utils.h b/src/utils.h index 7b4eac76..cbb52234 100644 --- a/src/utils.h +++ b/src/utils.h @@ -3,7 +3,7 @@ # File: utils.h # # File Created: Thursday, 2nd May 2024 5:38:14 pm # # Author: # -# Last Modified: Wednesday, 19th June 2024 8:19:02 pm # +# Last Modified: Friday, 21st June 2024 4:11:50 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -59,6 +59,7 @@ bool utilsCheckBoardPower(); void utilsResetAllOffline(); void utilsResetOnline(); void utilsZeroAll(); +void utilsGetPresetsFileNameFor(uint8_t & videoMode, char * buffer); void calibrateAdcOffset(); void setExternalClockGenFrequencySmooth(uint32_t freq); diff --git a/src/wserver.cpp b/src/wserver.cpp index ba08be25..a1cc713d 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Thursday, 20th June 2024 8:06:39 pm # +# Last Modified: Friday, 21st June 2024 5:23:33 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -49,6 +49,7 @@ void serverInit() // server.on(F("/data/upload"), HTTP_GET, serverFsUpload); server.on(F("/data/restore"), HTTP_POST, serverFsUploadResponder, serverFsUploadHandler); server.on(F("/data/backup"), HTTP_GET, serverBackupDownload); + server.on(F("/data/cmd"), HTTP_POST, serverRegisterCmd); // server.on(F("/data/dir"), HTTP_GET, serverFsDir); server.on(F("/wifi/status"), HTTP_GET, serverWiFiStatus); // server.on(F("/gbs/restore-filters"), HTTP_GET, serverRestoreFilters); @@ -297,8 +298,6 @@ void serverSlotRemove() // reset parameters presetsResetParameters(); _DBGN(F("(!) slot has been removed, parameters now reset to defaults")); - // also reset resolution - uopt.resolutionID = Output240p; server_slot_remove_end: server.send(200, mimeAppJson, result ? F("[\"ok\"]") : F("[\"fail\"]")); @@ -450,6 +449,99 @@ void serverBackupDownload() webSocket.begin(); } +/** + * @brief Receives and executes GBSC register data + * + */ +void serverRegisterCmd() { + uint8_t op = server.arg(String(F("o"))).toInt(); + uint8_t seg = server.arg(String(F("s"))).toInt(); + String dta = server.arg(String(F("d"))); + uint16_t i = 0; + char addr[4] = ""; + char val[4] = ""; + + if(op != 0 && op != 1) { + _DBGF(PSTR("(!) operation [%d] is not recognised"), op); + return; + } + + if(seg > 5) { + _DBGF(PSTR("(!) wrong segment [%d]"), seg); + return; + } + + if(dta.length() == 0) { + _DBGN(F("(!) expecting some data")); + return; + } + + auto nextNumber = [&dta, &i](char * buff) { + uint8_t k = 0; + while(i < dta.length()) { + char c = dta.charAt(i); + // only numbers < 0xFF + if(c == ',' || k > 2) break; + *(buff + k) = c; + k++; + i++; + } + // skip comma + i++; + }; + + while(i < dta.length()) { + nextNumber(addr); + nextNumber(val); + uint8_t a = atoi(addr); + uint8_t v = atoi(val); + if(op == 0) { + _WSF( + PSTR("write segm: %d addr: %d <- val: %d\n"), + seg, + a, + v + ); + GBS::write(seg, a, &v, 1); + } else { + String ro = ""; + uint8_t readout[v]; + uint8_t j = 0; + memset(readout, 0, v); + GBS::read(seg, a, readout, v); + delay(10); + // array to string of HEX values + while(j < v) { + char c[9] = ""; + c[0] = (readout[j] & 0x80) != 0 ? '1' : '0'; + c[1] = (readout[j] & 0x40) != 0 ? '1' : '0'; + c[2] = (readout[j] & 0x20) != 0 ? '1' : '0'; + c[3] = (readout[j] & 0x10) != 0 ? '1' : '0'; + c[4] = (readout[j] & 0x08) != 0 ? '1' : '0'; + c[5] = (readout[j] & 0x04) != 0 ? '1' : '0'; + c[6] = (readout[j] & 0x02) != 0 ? '1' : '0'; + c[7] = (readout[j] & 0x01) != 0 ? '1' : '0'; + if((j != 0 && j+1 % 4 == 0)) + c[8] = 0x0A; // new line + else + c[8] = 0x20; // space + ro += c; + j++; + } + _WSF( + PSTR("read segm: %d start addr: %d, leng: %d ->\n%s\n"), + seg, + a, + v, + ro.c_str() + ); + } + optimistic_yield(1000); + } + + server.send(200, mimeAppJson, F("[\"ok\"]")); +} + /** * @brief Restore data from backupFile * @@ -2075,12 +2167,22 @@ void handleUserCommand() prefsLoadDefaults(); // saveUserPrefs(); prefsSave(); - _WSN(F("options set to defaults, restarting")); + _WSN(F("(!) factory defaults has been restored, restarting")); resetInMSec(2000); break; - // case '2': - // - // break; + case '2': // reset only active slot and active preset + { + char buffer[64] = ""; + // get active preset + utilsGetPresetsFileNameFor(rto.videoStandardInput, buffer); + if(*buffer != '\0') + LittleFS.remove(buffer); + // reset slot + slotResetFlush(uopt.slotID); + _WSN(F("(i) slot has been reset, restarting")); + resetInMSec(2000); + } + break; case '3': // load new preset on slot change { // TODO: unknown logic @@ -2182,10 +2284,12 @@ void handleUserCommand() // _WSF( PSTR("\nruntime parameters:\n"\ - " board power: %d\n sync watcher: %d\n" \ - " input YPbRp: %d\n is low power: %d\n"\ - " source disconnected: %d\n" \ - " video std. inp.: %d\n"\ + " boardHasPower: %d\n"\ + " syncWatcherEnabled: %d\n" \ + " inputIsYPbPr: %d\n"\ + " isInLowPowerMode: %d\n"\ + " sourceDisconnected: %d\n" \ + " videoStandardInput: %d\n"\ " continousStableCounter: %d\n" \ " currentLevelSOG: %d\n" \ " syncTypeCsync: %d\n" \ @@ -2193,7 +2297,7 @@ void handleUserCommand() " medResLineCount: %d\n" \ " isCustomPreset: %d\n" \ " presetDisplayClock: %d\n" \ - " freqExtClockGen: %d\n" \ + " freqExtClockGen: %ld\n" \ " noSyncCounter: %d\n" \ " presetVlineShift: %d\n" \ " phaseSP: %d\n" \ @@ -2348,8 +2452,7 @@ void handleUserCommand() activeFrameTimeLockInitialSteps(); slotFlush(); break; - case 'l': - // cycle through available SDRAM clocks + case 'l': // cycle through available SDRAM clocks { _WS(F("SDRAM clock: ")); uint8_t PLL_MS = GBS::PLL_MS::read(); @@ -2368,6 +2471,8 @@ void handleUserCommand() PLL_MS = 0b110; else if (PLL_MS == 0b110) PLL_MS = 0b111; + else + PLL_MS = 0; switch (PLL_MS) { diff --git a/src/wserver.h b/src/wserver.h index 22f3b9b3..5536b7c0 100644 --- a/src/wserver.h +++ b/src/wserver.h @@ -3,7 +3,7 @@ # File: wserver.h # # File Created: Friday, 19th April 2024 3:11:47 pm # # Author: Sergey Ko # -# Last Modified: Wednesday, 19th June 2024 12:44:38 pm # +# Last Modified: Thursday, 20th June 2024 11:06:06 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -63,6 +63,7 @@ void serverSlotRemove(); void serverFsUploadResponder(); void serverFsUploadHandler(); void serverBackupDownload(); +void serverRegisterCmd(); void extractBackup(); // void serverFsDir(); // void serverFsFormat(); diff --git a/translation.webui.json b/translation.webui.json index 995e7cf9..8c1176ca 100644 --- a/translation.webui.json +++ b/translation.webui.json @@ -430,6 +430,36 @@ "ru": "Разработчик", "zh": "" }, + "REGISTER_CMD_SEGMENT": { + "en": "segment", + "es": "segmento", + "ru": "сегмент", + "zh": "" + }, + "REGISTER_CMD_OPERATION": { + "en": "operation", + "es": "operación", + "ru": "операция", + "zh": "" + }, + "REGISTER_DATA_LEGEND": { + "en": "Register data (format: HEX_OCTET_ADDR←(HEX_OCTET_VALUE or HEX_OCTET_LENGTH if reading))", + "es": "Valores de registros (formato: HEX_OCTET_ADDR←(HEX_OCTET_VALUE o HEX_OCTET_LENGTH si es recepción))", + "ru": "Формат данных: HEX_OCTET_РЕГИСТР←(HEX_OCTET_ЗНАЧЕНИЕ или HEX_OCTET_ДЛИНА если чтение))", + "zh": "" + }, + "WRITE": { + "en": "Write", + "es": "Enviar", + "ru": "Запись", + "zh": "" + }, + "READ": { + "en": "Read", + "es": "Recibir", + "ru": "Чтение", + "zh": "" + }, "DEVELOPER_JS_ALERT_TEXTDECODER": { "en": "This browser does not support TextDecoder feature...", "es": "Este navegador no es compatible con la función TextDecoder...", @@ -497,9 +527,9 @@ "zh": "" }, "CYCLE_SDRAM_BUTTON": { - "en": "Cycle SDRAM", - "es": "Actualizar SDRAM", - "ru": "Обновить SDRAM", + "en": "SDRAM refresh rate", + "es": "frecuencia de SDRAM", + "ru": "частота обновления SDRAM", "zh": "" }, "DEBUG_VIEW_BUTTON": { @@ -593,21 +623,33 @@ "zh": "" }, "RESTART_DEVICE_BUTTON": { - "en": "Restart", + "en": "Restart device", "es": "Reiniciar", "ru": "Перезагрузить", "zh": "" }, + "RESET_ACTIVE_SLOT": { + "en": "Reset active Slot", + "es": "Resetear Perfil activo", + "ru": "Сброс активного Профиля", + "zh": "" + }, + "RESET_ACTIVE_SLOT_JS_ALERT_MESSAGE": { + "en": "

    Reset active Slot to its initial state. The data to be deleted:

    • Active Slot and its active Preset data

    The device will be restarted. Are you ready to continue?

    ", + "es": "

    Esta acción restablecerá el Perfil activa a su estado inicial. Los siguientes datos serán eliminados:

    • Perfil activo y sus ajustes

    El dispositivo se reiniciará. Está seguro de continuar?

    ", + "ru": "

    Сброс активного Профиля в исходное состояние. Следующие данные будут удалены:

    • Активный Профиль и его активные настройки (preset)

    Устройство будет перезапущено. Желаете продолжить?

    ", + "zh": "" + }, "RESET_DEFAULTS_BUTTON": { - "en": "Reset to Defaults", - "es": "Resetear ajustes", - "ru": "Сброс настроек", + "en": "Restore factory defaults", + "es": "Restablecer el estado de fábrica", + "ru": "Сброс к заводским настройкам", "zh": "" }, - "RESET_BUTTON_JS_ALERT_MESSAGE": { - "en": "

    This action will reset your device to factory state. The data to be deleted:

    • All Slots and Presets data,
    • Common parameters

    Are you ready to continue?

    ", - "es": "

    Restablecer el estado de fábrica. Los siguientes datos serán eliminados:

    • Todos Perfiles y sus ajustes,
    • Configuración común

    Quiere seguir reiniciando?

    ", - "ru": "

    Сброс устройства к заводскому состоянию. Следующие данные будут удалены:

    • Все Профили и предустановки,
    • Общесистемные параметры

    Желаете продолжить?

    ", + "RESET_FACTORY_BUTTON_JS_ALERT_MESSAGE": { + "en": "

    This action will reset your device to factory state. The data to be deleted:

    • All Slots and Presets data,
    • Common parameters

    The device will be restarted. Are you ready to continue?

    ", + "es": "

    Restablecer el estado de fábrica. Los siguientes datos serán eliminados:

    • Todos Perfiles y sus ajustes,
    • Configuración común

    El dispositivo se reiniciará. Está seguro de continuar?

    ", + "ru": "

    Сброс устройства к заводскому состоянию. Следующие данные будут удалены:

    • Все Профили и предустановки (presets),
    • Общесистемные параметры

    Устройство будет перезапущено. Желаете продолжить?

    ", "zh": "" }, "BACKUP_LEGEND": { From 0007f5a585ce78c3a3ae2b0a4836c3d708a39ecf Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Mon, 24 Jun 2024 15:36:12 -0600 Subject: [PATCH 40/41] WIP: do not upload... --- README.md | 10 +- configure.json | 2 +- gbs-control.ino | 113 ++++++----- package.json | 2 +- public/src/index.html.tpl | 80 ++++---- public/src/index.ts | 4 +- public/src/style.css | 2 +- src/OLEDMenuImplementation.cpp | 36 ++-- src/OSDManager.cpp | 1 - src/main.cpp | 111 ++++++----- src/menu.cpp | 57 ++---- src/options.h | 65 +++--- src/osd.h | 5 - src/prefs.cpp | 22 +-- src/presets.cpp | 348 ++++++++++++--------------------- src/presets.h | 8 +- src/slot.cpp | 29 ++- src/slot.h | 1 + src/utils.cpp | 131 +++++++------ src/utils.h | 6 +- src/video.cpp | 122 +++++------- src/video.h | 6 +- src/wserver.cpp | 267 ++++++++++--------------- translation.webui.json | 2 +- 24 files changed, 638 insertions(+), 792 deletions(-) diff --git a/README.md b/README.md index f400d767..9199653e 100644 --- a/README.md +++ b/README.md @@ -244,7 +244,7 @@ For more details visit: https://github.com/JAndrassy/ArduinoOTA/blob/master/READ ### Slots vs Presets - Preset - is a collection of predefined runtime values (including output screen resolution, etc). - - Custom presets - a collection of predefined runtime values stored on GBSC filesystem. + - Custom presets - a collection of predefined runtime values stored on GBSC filesystem. Custom presets are created and updated together with correspondng Slot. - Slot - is a collection of Presets. - Preferences - a collection of parameters which are used system-wide independently of Slots and Presets. So when Slot changes which causes Preset to change, Preferences will remain the same until user not to switch them manually. @@ -306,11 +306,11 @@ ESP8266 version of the factory built GBSC, boots into firmware upload mode by pr - [ ] Invert Sync issue - [ ] PassThrough doesn't work - [ ] preferScalingRgbhv doesn't work (?) -- [ ] device disconnects from WiFi when displaying Output status on screen -- [ ] disable ambigous preset paramters inside slots - - [ ] startup reuntime parameters loading malfunction +- [x] device disconnects from WiFi when displaying Output status +- [x] disable ambigous preset paramters inside slots + - [ ] startup runtime parameters loading malfunction - [ ] De-interlacer noise reduction ctl. -- [ ] color artifacts on screen depending on SDRAM frequency +- [ ] color artifacts on high SDRAM refresh rates - [x] fix OLEDMenu items list offset - [x] feature request [#553] - [x] creation/destruction OLEDMenuItem procedure diff --git a/configure.json b/configure.json index e506a1c8..91ced665 100644 --- a/configure.json +++ b/configure.json @@ -22,5 +22,5 @@ "ui-lang": "en", "ui-hdw-fonts": "12@FreeSans,16@FreeSans", "ui-web-font": "Oswald Regular", - "version": "24.0621" + "version": "24.0624" } \ No newline at end of file diff --git a/gbs-control.ino b/gbs-control.ino index 6103e862..15fdcb93 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -1,14 +1,14 @@ //! This is autogenerated file //! Please do not edit if you're using PlatformIO -#define VERSION "24.0621" +#define VERSION "24.0625" /* ########################################################################### # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Friday, 21st June 2024 5:05:30 pm # +# Last Modified: Monday, 24th June 2024 12:50:19 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -89,6 +89,32 @@ void resetInMSec(unsigned long ms) { } } +/** + * @brief This function used to start communication with the board while setup() + * or restart communication after power loss + * (which is actually may never happen on production env.). + * + */ +inline bool powerLossBoardReinit() { + // software reset + utilsZeroAll(); + delay(10); + // put system in the default state + presetsResetParameters(); + prepareSyncProcessor(); + + // prefs data loaded, load current slot + if(!slotLoad(uopt.slotID)) + slotResetFlush(uopt.slotID); + + if(!utilsCheckBoardPower()) { + stopWire(); + _WSN(F("\n (!) Please check board power and cabling or restart\n")); + return false; + } + return true; +} + /** * @brief * @@ -110,13 +136,6 @@ void setup() Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); - // adco.r_gain = 0; - // adco.g_gain = 0; - // adco.b_gain = 0; - // adco.r_off = 0; - // adco.g_off = 0; - // adco.b_off = 0; - // filesystem (web page, custom presets, etc) if (!LittleFS.begin()) { _DBGN(F("FS mount failed ((1M FS) selected?)")); @@ -131,11 +150,6 @@ void setup() menuInit(); startWire(); - // run some dummy commands to init I2C to GBS and cached segments - writeOneByte(0xF0, 0); - GBS::SP_SOG_MODE::read(); - // writeOneByte(0x00, 0); - GBS::STATUS_00::read(); #if WEB_SERVER_ENABLE == 1 wifiInit(); @@ -251,23 +265,19 @@ void setup() return; } - // software reset - utilsZeroAll(); - // utilsResetAllOffline(); - utilsResetOnline(); - delay(10); - // put system in the default state - presetsResetParameters(); - prepareSyncProcessor(); + if(!powerLossBoardReinit()) + return; - if (uopt.enableCalibrationADC) { - // enabled by default - calibrateAdcOffset(); - } + // software reset + // utilsZeroAll(); + // delay(10); + // // put system in the default state + // presetsResetParameters(); + // prepareSyncProcessor(); - // prefs data loaded, load current slot - if(!slotLoad(uopt.slotID)) - slotResetFlush(uopt.slotID); + // // prefs data loaded, load current slot + // if(!slotLoad(uopt.slotID)) + // slotResetFlush(uopt.slotID); // rto.syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here // inputAndSyncDetect(); @@ -280,9 +290,15 @@ void setup() // } // rto.isInLowPowerMode = false; // } - if(!utilsCheckBoardPower()) { - _WSN(F("\n (!) Please check board power and cabling or restart\n")); - return; + // if(!utilsCheckBoardPower()) { + // stopWire(); + // _WSN(F("\n (!) Please check board power and cabling or restart\n")); + // return; + // } + + if (uopt.enableCalibrationADC) { + // enabled by default + calibrateAdcOffset(); } // some debug tools leave garbage in the serial rx buffer @@ -420,7 +436,7 @@ void loop() if (rto.videoStandardInput <= 14 && rto.videoStandardInput != 0 && rto.syncWatcherEnabled && !rto.coastPositionIsSet) { if (rto.continousStableCounter >= 7) { - if (getStatus16SpHsStable() == 1 && getVideoMode() == rto.videoStandardInput) { + if (getStatus16SpHsStable() && getVideoMode() == rto.videoStandardInput) { updateCoastPosition(0); if (rto.coastPositionIsSet && videoStandardInputIsPalNtscSd()) { // TODO: verify for other csync formats @@ -490,6 +506,7 @@ void loop() if (rto.applyPresetDoneStage == 10) { rto.applyPresetDoneStage = 11; // set first, so we don't loop applying presets + // registers uninitialized, do post preset setOutputHdBypassMode(false); } @@ -500,8 +517,8 @@ void loop() inputAndSyncDetect(); } else { // rto.boardHasPower = false; - rto.continousStableCounter = 0; - rto.syncWatcherEnabled = false; + // rto.continousStableCounter = 0; + // rto.syncWatcherEnabled = false; } lastTimeSourceCheck = millis(); @@ -523,7 +540,7 @@ void loop() if ((rto.noSyncCounter == 61 || rto.noSyncCounter == 62) && rto.boardHasPower) { if (!utilsCheckBoardPower()) { rto.noSyncCounter = 1; // some neutral "no sync" value - rto.continousStableCounter = 0; + // rto.continousStableCounter = 0; // rto.syncWatcherEnabled = false; stopWire(); // sets pinmodes SDA, SCL to INPUT _DBGN(F("(!) TWI has been stopped")); @@ -542,18 +559,20 @@ void loop() _DBGN(F("(!) board power recovered")); delay(350); // i've seen the MTV230 go on briefly on GBS power cycle startWire(); - { - // run some dummy commands to init I2C - writeOneByte(0xF0, 0); - GBS::SP_SOG_MODE::read(); - GBS::SP_SOG_MODE::read(); - // writeOneByte(0x00, 0); // update cached segment - GBS::STATUS_00::read(); - } - rto.syncWatcherEnabled = true; - utilsCheckBoardPower(); + delay(10); + powerLossBoardReinit(); + // { + // // run some dummy commands to init I2C + // writeOneByte(0xF0, 0); + // GBS::SP_SOG_MODE::read(); + // GBS::SP_SOG_MODE::read(); + // // writeOneByte(0x00, 0); // update cached segment + // GBS::STATUS_00::read(); + // } + // rto.syncWatcherEnabled = true; + // utilsCheckBoardPower(); // rto.boardHasPower = true; - delay(100); + delay(10); goLowPowerWithInputDetection(); } } diff --git a/package.json b/package.json index f863378e..d58081f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gbscontrol-webui", - "version": "1.3.0", + "version": "1.4.0", "description": "gbscontrol-webui", "author": "", "license": "GPL-3.0", diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 2ab1de12..ecb4c83a 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -46,10 +46,10 @@ + - @@ -113,18 +113,18 @@ gbs-click="normal" gbs-element-ref="button720p" gbs-role="preset"> 1280 x 720 - + --> - + -->
    15KHz/L{DOWNSCALE}
    - - - - -
    control_camera
    @@ -360,6 +331,38 @@
    +
    + +
    wb_sunny
    +
    L{ADC_GAIN_LEGEND}
    +
    + +
      +
    • L{ADC_GAIN_LEGEND_HELP_1}
    • +
    +
    + + + +
    +
    + + +
    - - -
    ~2 z%C*l4-?ez3C8%Sr$@Bft_U@0>M%B-KW(}v*m-*fY;&oWZ*F4?#Vc0g_!>3taX8N*m z@`^q$Oj8M!^=SYBH`aYNPP*z{B!44|e79r7Z{h9kwiIi2Uo~lnck1vV-K*fo0ZaOO zxata9ylo3ge=G<~Z`zOVB0>aud-ppHlTK5|-QSmOVi8O7z4)YLk?3diu$={lxt4l5 z#-CK&r*gC}2CJWYE(qdwGaWjviuSR)3x)+r1t^kF=cv{B>F+u95z#voCx76SC-eOg zf3iWi;C8dWE#dQZF<o;&b}Dr=7n5|3d3B%5N9G+0pYsq})==+M ztLhQe+wIm~qQ_{HB+aD0YJUe|FaDTLVu+7%avDedF-0?dbt@XsknqeoaHY_`A?f1( z9JPU772YxOmwj_<*EcrXB%kOsAAL2jZvwCH_H4>euk1SZ?EV`k=K}Prmib<|>?CwL7PAZn(i$RQo48sn6r!DEFgZrhoO8poc-U@3=Yp zw~OVM$1$+pNs^zL&AzV9=&)gypO5)-+ulDL<*2H)p|_d$aQz5RSktX86$P$dlJdiA z#YuChya8CPneFGk9Z&SZZ8n=paMiuRp2(^HTBk%Aq?3rgXG?$Xo$L}N*{!Vu^#sB6 zupZZ?GR5W~=E1uVynpy=-nS=r+4~HW4*hvwztWQ{LHTB0iJ&|`x|l2S-8+fj&rM#= z+n`ZN$g?Bag~1`b=v{|Y2N1hG-nG4Asy4QMtY{jO^>}yOo?9{n*YY%_F)>5&d9`=f zkF(#rH{`_L&C~hb>k3L9NQG-`w!61-5;tR|Ifssy%g`wgw|~^tx{$EqBn>7#_sjWk z&L75QlYg3}ezr-d1y^^2U;QNmlJOqoyzU95`-t{^J&xC>XB3gG`Iaf0-T=Jq64W3P z9qn4oPbN$j;qa5yb#vrDj(J95S9~isHkHPC0#CP^KWs$_#uvfsXTnmu-}CvBV{*iprg?olW*qWDzp zLjE~<%7wlsx>d|?#9Wno49X4QT40n5n%P9w4x)Q^P36&@YgtxR4oDD=VhS{*dVYB~ z>SQtlojzx`yMO77*2KI1R7$UI@~$|(9bK1bCxl8liGR)+e`px*Bva*tbGiF+>gOkr zP|S!>7V<-og`2B&;_gTF-EV=~kJ?>h(#6{7Lk+6-UC6#7t9RLIyJF8jdik<7pC9e* zy~nEL1$RzV_nLkqfG0FeS6;vy#hh#ZadNPMNAdX6S+TpxZ+A@_1SL5lA|4QX7Q4%< z!}$OV1AidNB-4zC_TmocVkg*ny$|^kIC*f(w?|%k?}?MUkAu|gV%*hG!|dYSCCZVE z&>K2?w6%MGRN6yu&UW2ptc&I-^UO;3^mQ zCSF|^MN=o4eN;RjB(GD_U$lY0bR9J8&x5-?Wc@pLA7mcNKx0DAm=*MWr)3s*2To+? zDt?V>UEf>nGI-ompxoi)gi8`!f376+TvOdcdKledI62McETa35KA@9O7;WWW0!SW zWzHha!%ER{8zpu0)5h&$9DUo`4-~0vrW|x%sBm>ru9}u6KecfS=irvfvwzaJl!=1$ zK(b1XhG?`3e7Zci?GwpiBIUN@Mr8iJq?_H@@`Y@}Kx51JSXP_TenwpAxn5dV^{$t0 z&nG$f^J}iC5Zzvf+eEXuEU*5_$S$3p#r~|Go!xNUMQ;XGOI-C4JFjc4S!(@Sk|fm* z>Z7zX)qKyA81QdZ{MM24w0}F-l44)(I$8I>&-bhC%W~uMTf)raeV4q`U1VMYFZoVs zyJe+``!uJmZ_(1!!ZtopVX%@&H3ViSCYvn7#Zhw68{KXG;kR1;o%e+@X)ndf<6wJc zUR`l9+xnB;h5UcfIbv^D=A-}qwXc%>t5CI z#A58Be8^c+cTRIj!|Szr6ufh+_#*j~jG6Y+hel%`8I4exQlY;kL**9TQ;NNQzF2)P zUU;@Ih5DVp;&D;Ljelf9ROFNT`EKm~)db=(*4y*){V~3;+5KjWv%POV3%b$ou#uSQ zo=uy^-L&I-SAM=~O%uC}evV=ID5$Dlhd$7qNAbZK%3{^4d#&^I>2d`AhcnHJ-`N)h z56N5t?)Vn8i`?(cAK89w&wVHc4S9MNKRR=wFJ`vc^ou?ywtvIroe897eAT-$xJ&QJ z6yD`E*S|V5MC{mSpDH@)v%jQlnluK%N|!zEhtEDElo_9Nc~3`nCv8seu?y$2!ktGZ zpBzq1M%yM4Kl>JCxVaC^E>P~&(uWeP7zDp+s{P{`ZiyN2lCE` zZerWl6x5r>i0W~7zqCj_pE{x6H<=va&nJz;?-;)fd4JxXszYot3=_CP^Yku2Nc?`p zx@AA76M2<_+e|y>o0pncj{c-Q?Bg)TREhyQ@cSy}FXeROxV>B~yF3@O-dqyv&U_vK zp+maZ;<6vp@+)!al#klAUDPLoQul-KXZP~C$_{8F-{KRqD-q4Dos_+tt@pWA&AA)U zW1-&LGk-om`D0rK&*SN}i>949+VSwi20s8{KOolMncSeNy`fuQh&RQ%(BmX}pB(8AiQbg$K{ay+hyOX*+AGqY2ERJd{Hk#$%d%SP)xR!x4*#6^~cu6%57h z?tX8AY*(qKh;8`_hp-zz$IE$YnoM{f-}iH|!GD79Z1VKgD<%po>s;l-*-Lhg19a7H z9M;=+-rn(}vs%UnY21$DIODI-92th+U*(QuFRpsKO?7K;{$)hHuNGrQhq7)2+dni? z#pOGUx}PCu7IiKcn%lFKb4hvO()U3)@jP>vxA?#udba7xcXd7PzK`O_=mRsOLAx49 zfPcp_mhIhHXU*3u3hEDj9?rFR(U-8rG56tUQ9HiH9$$8TZEs|`Y&c=)Pg}uIPM;{9 zy63YE;>mHPO}yOItnIoj;r*X|JZ|rEWhL9Qt!)pl3(1e;X-R|qt~IXNF6tk?J{I

    y(&L5PG!F0^&@(E00;qG5|gy_z-PWQ_Ep zyY9ZxLM#cVtDYVFOTu|Wlixp*^ol~fQQKV=^W5xm`?<{)wQn{X=Y}(t|N2)Z*?*kz z4|@|oJV?xi)aTFk+&-dd79ZK=_=SCaqVlJ2kB9uWk5i{%)bCFr42^gye(C_Kadx+^ zhnEp_uAE=ax_tHJTe4Tuom(~DCiu#2q||ngr%*UQnd&6_S~lLJ=Vlix8W-ypT+Xrk zc<+N!xg#3hT9=qfL3RpD{Kw5mTYojJm)UzE@A19LCF&eRc$yXE{#HkM%j2 zf!W$WJtFmVCl9f(^!D-L=V6?J=U|b~5Uy~#A%2l*MSPIIvS^NM<>eDP*xK|J>y3ni zO?~(3|A(^k*kN8p!mLtR$sV!lH4TSw@_Ckbz;RsPA`ZNcgEOAcLLJuaFGSL&17Sifn_ zF`ZyT5iaK&Lavjz^)r;?wgqkM;rn^FvylW$0e`vXd=}f8lUqX9#PFGCG!93x^*66h z2Bxl|*)?)w-bb|bjYm!O4JnY96nl)hwyk3x^YbMJAFdt7Mii1Ls}JDyHjNWAr69^Y zL;B^9k%-&lbjPiC!r#-oiR=*OAyt#rOP*+IwH5fhkB%bPpd;vavTCwJiiK(UAPD_} zjej3GF(cxMPgkEf$6OW=;LrXgo<a7>BU)jPR zKG`sU?Zi%Xa)K3;NfnCfj#Dw0WvfJxcWK`&Tl@;SCFuR zf-PJTUorOubpg$a6?e6=8%6+$nYbRcy|a4aCxMC64$v+EM_fJ=MiU#K3rI%Dihuu0 z*wa+RmvV`E4!$n4JH#uLq1jQ7NZe4^8{p9~-;8uJ>SN5z2s;ul=TICbiYBje8};W? zRHL4fy`R}=_|`sL1&oy?@LuGA%89gje{`##?9zdzK}T~=^Zgd~8od!+s%0U7r?UdR zKk$d;OM$YMiR+uW7gw&li76psfPYGKpDh6M<`SC_r!g(ePijVl8ZFCH(KVc+RFAko z_F_%0x10&%67$@8M9)dUR9Iwm4E<$oNTtnWq+eN1}-p2x_}=ZH5xp`^N^Ns?#J-$y1?&E8He z8g2Neh8YQ~k>QgJ`GH)+w6?HE(|h76j?BL`A;gmId~BBF{CMq{ED9TRJA&!{lF;{l zKB89v9b|hyLp=(r2?^hx{2*?Zo*V>;;xSoZhM!S*$8OBS1cExSX@4~fnxqH#+c8sF zV*t30Gk3G0%7E}$N<)8skE>Ulcr$|H*i#NG{{#On9;ArEb_fO3X|A6wkq;k`7w)oG zDPenIqKfv^`X-4dTca*Y>V0T2@uaZkmAoYIM=@udp4tnkjxrSZza5Fej6e_|Nr)mv zgX@$xC|Vh!N=Fk71%GoYhlS$V+)aY8w6)Jq&c07^AKbmp60qN-hvT*dDl8v;Vb%6B zT7@Wv>GKV2cdZeKHr?GE zZs;g2vl83!#uTed_ed^`B1ER+GzLpx-$33i*8} za?ZBhPsJC$pMTa*T7t<}2}}-NEqd{xg!_IOx)Ie<#AsVOP>UPg+~uzh$O~1avz4%M zRS8+Fn_L%<`Rt_QYd(aoSW(n_X)FrR4S!Jbl9ViGEz)qsN&M`Gge`s$7Jn$`iJ(D1 zI-cfZ6==(kwZNr0mw9sT)v=WcFA&BMae`3M9?qIliho*@C^=;SHbBY08IX$SrddGW zLUxz0)8P@`pwR9kJ;U)$EI2>QUw#G;foZz(JqG(hsiH|(pVsfbj3PXK6R;x(x$rsr zBQg|f5CXcP-XLvm@03_!Q-xG`e7QKA=GIX}y-^c?zv%WDm;*P7DvH8{53kCoaiUB2 z*++W0&v336cyNC_9edwl*yZ2tXeRMWQZNkEz^wSsFqgG;dye58;7s5|V8aI-Lk6B1w@M(buX#a$*Pr+bYfdahXpC^WBRFOvX%XSAuCsO3O7w_c94 z$E?(yis{tEEdCEaM;J&)XlpYyEkNcm0EA_B$Tyhj)0{Z&t>GQSZDssfL{&MA*ag(n zKlot+tTwej1k~#`Gnu%UB3JX3P60Yh<8HB;I@5nAa~c}}(AR@hVNjlU0gmieh6h_h z@i(@mmnfutZNAP*6mwH7X9@{w=>N(_#e5-?nhfLK_vHJ6fiSTFZ^EH;9K%W&cYLM` z8v`EG{v-F_5nRCamfI?&6Qntyw`4PwVXb9>7H{qF=a`^I_Cpw90-wlNTy+wVH=m$} z7Po)BbTk452*I05$4f)S(`R8BGn})4ZGR{Gd{^BJQ~&^z~C;cY0-6B_-i$?(iJSbqF0+?ww%^*5g%Qx6>--Q}o<1e)r# zyd!Q*)k}b8XuMzF!bV6F`&#U%nXQNsHj{ZVs_Xi(TIc>n2cu`e^gz5{NEQZzm0$Hl z_jADsmZM^S2afH^k3rxPSD5HYmI7BN61c|-?V7lW zfZTeE*Kf-Hl%YJJvUe9VJ4{lFQ6+!f7Qi9+KLKH5@R1n+zT%i|Duai7yc2TgG<+XL zR(DqH7(eg>iw4(+*eAfG!!dpyJejXgoC@e6D@>cNZ}g(tXN>odL%R~_umBYnm}6WE z!I$J{{+t$j1)QP_vCQ?yM-`1FP6D5ub~JB|rTPTc7;>lS%~3=BM7KjRq&a^9aEwfk zNTQ!S@SN1#=W5fxLKIhH1sEEI?zjS?-(e$@9q#~d-N_D0Xvn9Mt9?UPM?Jj2FM1sX zcDC9lWG6*IVE!#jy{jSNYu?iBB0qTn$BIv4PL`x|o=AKiNwpanoOMPTO$^uN;8U@2 zn<3FKGqO~9UQo>`P;9#^H-UeP^W*_UHk(U@<_F=4?qk=H7 zvCv>WP%#;O1wxF2>EdStMs0FAB8K07U+Om|)dJZiEcZ!@BkaoLKK@Tr053ubIw_31~Aj0c;s1@*jvP0cu)Y5 z#z@h&Ahn>EP*MOg>#cp#S6uAU4S{-u^H1vcl^bOTlkjl6$3!Ais|vrCgcTqzvkLcl zL7g@J^Z)ArhMAFy%Q%;3o&+g>16ZyUSPUk&aAP{NXd#w)-@V4R`c@2i4^tS)^P#6h zSYh^}4F`$K6>1S}x%aFB2l}6mIusa$*U0aDaZR}nyuz#Lxa#_K=9&mX{A$q2GRT~p zmZe`8eA28JQsy0uFw=5ODrV$Rsd=cui}7`@1Of{C_E$<-m;14(uWieJ_hRcWeTy`} z6mikJe|mUOLAj&Urg~$C+D24SkJ&ao!1tk)=AiZ6*!i?$Df|L&d4z&!Rv|Rna%Sxr z;dAj?b#hH*I)mwDqAN{xGi`mwH4nUJ3+yUOCdGcBw~+a0fo&1X%+1b~R^b9&D2V~JK`S0n%c03!f@001EX008VRv+_oP zy;wofW@P&d0plX|&zFd!Ayaa+#;OlOXeDtkK2b-ZA4;`0{orYyR?3$?Jshywa5HoXLao82!kd{X3xjD^{XFUri%kYgVcio`)e-4q<2Z3ZAqlJ6`dj zso|kr?y*sTT0)Zw;>rZ#yn@2If}V1%7t552KUWzwl^!L3#huPf?@(gRZ?AmK?rDFu zn4AQP>MEzz-UHu;=7stM>pwM<5(>=?-ya8ocC+nf03_+j{1Djtnw+^=@D%6Y%Pw3K zZmMnMbp)^(!)A^e$f>Ybu?Ykq2V7-+a#~&;m{G+qYGpZ>theoWniXwc+0F8VmsCOK z#jYz?@HlRNRlB-TQWGI(%4Q^mh!8@fZgLT+$Z<>@b&;-ekMm zlyn=!zDhQ9w=L-~4LZ-hG3v*TNy{YlW!jGwMi35vN@ztTQDB6Qb%5dPT%}yki>+=0 zP@a}wE8`h`hWcsD&Er(k+DFW7O#0X+{MbN6ZHBxWFTzoPJW10V2@+CAex6y%+L>+K|s+$!?KC$l1 z+JshrD`a3d{Jbs7wB-waL)gn9U@&iyt2NPM8Jb7SGUi_^1}net=xNX=zu05l-$_Sg zD09OUb}H8z1qNuWr+Y(xJzd80XY_!eA8V%}ReWh=CyEf2hFqB&beS@D-s6FIgltZY zr}eUV?n1FK*D?P!EXeXhiZ?s+qtQBpeilf7^-VQ@6dgxH@fp3vEUG@y z_oCj+rPY47TRH7o#2K4#uDt;|@GRlA<=*PN**^EtZ9xi4ifgRYeGNtRTCe8Oq9q)B zy&TG6dW>KA*>7wHl}YCLW32#KC_X&}OqK`rt*%u+RH{ z=OEW29n1&({Qv-VH3MmOJqzGXiHK~l+YZr+f!p`xtrOVYq<2nY!_j;qZ$B2EE^G1t z(ij1bev$KS!Z+J2aD1D;)70SnS~WS~n>$AfFTYBJkaYH){E@Tg z4Q&{wZhk5H2zDK0RS(()mwLsI^$K@?UB!nq718QmN_5Grz0VEw<)pHNSYMkX%b8Q> zjn613!b?9SPyI~%{+V1lTS`_qN|M8u#jg4|mH58vw(pQ3GarU!{<2KfYbE$H-}9ju z4&(<=XfeW9!ofoWw9@Kfy0dHh^>J>@-%p*RNKU>$_M@0OVMpt9i@L(Uq&2O7L|(2H z+=9_D;4}>^2n0Yj0-$+~)=WNlgItau;4bntFTVt-ZczXu>at%H`uV{GsWdgn)Qyrn z?8zuhy>D^`R^jN%ASC{l;d?O}NiOk_4`!{N=ub-sK_u$Ao6Eg~l zCh2VGn}1YXC@Xsk(9!c3q z2po6kK{n^^-t_5z1mk1%m)@&E=@tni&&LGX1m;TDJ|ZhESJLjV4^rl)jYJxHHFL9qf@Hz!p0A0 zIjdLAuY>{?i|z!!MxWXQsSiWWfUfP6I#u20flZhvwS>`sPDl`6%uDf%ft+jQGdO$k zl90-YVgN`DPBaL_M{9V5BYJf_zwLVD3F2cKL5bF)u}qH3t!3oag$0T$G2-)KH*}i= z&6d3A$FzgEWIVU6XOm5%>^OZMZZ|cED?PWITwlxxo5*hx**k%G)z9|&me%!&wgS+z z(ziVr7*NoEH)lLYoN8F3m~|>#1}Ecn7BkSX1`-^LAnocRqxlpuGZrK9ON5b2kmT#7~%exYM5^db}n$ zO-*OPt?<4!sYVeO7E>Pm;Q7alsY5ydm1b0rGMSxhyOGBa=Pji&gdu4SfvAMsN@(z1 zTq5MWr>~Un!1|-eBPsN+?DHc1#`m`BK*HTWtm8f#O!y?BJ}Y^M0CPJmxN3VR1AZlc z4`hdbeKaFc=<&VJe)@HS?o=Mi6%%IkYfzYz+DD?OX<(qo-_a~t=lovFu=Z1|?51Ug zV@G!9YgOR+o)+8~><@NSY#SXX`04U|l70d*wr45HsupgF=)xO}w0Nv+n}Ehl4{*Qx zihi!RAi~837f6KIhTu`=b_uJ-YvemD1IyQch)LN?-KKEiR+(Yzn^1LSTfRu|l*2_z z7_G$T(3;M&l_2b|yk9A-fV!b9+hD}sXbDn08Fo)v;0!kpLaSp_72UPOwI$44S`mJR zqD)eXzp!z*>KNxSKQB(w#6ACq5exd0EC**dox|u zdvt_pw$VQIkw>D3T8j8`E@2VyG<+!vCYkJd%J`dZsW-f#ugcBKS_ZS3{mzTINIZqE zePfKbew)Sx8_;oLne5qAgm@%8G=Zys4_@uLT^PVYaN(r`%p^v!+x4F zqU3oeHOT?Xm>H+KxrKbL*wyHxV6;i;<9K?Q_IDn&nvMxah zP2M<7r_B=4wl4AErIrQkQKx80dINc)3-fXxupulHMZ97b*-fq!nsC*$M`^qA1)ksKf7~j+aJ_waC*3wniG(cd}x2 zEWVt(QcPpJV=X+1EFD6TRRJ8He61&qlg2PF6^`~T{citqZF~tkUm}YoY0KcG{B)gF z$n?rEK-twI5bRl+?K5_NkxsNL_>gxG^c8W}?EA<}>slUVXlR%nJ+N>^edcDLUWbqh zi_RV~bWUM;_l7p`2SiEOY06J9tcQLEm2Gog7~9pjd#`e9jiM~EVynTaf!$HR<7*B- z$amr%wOd5*+TCw6uB^-}dfQ3z1bKWCO%<@}KJHjsvtjzSD(YK*Yh?+b<&w;&QIr*j z7*|RR0N0NFIfD6&6_XeGJKbfbNxKc*;t@YK)}P@5zMc%P4X_*}BqCF?R7&!NX9nlNUEj`(QFP#SU1Acfe1;hXhk1 zRItm&jD*`KQbav}#v#tkh}SsN0B&d0t@va{<;I6&A|c3s`p-}F24~<%KRjsvIJ98d z7d|OmdQ~x^#BxKlse$>(NG<)KcuBt>+xiv_?tKswI(4|W^JfYoxkMI*>H>> zbNnToOS1iqPMIHbm;9HCe!BszM*1dqNKi8M~tpq23 z)2TZR#m{DGZ9(Yqo}@lTPB+v zP=>0HIqBt*{p2>EjFDwsI#)#GGvRW7n%38qV7`JJQ3SRePXjcJs({;>=wzP_>X#k{ zk?DbKDb=w}MyY5V6MV+(9f@}9D7u|R=DieHpIJ?h_9@v0GadS+LgXfyQ38tXHOFG0 zX2-;IiMD4&p~l%l-Zem4ii#;w4=w^ z9dO5x!7@o7C<4?pWL?xm36X6V-h?b)i6*F5Q=1?-q*J0Bx&X#;8OkEIPSmo5CwrA? zWT}dQhslj9{R*4sTO+8Ezh5J)ma|YM9@J9W z2dor5nhiB^l;T7Bc&r-@Ex!(})0QOb0w3u^7B4gC6JgmI29@v8U8sxslAu?~iJy+m zERgsRITTx;@$el(YGN13^?17sR1u~MIQh_*rm7wyT~+ge*{n)SSF?qGy+>zw(J3WM z>ekZ32e_5j4KL1kCViOdyWki0r}DnQ4>{!JqPGu!l|uflS9D+Qqxw|e*WJcIV3n6a zlFX_1p{`HQL&v;WSE+h_bm6%{K^Tp1{zQ^@;PvQo?quk3GaFv!~$ zKlL}rYnAeOs4$I)dqWC;;Uc3*+CB2z=iX)t3q>7{D9r*<(6n6bQZbIhoZd_Xu2`3I ziKuOdD}+aHO#vS4SgS9Tx1$M_34#{g-a$Z;0d2^BMsDIiQbUgSEZow|$6cNJHQgqZ zON3)W5?5H#%&yT$ZEo@6!E<}nXf5%WG=j!&3fh!Fi}@~Xob8o=OFDV&JbQo_S`84I zrE9$FYpudacI}q6>!cgzYHrvVTNx6%eixiq27iCV*7cA=KSkd}z`Enh?GXI{b5{6D z;)JqMIc&l!>T%3Tn(FguHug?S=+Qb@j(GKPGaiSK<5S~9%f0BA{p=T_VCvff1 z6kuj8Ej@-n+$831-l^lI&E=eo6W{fV4_Cm}>6 z%?-F6M_=(CKpOpSLx>Ohl7y&RXCNFgFeS^>ihVblg-gN7)WE$*xiG^9Nu=x?x&(q2 zFopmdI{%t~9p!Vk&C86N&4K}$$2Cxz-DR=+Ixnc5V#B5LObG{}8%g>rtC(FyLf3Du zEtjafTOEt*So4El6Qf)55U)(Yfm*c04A$`|6#kYMuYYE67Oh3OfyrU|xVgJZ0IFx2 z=LM!#zw+m|mwnZs2T7-YuEr=PeCu3*@9t+LYgSEvK*DazlqI4c4Zzy{=<h_SFHt(}S?IOMqP~l(UGvd8omPJ@SnZ_^>aIGnshfUtvzptj2A$5?zwfi$R`3VIG8fWINjn>&~pBRQ&(*TI%E z2K>ytOx9*-`tT`WXOU@h@Kz?<9%iGkI84pa%^rw(;nIm0zCgYFzxynKi zVRC7Tjo`FE8A=A((eISKl|#4To}w~6`20TDX8)`dF<=HSj7-+ZYF3}Ugn~F$TkdP% zF7Rw#dndu7Of?GLyXKN@;?AXwB1F|zMEMxOQeK!Psd(GB_azj+n=C3-r)l$q?TBW7 z-Ay{Q-hL4udt}{d#6OI;SL36T*|}pN!_-NX z=#R6`Uw;g;^3Z=Z1~wtU)6|74bMDW9sr%s|vqAm^3YysNp}=RVS57PN5?^3~q|8*v zH@ywBS1t*Fwvmte!(apQap8$`4*6Su#Dog|n2`ex30?uqw(ztS1kw?iGbPxj3LoOn zzbX-sAiLivH5uCdtiQE95mI?UHe%sk`~h9;-*A|XrjFl0_o0J4U6Acl(RFZ%S>F-5 zjf&|?u><}|7p1qC))4~jhgwdRaA)-E<%6ZfMlCLX&hWwF&Z2BK zIs9#WUB$=78{#_?I}O#B^)f`45Vi!60j`&!wgh_&>?{f$lsIeGpw)fnmngRcw11bq zYW12^ol5wm{1KMwAPotvY738-5`611k%L@lq(GXE* zO){6|^&WZX8y*L+G*p+59?;e2pAIjU_KQd8js7BnCt3|np~n%k5c$0jpKbNYsv*ia zly~GNi?zIK({jb7$SkX=@c;}NEcUVz%6jcIfk#n@63Ckbvw88{c|6*NV}DuGeb`IK zpKkyXJfJmIt#uLC?u0M}*M&0~mGH4nB$0piPh>t~fz?sS1Ir26-wVLhKj%dL4m_rx zKVQuQHUfB!T=JC1isgOGaRi-?=N1A7NTPkcy7SsLi$yFL_iY)oKERjRj^p(>6##9( z3Yh{#0j^Ohr2pNx2NtoSn16qIRkrAO4rxvHICC<10x#v4IqDPzS7y(2)UUuVAOZpD z1P@PY*a*S2x9GcV|A;$Z>PR;>kQWyXOifz`N@GA@KJ<+}j5WNx0owA$OVjaJgv6Oa z3;X(h45~UYq&UL$psOCM=rX$okRaxlgb`T=*5OMu7}_;5lUk8K8x@tAS}Pk*3>O88E{EvrXmKr&$~5> z3*EJyGsv^yp{e`mC*!qHmU&EDbW8@|XhWOEMktUXk*w@XqX!|NHAJ%Da+0OUNqH#52Fa( zULF_JD7%Yy-`r2-n%S1g7Txb&y@pp$2DDp_pFy}H+luOrV%hxxaXML{8(3Z&O1?Sp z+EK)#lf%l?Jg7UzP5kX+Y3#Ok1?4FE!UmmC4*8hS&i_@9?AjOrmXT)Q=ol4(y_7n(}Q9aKzz%58xx>5`o zq=HVexUAwE1IO3mZX;p{tr$KUyp#BS=W&#?VnSPgPXhEIB#$OB7gEX zvSCOXx=BggyMKpEonnwmC{zQ9r{&e;WvMpN0jzp7&uC{ZV(=oK!EhG%2DsSne0eoa zX$k8fU`S9p+Oo33*MHzgIYyATT3?#lx&+v1-g1w1>FN;d2-z{BtQ>p~@!x*!E44gd zvGTJvT>Q+zV4W_pLXh_Wn$E8F^mG4NqVXM>K+Ga~8-K()swfNEhP+pR3hy%v;^01hbm1pV z%lN$2!)VgKW^lrs^+n`qeAMhq4nz!PwNWkj9cl#)*XAK_;LV287IJ3U@d>4odCfW69bLhRNn^Y(Rb#7M~)1!Y^ z;D3@xHXMM6`|75d2t}PsygF+N%gZptd6V#Y-l_ zhj1^&okRncp{+b{3xT8f-E7|R-;g&`^+zX0@JJXg*VTftYh>IuLQ~uZh$~AR{7MIx z?2WdIKizVZ-OMXcX~tBnff$HCPr)`)1%?*HP_|-UTZm)zBf5SOai{Dgf0q`%1f+jG ze&6zuM-Zn{`YRSNC~JUu2poz(u0vXK^;WiX6~Op=`9857^L2yc_xtdVp%-4>TFQK@ z8DTe3@_pSl;{%l;>B$?N8EbzJmBMlVg&RWz;;Q%_zr{Ya>FD|4BrPd|F@IbvDKMX* zM#cdLVf9bLvJ~yf`?OO!QQ_0YoYa5utCLD$Eps2brQ}G;V^&U2FEB;!I}Ff>T|7KD zqya^M{-^O`uva{`zI^g}e9PXb3utG_S2)=;!c!szgt>5Sm$8ooLjHlZQ_`)Cu5t-l z=Q#UI5<5_RdVl=8lfZU3ab2%YKzR@wI}8lhQ=3)ooF8gm^H30t)nIiFk!XMJ7O}0> z_)f?~T3cJ+%lUhYuB|xLTsday?`9$&OD`?>NMV%=bhaB5%%m`4@Ur&K42?D}7&Eh> z(+B*(>>tSAJ16~h{t_~?qUE$D000282dO&52=|6%!$^n+SwWM5vn9j~BU?uUamv83 zC$o+C05+y?ye2b1U;HBqZ{mOF;X9~4ulwcqiNx#Po)9vapXu`<<9V@)XpFZWGe-J# z^mE&`h z;W$c7%Qf10ykTFm`e#8JbawV{ifU?0^z2K7dutec%uu9UL@tr7NKt=3*X@Osu=GZ{ z-o1a55C2m24az3DLzB*@lV^)7H5MUj5KjNmJU2YrC<>ljQA{y41rg!As|vNEc#S7G zs*)b~@CVnx?3+@VChXk)+SEGJr0E^xt=l}FqAMStu^lyJR>fV1{F_zUomh9J5|LtD_0D5o#fFM!)_dg3T3jaOg z$UojY^sfbkW&iQsaepsx#NQ*&{B!*4dF0PD2t z7ydcoe@0RGdo@H+&>-m4URkQcm z^5^yc=N|1e{Oi%);d#cW$~0Sl>)X33At$i3m<_t@QXFR9=*mvr(P^?dpL?yNi`Mg5gF%ec4F z+BZsn?ZOiy%M?hJ)Q7P&KR9?Pm!M3d(pkBfrerh^1x+#_vVchp5HOuQb&S@;FD~~< zF5rCbb`r`7w8FfVWRRqm%GlhetUyInHQ};AYZHIks!13vVg(O+ znUr}>)$?1ACw54ITBdJ;|FB5JXE`*Zns)vNMdz*DAQT1B527HalALoAbYu`Y3ix{C z#vT{8LGQlZb4CaT^Z&DrVU*GgKzm>X!7#Ma@TG4bFdV8Mf_=F-IbUeorpQJrRCPe- zHvcd6=x=6;K_xSu1##E;n0T(vs|#^~S{Jp#r=- zLNvc{6b)6IV+PF9&!G-B7X<43`Rxq-d!T1B3@>zu*M=jY*ib$gC#FO$Y>_Od7JJnC zsH#lO|F`4xN5QYa2ST!0wqje9UGkoOVw8Wq>}!+Y4&c{AXe0;S%E`x*VNs+#yQimq z-Mn1BD!38H0e(L9MuWaV@)XnMpGj#oPjJ?Ya9vl5e!N%A2XfQ)@ky!j6$pO| zr%4w@w>kS|mC#Nt3{O+od5p~^s&-He2>irMzZHWKCm};6ujtSpqaj@59hZ{FmL? zZQ|RJN5baK$7G%q2DXoLJd*+IdisCY7Z6h`PUm2Zu5gn!HGJ6PjHVe&%7i(`4n#Xa z<{CB5X9KZi752jvz^iVsGj3CZCqFtIlD?nz8_tY2i6SkCDWzZsuhug=i44{(K@-`s zdTe1+?`)J*c8rizde5P~4F0a^i-it5{9^BVhc`R~HB5~;6PJ>SuJihT-^_og+UZU> zvS*x5<$l{t#=$S_*q;+N-xXcOAmC)p^(!9w%%6Xrm|m@Qj(yAWqhBMa$npSL^ia3H zwAvFT5`oW~Vq`WPazQHlHe|k%=o*>e!`ABI2**g_jb{iK%%E558**P(Wv1>jve$SQ z31)MKUJ)7+>py;yp6?;IlI_lCrht-`vY#J{c%DT`|~QIda==qvE5J8e{N zt1FioZ;^@G6z-i~E~o&Hvp2_6^ujD#-C#m%G?nXfVGqO4?Upr>BjvYmKucebA{g6O z@QGfg7YbA~3M9Jq6Hc=8fku+e>m>^)1n$_NW@#?m*vXhOw$E7~ni!p}w9{YVFpz&g zvh$z@U|aVKVdL8&NF{$rX~~L~M7=`<)EU5*Squnq5mUp7fzR8tS&x|Xw;0{dDVp^6 ztFXCvL<>@8X`%Zk6&DhWuu$N>8-h{X#*MlXhj2{DRjphXV!xPB4k#)o*T8v6Q_ z$_h|FifDwbL>T}8^VK~R9aT{9EfE7TT^jc=1u zAs%xkz!D4MtVVzDMRD2c8w__JlqNaH(E6FT(x0F-hRiea31h345kL|GW=3}w(rZn} zHk0G(gcoVHbL6adeC9lplRk4SN9~e{E#?r$J&IVgOD6p6m>ndM9-tW&pu+Q^r{R*= z(=#7Zo-s_OHkcb_SyMY0j7 z((%pemnBxXYAOcg7D;22zG8$vsGUiC=NkoYu!f=1WiWlqWe3SecA@JC1S98Z_SkubV+_7#Z}(=411Bht zZ~Bm`F67G<%N*d=ALo2{4#%cfjgD_91~L5^DX2W7v96Uj19S${CQfriF=!Re`hW6IUkVySniWRUeNe?5+z+VHRq`W;BuJy4k8oZOn$wqS zmn6F7F;3b8y-q<~Bdr(fg>t|3Q7ZWj)Cj9YtqN}s9rOfa+)m&8OgZ?z46EvJQ$f)d z)J%=Q73;Pcf`v5=;`wI!wz&v~*Y^AgMqz)IiRZ!Fp8v(_MsUUZ=82OGe#_=qeu^I~ zpBqlI32%Wrm($cu!!kowZB*Ho^g{yBF0%v((BT@_u7c=dJJqp~r;3mv)fo0H<}K5a z=%29*6t}K@r*1{gd;cExbDa0j4NHx;`Jf@M{|afrouiYKAY1}wN*=Q)v`XV@#bkdP zSp{ZDK%?}LPEMz_?FL_np8ry0J|O{_9XuUjInlP|*RYzRrN0q)*(U%`c8P-yF~Bia zrs;{}BQS?Bupby~$^vZYG&OZtTmXAl9p~3!b!>B?)40&ACJp2Q~^bZaCft z__b!)mVTe+F!x*VchGRZhHyik?0@obs6R3N20J7oI21EIuFjfG&Ql0Qoy~V>P#BzGVTv3*YAkZ6kW2JjXqR#0cDP5 zLx?^~4Pf!TiH^o{pn>QYD^7nxH{z;&9O8!R`p~IHaGjPktsmt7i8OIR$jXI>H9~Ml z5_v~E+oK+0p3O6q{}eC=Lr;W^Dt6~f~$WH2o@PRh8OI- zSwmM~Tx!(&xZDNWVm|&8pCT@E;yhC?@}qA9_)XUY)tG-S8&BHW_wKtZZQXZ^(Ju`-}rS=l+RVPg6nP{5Lpzm-G)-~L@lXUpJd!J-_)`Wx} zCi+|ZB9aWodTk_yJ(q}~g_w3L1ASr@bm~3&G^VT^>8s6H^{4?LblfGdMwy3RNpZ%F z+L`>^ha?(Ax!HtTnW940l$wV?0#cH`u?n;c1m)>Q=#OUPl-6f3bm0CE6EUUsdOhxx<~+fU3!vBE?Ao}Geld$J*( zNbv}i&iwJiz9y7NDlZ8$I;x-9P0Fj#;d*{<`q%8s+j{tV4So-CzkPn>_^(f>}g?wMOB(p8xm;D=t>gI|(} zKV}Lb%Y@>e(QXRWmkN^{?H?@H9AGJDF5iV7708Wsii!230)3#0dtN9SJAF)xt-~@1 z!@fh~=Iq#s#aFOzioE2i4}Fn+U2v3Cs{K?{XhWg_Oei^>|@0pOScA|i0Mwo zc`kNXyOQu1`tepw;yF%D>b%@r3cWAx?wa1)#2IZ@Ab7R%W^kK2eekEDtd&Qegt8f=kUbRCI&Kt1 z!3%EI^BpMX<%y7?A0gIJ{U)7-#&my`e0=SxUIlAkKI!XRM>l`%3<(8g5Wl7 z-nuUvaBoMc2K6e~&^vAuU($a)u1c4^g#}U%@}4~8I5xk-{Pm8Qa#1Dt{@+tmv&}-K z&4_P)J?lxWgFTMY8Z9$8XC!-Crr9i$O-dj}4EG@?yP{Z+3H=-#d8HWZpfUZ^T&HI= zHx0;iA=nF12TWEu@A$F^atc#4qmPK~iZ9bx4T0Y_@?+Wzq7#?-nc;tsI`Y9iDx)Nq zH^x`(Bn10>mY(K#g9%32biLY#u6Gw8KUav6Bl1|IMlg5ce0S8o@n^bQE2nqcXiwp^ zKq2?Pp@XkFwqERO#S0n{gh3kt|3 zruF;_`&&iyZw_)RrUHL~Qi_!qy|1jwZM)<9qOs#l$>HZCrxCK6arhNc7y8-)?Z*FC zEhAwv{4jB$B+VB%zDa+J8*_?BjCIewvz?kyA{<{vkesDc;XdvLv) za;bp@8r=!=Si;*(>;8OyB|2q}SB%HZQhOE7eK|TIky!VumzO1A#7@epI7Af`1q!Aw$G6R90A z`4l&*WBFMGZ=FvKf9Kt`cJ!8B*fCVS*hO#Uv!^eo5(2Fhp|#3 z3#u5G{PJ*n$902H@@O&5xsy0+m$+3@82pGHz!|5S4m5w49OQHI0D){g0iFGnt41C` z4%3^V5oDsZPcr5Zf+q7RUsNMwue^UZqq>&5f<_PleKM~L1iWwV* z5K+KWSh#<^6a#r({UD?GnKgaR^*N{(kdahU@-YZ6wPw2shS*l^)$0|_`d~JKOM!G7 zR3YHo@|7u47N2Ui`OE9ZVwoHT4ny=41`C_)SeoUmD>>-P&^ceriCVK)lh)#+EWE3o zlc!B&!?}ro1>gc&z4b-#wH<$?(FNg@c7=u7HVS{j2tenyP3EVT`SFHS8Qc@Z{kuYU zP3JO+#EhWJ8R>fbHd1TkebM49lWUukiq&?`Unx1@1kjLX2n%--X6=DLJo{r?5A%3l z&CFypzBz7uIj9`?(-~>xo;Q_U+wQlcDKLk$S5F3CU7CQaoi}={^LTA?i2{D%g46Me z6JvktPVkKo+g^*4dC<4{_j*q@Pz0#gO)X;L5yqvpxxg;`?OfE;XQ19Dk2_JTJpeqW z0?JwEG+bYfLn#$yWSgEHyEumXmJDVUA#w?%%b)-6@f)xx#`>eZQ+Out*VJJTYOM3# z6elRv{BlpQ`2R$iud&kw^UJ>t>WqUb&q9Aqh&PS)-i!FSWe`2buBQ!Uu#+zQ86_sW zn+$YE0bTh`R8ak45Y#O(t|fg!x%W3@FaoBX}I@8f0SF&89O1C+xYOgJ`7{ru!5wE%y0 zGY}T8XlBU+?WhcOWIn?voYcZy;7~oj-^cctmfAA}W7LvVx+y8Zx*w?nkdQVma0BpKe_P2Vv|;nA~Qk zuYn%9Qf3_C7;u{q$Ez-daS0#AK#cYsx9?GPmj5}8L3z_YYa#fn;FK-pOaA}d(HP2% zl6`~s*oe;6xot4nO<4I>OPp}KRVtVjb}64$CASDv-v;!vb~6<>i_7IQAAEmi9nnLU zt%)_V>L+6$;`V3f1o1|=?>OIii{xp@e3h-k1c|2VMLkj4#|SdPr9;kP)>BQ}Q=4zA z)PbMuD~jagM%h2HJpJF9F~ROd69+0SkcV3?YaG_61?6E6e6mdx z{qqJ;SmboXJqc=UAL0Aj>k^WX%<;BqL0tWPu=7{wQ}Ye1!*d75F27r|4nNkx&N6FG zG)*-6(L1};u#XD$1z>PtOZtKXII@OdS6Ne0bbFkh&MoL>{$Tyz6vTh6)Rlj;5bF1D z6>&o6O3do*jLqOldqQY2Ln)sT?-D?Fz$P$i@_}<&B9(vTYmy&m4q`S@FeeEj865yz zK%>8XA(#WeSa&H5+BY`*pp(BDBi1i7Gft3H=7%^3xxr|1)f>G0qIT08VD4K+)_sU? zA~QC=($22VdOpZI;qFcVP0rhl8iV?B-IDV5aFeXKm-xWrO7m*BoSO~tc=Fg}@Wa%4%; z=p8tVPS1(XDMSL*f#FzxS+ri5HC{;a?8c>1vsF--@Rh!4^H`i?eza6ZLZ&!nl0>$U znsy~muK-E4v2ddzMru`Uv6|8o=>VPjP@*DE{`XFt>z|_{8H7~o8aL^ zB4d3x2Uf-)VFpblcIKnhcRHaS0WsPllxtqTHXZKZM;$x?_})S3Pxot56DvaVbLch( zLxHb%qEkv5klYz}O!}{&@50{!58?VX3v9RA8jE;*cExJ5I3MX2wlC1{nm<0U89XE>R*)|F}g@qL;DI>jkGbY3Z*zvkg> z6Osk;g`aRYUfp**F8uE7iWgsD9vpHUjB|Z@w)(kAID6E&3K`Bd4*q(c3*SwdtRc1C zG|allCh>%JCSEGrSv6l~r?bI&M~nX>A_+_N3zyJH zj(GTfef0T;aSliL21#4LOho|4ZOSZunn_xJFbr8Wj{;m|@ME&l`M`I!h9v=OEV2H!;*2?{E8ah#FOp4tDas^w=n9 z^D~M~_5OJDRMNO|37hhon8U(zp9&LW#rEyTRcq9^b{qg+aFw$JYcaQ7^N&Ko=HT0Z ze*U8^EjzUBDh~fcw445Mcp`Ji;c?(Cv0?rujpM_N$S&!m z>aB?QHvNY5^Mi(c6_R=q=z;BzGaVi{zNI6+1pHi$Ed-s zA1?tBV8I&F7H9M)YS`4Pn;kdYEgkOQ5Mw<-KH`)6<4eV}8i4xmT}qlU4xv!-F@6d! znZI{IYHw{5vd^BcC=g?)|ID4XfLt><{Uu-dGlbfyWTZ3ZA~_dr<^so+f-3e?lVb$9@aa|3;{qAe79%34{`VaA-w4J98xB zb3R-`@$o^3U`Lb|t8=Yg{frSF5_kPfc7%L*E#s3%gA#yA#dq(TY82mZs|u4~kcd@r*Qvjtu*n<@uCdoF z8tqHyuj636QPqHc$e)LQi>@Y;^0yri9shs7iTdFmVC6e)gJ_WCV0m*c0sI;{VcqxY z$QIofHE5zSd)U9&yWJxcTWKYqdU(JTF=P6U5F)U9c??&42+^TbN$49WKatDD5NZ}g zUnH@ATTV3U^(AgAYK8;Lv2$8o%K3VRA$2W^Z!u;qQj2Ipl0zVWb451cqrdUAe&poA zGDPt@G#4PpH=?WvPf5}089OMGlR5GIxSwT;2}qqD%C|uNIr&u?q6BSY`t3vj=iIV} zAfo}9`NqdgstB4|O8NBc$caAN8b>DvTk9+5U8vmW&40kQ>}j;owkmnf#Ua44?~7)U zATtC41lLU4ZU;$!B~^LA~2tWeA^gd7o@edw8&BFru% ze@Mr`m}Wp{P~8h*9B2xc`9kdy27q|+ZT8z4Wgvc)AjvW}5eYD2a}x(o-hQoWI+B88 z`)`#^V4)@B8+8=*454eaVN`KJ=o1|FQkzcuMX112>J=t`|5V)i8+u-^A=Kd5a~rLX zydGc=kvTA{UzQ@M9xAI6*0OM00 z!O;Z(tP}H-qXNwcd(8NzxC3k=Kk`x5ERX2|it(zF2q*vswmSRu91o!x0bx1K)AE#a z;1hbW;wRhW4{kC3GQoPjs{K}66*y=0Nr^I!e>m=cfPO!7g#r-K;_;mf>=c-c-$&b( z4jOcaOQug7+ITO0i(VG4Ncj8;mp)aC44#LVBmfVoSWx{-HE3AhOm?3N5tGu%bz0~h zWI=xP08ude_)VaH2q6Dh&J&;q8`t(e)V6p@Lk6BYX(M>>!Pi+-Bb4Fylngj9 zHSg1ZVr@KgKA(ErHN=DZ?k*?zga9Bww9q6v*30*o;&CnYgnIXjm8aV`W@BHgB*peG zy+EEAp+u>W)YG%EKo{@4gyy%8;>8#t0d@R;+xIml7$TJUvKk!a#7LZ}5$ee4GAra4 zf`}^7LKo1X{=qQ|j1w)#m({@NJnrM&=qBqmnSQZ$nHlZKE7+Lv^A!ay$0ARD??|Y| z(@QPSex>D@DXFEfJX;(NcH@I~-6{l#^DutFwG_(pLrZk!EAznfPRYmHu<(lv895!Kw+T4abq3o&e-w(Lo`WW!8>Ng#At3mrd)qw=Gk zm3L=YkMTszSnKxa*M-k+bML?Q>tN=8XNZjHH=~x(g*C>1e{eATKi4FZt2Y>2LF`BqWf&7V33B2KB8$X zf(BI|bkc&^WY06h_L|dlm9@&1HezBZ-6Qr+e(-n}P45d~&z3_1B<2y!=<0E;ySHuu_l;>lasrGV3Z z&ak_ScoX(@6RmBkfag zlGti?LGyfF1}=!Jp>m03ojrR@4mD~M0^FP5cQyTXVGJ)L`e|?61b597>1tznd--0_ z@K%E>hExK{rY>H%UtP2p{Jo41nk_X|@FI*+Q3wl@j18?=T)VVGgDsSQh)f->x|fRE z_Ffu-{U_hu4_lVC9+kv4xA(PLWJLFG0IG^-`vx_K+ZupH-H`>6u7qT8b zX31Ydp&-80m{~p?ZSG84zi6i>b}QG?#-_V9?voKG#OJb#dD>4KWY3JZNJ7c_)7ujv zjJ4~SA9_kT9RL>NBjlyyFN7WuBFP@iOYf-dZwSLjJF;o#%-O z7bt4KogW(;Mn^Y=$`M&xf~dRpLhD?LS0Lt5xCX?O>|TnOd@H(tpfJ1p*r0X~@H1%q zp3oFK_q>sKusc^nL5Y|}6*PoHOxLb<@{A3bkM~=Rn71PyQV0z`{N zcg@vT4%u7no>xe8mP&e_B_{dL^nr_NeYc13#$4%q`Ir@}h`~&3epg-X1tO$KOLDiP)w$@)uM-^ve8DS>{=_@YMklIr0v>VS~Q z+beIO>}xnzu|Xrj_xu2%Oi8N5VXmKCLM{LJqPU?U9!Z#g1WNRqkspDykFitKUHeY# zj@+$HLj-MTy}Pz%zK46H3>lMYtzP|r-F{U>DG%rTw2rj+jANR1YB;Q6zMFgE_($bG zvgGUrxelp`)f0}og57nFBRJD+d96ga=z4u3r4$Jr6quwBDFBt5t`BDT(Bk_3>``u5 zI}KNooqg$lp;oAOaG0=&g^^XP!+(w~H`FiUZ3{Itz?^vRcRiLGSQMZG4fikW79M&r zuQL5|>pSh)8W0;0N=#NJrx7&~EpswsDVM%iIhRH#KS;AbPEm(7Ex6&=!nO8 z$&77QjB6>6+g*CW#OdWV0yf-qJuxqEFHWiue4}K4g~|NTR(TJ2bNvmUok!#!-EjwG z7wZ1Tdn)e#_h_@5Lfg6!L*Wa%E=fKYR(2EdUE3K;VCvE;D9nwlbfz4#7R!xRLdjm_c&eH-!OjkD*q zlx9DFOHy@lL1D)c zRH|ZBE*Y`S%=m>cI=z&-c$jgn&YR|!3sw9NQO#uQ^v*<6DcF3F2-SwnQ|g5&Fyty4 z6LB?mA0|Gp#Ry9^a}^pw6WyF6jPl{JK;u1spUFN_)6|Ry38u~emU5(>#US%$)ZDr+^^v*`VWrw-ihyK}Vj&~vm z*>Gs~`jbQQpE$CMarxj=G=y|F?e={`Ux5Fw>a}c$H%c3^vk=6ci2AAw%tEYx zX=ND;ufyNnWF*7LGp#9g!K^x+;{4J91YUTDD8T-J6yesph*KSOsfE98bpnnq5;l zGzJ?^B`08Bjllf2eawuGu+%BNo(u{Pvvt zDrK0MJ0zEqhN*9bpeZ3YNS>dNg@8{W1+`ghmHf_>)Yjj1#ts2Cp@%TXpZ=aLTw_$y z-H}xhspC|k+Orr?`Q<$#3M_eUxADC+V*Ke(EXE`0-*b- z+iB|!PPSRc`Sp*lwexfDVEhdmwfh}M73P|XI^Pm@*=Ik>fN?_=y4ECr+i}`XtHXsV z$`dm=KK*9M4FOlFRN3;@n!XA4C>!dfXD}{g69%kacf-XDzx_Kld7Ka0><#t32gWB@ zy~z1;#mmp#sjrCOLZk#)9`rkhAtLYydw^kSd&&U>g}tgveTcX2qQL$5V2PX-0L|{HyV4+*2F#y;C$nfw!h;|+L~5j ztn@bZ+^NA#I-@Q8Bxf9Bd(wWSvt<$43Zg1Gt@W<%YC>doMG}<|{r|n>lPXp(Z0a*_ zX6_e{V7WdJS;ij*qUL3=*ACFX05nb41sf`p@*o*Z0V8)TaJ1aqM zeDSWW(hfH^<#x*efARTpA6aT>!)+oFi1-GzH8=6lW7roL;qZ^yt(~8r3$|x)pFpst zooQsGr7nnEDe)YCrnpYpBVOOg#OFR)XR$@FywMLzf^>PvDEQ`4w%48A73b4eZ>D$E z!$KZH*t^X(2<02vl$##jYG<1wb0*J4T7B1#w`1BDx;E3M3it-K}h|hl)um&)n!J7!ygkKiB-%^M)pGNQZOLCK# zWc}a{Jd8QHLk19^aThY*rb2#qpyzv|Q!e(HvTIK?S8TaVh>j>xvBR9^J8RSi`JJvf zxV;M0e3Em26Dm@qf>O&kAB>Cfg~cI;!r{tl&?S|qazy^6Ma=S;kO*3Yt-l29@ltL= zh01+kS>F#i`IcL?ACwS|s!HF~Q5n8~9#MrhF}>1}U41Jn$#vaobGPz`EM0uA;fm59 zKXWiQJOw|u^JwKOAMDx>2*tRMvvQX|RVgGVX~&~~=Av9{*J`)PmHFo^i&Yb^ym#8U z>W2BpUITo!tn&1ICUGff0>87~6V>;Ks-KW(?p=KsbR2uPpqAsuu0hofn->wr4tW^z zeP(!|7%^hutlqQtPpF@b664OKCQs>}YH!V%jMf(DIfPG=4?zWEY4mlS zx!D&6dnGocW{^&=zs^gm=HnTwNJ{jI0c2eYDmA>weSJS3~d*fz{nMJm&c91RJWVL@G535CtW zo>3ccx=KX~e(egRwna?A7Jx~vRl7C#6>vTaVNw?yjP*dS=s$7=8sto@jPKr}#0fy6LIf4qem4`f42>)7kzAe2N2$nDnX} zVXUBkPyaQ$MF%M!u@9;b-=p*F=#Erype}4yjwfEkr+i*hXYP9>a#A`grYZ-t{kioX z2?%x9*oG;AAjYZ1`3E@rh@$PXru(>m5>0BKRjS?(70IGgH*+;P@Bnf8?^ZmZ8YnC8 z&91FI1HOx_`&*02x>%M@qkeEQK)m)AO{SNkn1}B$VhV5vU|&GGE%3xzw;FM1(pa34OP)w&ej``*@6hQtn9unr)o7Usm^L z)%_=Yetyo&;HA6hi>C$IDiHTXU-8`p`DG-UgamCwcAcG5grB45a@JtpbE?A20iy%#!o~ih`Cs8xwE=9s*yyuVdMr_$*V50)2|; z|AE|iXFyC?m6ShjzW-^5?~zvfEw-`w8?YVu3fiw*OWC1SK}S>I4%eT5*AT4a*g+#CHx(S=I~JvfAIEIYG`d9j3Sd?d=Eu`QnHiG1fos%E zA%&o5*q<@<%O6}a!LKxbz!;=oRl;2=hjqR8!{Z8Y4}p7Dm!op-vf-3P#9aR5XZ#U5 zqM#(%k7zUYs;isZz$nRyrkq`^}&j?1>q#GS&3g{}9(o z5IFYQiQYW{aCE9-0{ocv+=h7Mnq1kiJIXr!NVh?KLCuLkbf}UDvwFs8sZ(Z0 zM0}KPbDviVF0S-`7V}^fI-gY5t>QP|_JJ<}E3nos9N733%{;w9OJOSh?U=93^9bQ# zH3b3T&kxd=c4*A{p!MW;Wc0l{5@>7M0bG@9Mt{5RbNP*bZmPYWsZKxxJ=1~-e_MRR z^l>J~N3?00mBZ9qf+Sg=L(qX?zIit{1X7#xMYbn|Ra+ltbsXP2Z0I%e7g-u()N*U$@-(3b=cvHUFJpHdSULD z(K{l#4UE%yiO4)F#$No#Bi*Mj)`&UN6DV2ihdjWG<*O3=wVv#AB1bBC1q=n@VS`M+ zp{@1t);(b(=@fD0S5egA?{s6#g=BJ-dwQJqA}Tq5tRBlxCMag~R(pi<(UFnfHCi)h zyh8iHK#8}p7j5wYsK9T?d$urL?BSVt%w`BbKM>6R2IN%cEy3#ghbs!#0Fw*`M}p3K zqSj=R&d|OiU*Zfez zPiizw17wW9ASrSZ0Q&M+RBo7eWuHwUd|=Rg9JJUw@aW)^6EI8O${ri-npK{!e+6Jj z=>6_ga?z*LOU@8%Nz|6RqlS1*rf9A%2Tg7Hg*>hlF_SN&{(6Eh9S(w5-E?m0qV?-I7T#1t+=y+vS~>-r zXdjLgpTweizcPn=AXa0X1COcQTzZ$H^s8r0lz!KUYEfH-2|iH^Sq#&bCTG&f)mhDd zNq#o4lA2g`&~KIkr~mzu7qNTlf^47VlM62Lnbu!*tiBtW9XUz1+UY5@Y;$N~BTtt^ zm=#Xa(67&DJgwCSJKi}5^jQ}h$O{B}V^w9KN3x^NQRx1hv9<%~3OL5QH3}3MYGQ}} zl#d)vhifVfa&Ya(h1#i-$dKn?n26th>lJgMMNyVV%C9>L_fu?Kt>C~3V8SQP?kkK7 z-R~ce-p{cO1K`H2U&mar7YnsYo=l=xqBZHYcA{E{tyjJIdu56X$C#%zhWLVMh?HdK zrvE&LcgE&yS@P%>mF+3x&Nj1k6ak*mPMpxRp7<&)!&3)qc*=$5iDn!yNnbL5ypz4) zaX6_pIRW1cqyZZ$eMVd8M+o7^>ho)mAH^4dV9c!z#^d~VPswmbM9{PV(a0Rdw5=l& zE;7cWa#(N$*L9Y5%EKZu-3uw(X04Em0eNd2hpnDwtX*`x{n_}lj z{dh~&pe9fXH<<4~167aT_Df@%xD>YIgn;LS(S84<3Ulu}d;NXjZ} zn$u($v_1P<)6g_P*eoj;$xVDQ>+X`lw(!?FF1X#on1ayfQYH4AtnB3YKSlc6c1Anq z9K=@weX)ZePMH!)2+FqjCe73VvQa8{HNu}kZpY!R+N%iwhm5I7s6OLHD_lJrfTkCi zQoPWb%RE>@>Q_6B>iZ&pV#kxuUJxRAUlyTq5HcNW5nM5D0b1 zlp@2N_3o(dB?F35zTXe6Yxy%{=USu#fth0KjZQusDAL9e7z%+TC!0Mkiw(qx1#0JL z)cbTWkonU1MBpFcP4M6#u`OGZSWUk7byKjSbcP!GQdY__P|eVPmNBaYP6f!#E4ICi zhcX$j#eiOHfsy}$bc%SOVbQUAP6vd)p$%A-yk%W(hNBzHS=oR1Sm&!QZs$gNCN8;? zR6!t0GxAGREj3>4i@Po=LcWfr>rBb)z^avnF3#Kz!QY=t7#OPWAPrzn-D5+JBVhFO zKh@yV`oqR*Bk(bQv-Yli#nHIqFb6#jW_seofEg`?GWp|cIGW_O5CxL8#%D+dc>PJkF`*z$Cy$yC! z^x*F~Ky?GmKu_IlW)$3oKCA6Yx?NpcOP>-0luh{MB9kxFW-}$^szN36wby{R8zcLy zvNm}a<}67gMdof~5^*p-)(GD;rB`1ilLNF*sS<*(;mA3to3El8hy-!pc|1OE zUoJ6%U(8E?fC%xKBD5~joB3SrB1KzkP{wj2%Df^rf|)zCX(z=6F%8mmmExZi>t;{% z=N(4bea#}^;f01#9*133TcEw!?al7k&#&?|;-9jQ>n@F2QH~PJX|@t-lj1Mao|tS* zLXo~WmBazs!=15x&%$v8o4}J^ZZc%Kr*xx8YzrNKjxkROEj`!Co{~_nTJLO_41|DM zm~l}sT6xQ2tA5bn1E7$elPP<(DjyF-|H;`qSuYz(eW>^FM3V^Q`#pl$2ReZl4{Fj3 zS*$~Zz_ck;6d*}KdW1i*H{)m&_p94lgGaX#(mc!k1pEmnzq3{CcVNb!u(B)9aJ>}P zxxH9_YEo-{brM2ZFd$ZLP(8Vp8@|`|TM-DA5stbjwO8zvJ9rWH+LFFJ88#*^9wMuJ zYj$0U$G#$SMcgD#GWi_W1G$7Wu<@W_@%C#4P{ zJ{#r{$EWylSG7Re3X#P)OC5?L3h50U*g^Eh2JS^>4uaGk7!LgUx8Ftj*vbhwy%1f- zcP9V<0J+a{(x*2_k@Pk_T(*r)t8H>Tg{$(v@b~cS>mCZxK80<)(~5~7MGg44`Zei) z9Dku>VFgUTJXT3kvqsW>C2J|e{{90WA?q7?#bot)@ljFU#TQ(jUOPgq*qH;3*J7L$ zE4>)~;Z>H7q-P4=nB8Y_L=X*9}oHU((eS=XN(-i190h|UKh<*WT1=1X$Zh&cxhdNP5 zi|&wySj))gbU)%Qf4vfzw}GpeG5!YO{&(Iw0k(eZIB7vuUPEg-h;>jCy|cpp8RAz+ z{O^Pdc7F%y&7O_zd~t|iH;l+S(#NCS#IOsTe1q! z7#+JTY{u$;YZ2%8-Ur(p1p(f~P%Ip$Lj&<$w$fdQB5P@3c8L|8{J=uw%R&O#61$*_ zk7V3UE!e;NfUlI6ua7RcKxuX7Vk5 z_4wIMqeP+$G5iY;<@BoU;-!gyd66F5#0NOjEhI-nB@dY<;)tXs-CUr@V{s@WHZ&{B z7E7V9CSQ2tL`ixaulcKKHJ4F!{+Vd%`q*{Kd=WlRLt30C9y>*@%4PaR;(aSRl@=1B z&cl7Gcht{s7_r0{qxnEibV5G$Ra~unWfxxEy24MJf$vS!qna^XkU_+MOQ7lYbTV6o zmHK+VGpue!h7oC0Adpdu=F{nGm9-Z48w%9Jrj<-z4}iKZ>khw{8YPh_37=$sko?cbx@54bRetPGEmh zxKcV{0UUsU`4s!riaxu4qt8vb%>HJt=xgI!rf!wP-P-qU%E#dSH0yRI-=8nu59X*W{IRizpdyd zleQ;|^p#3BlC!C&UHWroile_Z+o4u%zlo;%trJ_dY-3-Sp;rfgyon<~8?5ENg7tY~ zet_r%t!~$6Ve4zx63^lO&r{{y?sILHdnS(DciO^^oYYY1B7Wh+dVz1dP0_d#S zI^zVCvqX!TD|`3C^2Wy}rK5oV+5 zCR_8Ziz9A-ptAQtoe@%JLKIEmwUK_vQ)!m+B~W=8eNd_n+xqTs`LYMit&c8}BtLl= zI~A`=n2z3e2WD-D*Lod-^x_AL>OtAVGt~?P-&d4c6qz1HRSXQ%NHX-!{rqk0RsnYO zTjHRmDu)!rD7!f@tPJ#U`eqh>GkWFb@cIx<{)(!9J^vhT{Y3%Kwem}VKQEcnS#TWw z1y5lMEUWv8N*PQrJ?@ne49^4tI|B{Fr><>;L^RVp^sf2je^1bw?I9KYezGDYe(=X{ zta+ZtWC{km(L&MfqqwUvb^t27DCj0F~Z5CU{l|+@ow4- ztQjkR+p5HdvaT{(W3l4U4p)z;>~&Qfxd?rVY9j5^1+jwO_`*`B-BbL-odw_eaoB!C zX!#lqt99}wY|Mk|@g}dnh7~OJOtF92FQIJ6a{)k%Ex4-23+03EiQDVEQonEP2o*@H zq-KoHaHyASx7XJJ*P^h7=v6GG2nXv=b%UY=GNq!I`_@u z&0q+#Kp0u$`E=-{Bk3Eq>Yr6=jh)zkYt{!7eC(!nMj2!!+~dpo`yJR=d$Wl4JrDc)`A@K#&MesZw@^SB zghW?bj(=2fbqWjsZ7P#c(e@_F&&*|rY#pcgau=@qYQCGN{;>>ZSvC$MqIQmd%n+;R zEfl}1d@;)p2Q8<^xr@^*W?i7`^7A&Ztg~6mtBCg4*}mgcUMQwTC8$P^Tq0zb^BTTNQ2?e7mFeV_=ehO4rAfK%ia&M3exUf%5X`r$_}bATGGzrC;;rXpB)z zN$?t(_Mm|yhUc6%#{>V~VoBd6cpbp5%(bfapF8CY=Nujl9aP5PWr3p>Wr;^d1@W!1 zqJdCI4aQ3^qaO{cb>d(lckxUfmxX)Za5BAt^SpoY^Xpvsb426kH1Iipgt0H3SrIFd zyA%t^@0K$jy*V)a%+$*wErA9%m>KJUujaI~pX z^*Y;7k-CXs9syht_urImz~v_S{pAO1X<5j55eT&@m1(H`cLPQ2MJ#%$lWtIV}%dJCjM$y;MC< z&Q-tJTAm=wux@7$Q9U;`JYdHt=v~utHV$ZbDuQwBm>}@-qp}*3g^ipuB#CNZ_3QDK z6zx02mnpl4S58grV-VKJX}WvN`7jD@&L8pV5<#bU>$61xo6odetfU zhPGoDHqgNxodVQ<!Zj8Yg1Ex&Y4=D^4IjN_*@;)&LZ@Y7APUd?iFVA z+b3>CqrSv0p>*8=DfaJFXOH1UWH7j4Epcv(C2K_yu~Mc59(X za0LQvi2&wF2xTq%L3l0$P*Ws!n^}0A!p^kuLYShBa)3^M*qr6VI&b>E;{He*GsNqW zq^H|~aJTqsQa0Hx2`KqZ;=Cj@Bq`{myy9nQdz5f)@Ma(2y0NsR+uigAkZLAP6Ch{; zsuWm(Cag{Og2V6~{Z7^ed*6(3rn;9S&Aj0BS_JMk??sf&*lBGY!drG>R2&nwRy}k3tMh~tZ99GdRw_BSJ;Y=?`n*@%h0(Q zS*}DbEfjNf+ea_K_8W72ne4!cSIt}w6h&!dD%}o=sG^4_uIR;0OnoL7bDz$WEI^*& zgHhVJ4gt~LLYTuUDDCFQ+9XP>j2Q|1>wZIXKJ@gnOhAG-m^iS^z_UOLfe@m0s4E0v z;y7}DXA|I8%;v6YEZHUOXADmInIBVXC)hQmkp{z& zrI}q1`1g*!G$_4dLva4#8M)evLmv<7tpiO2qMvC~encg#4IIC!S>>1(w@*aZn5wPl zQ%A0O9+n$%!UjCLzE^(jrl_c*B&W^xzSyz)Nugfx7uy4W zhEO;lSv3U!-+477;;ib6-(bP)@bz9 zoZa~{c$P!kO;4e9LJN{$H_Mc|hU>hk0#D@LX9{`5E*yS%SXP|j zg2=3TYCm)-`6HWG_J!5;2lj%eJv4=X+>6;gxnHva_Hj}{6joCk$x)Q|v*_cBNeyC6 zb^}x|DLAec_uW(jH0yGzDIDU!t7z|xq;%(j4wO@{+xKRPGx#_V zZsiXB1CuvymCFnk5rZPD7%wN(^PJl539<98)!LUdXV3VOZ(=^I?YcW(P@m6#r-olX z0s$2#I9a4$*Xp!)8M=NAzLbxh#y6@3>S)3gp6@U%-ihuI?fEGlY$g9rV{&nrNrLad zCfOQ)JecpX6P_kOH(+#~=?YI5=$G?#EGzOi%kk4St3SSnWIs;${O}b( z-q0@x&Hytimgb_hd?ds)HB%N;xQsrwI*Sf}m)9e%hMXzd|E;q1$5Zg@Ohpi;8 zp_SwA)a6Bquk2aDTCh$lSJ`@q$d*RqVw*H9J#HAWKw?ZrS5t&-aKpi-RG^)3>{SQN zm<5S^0!vgvbWEz)O#r46J@8!U02G`c7*5fQAj>i^HWIpOHiZBH zsx1VrC6TUmQC~=`yL)jRS_iL1blu|^#|T((RxRz{cNXbScpvM3;eJQHJLMy5&bMQ; zEOk=6a&G;?Wb0Y%lA%iZ{J8|DG+bbPkk(FKs((3#(+@ESG^|sE@Tu!T8^{d(S(vtZ zdhw|m$%Ybn8g|$h;g7>a3H5vC^!MT;rfb7qOK3peKrX!Y@7312nKdvj4O<}p)m_khO0R0jY(8tcL4KKSd?VBp8zmqT_$ABA}P z)ys+~9=D}$x@m2E$VUOgIh9TB@5K(*r7a<AYzMuMI*=|a`r23Vc&jXnqWv#1|KQOiiaYgfJzJ)P zeqG^6`kk^8?jq2r>!l0eJaT6j3xbF-`1km>LB`AYZKWGlbS;Q#y-4zvyljysleu+& z5zje3O+-c!+cKUUT1om!s$_&mcYf`-y3G37255n-SCxpoyTG_EZmu5U`}w-sj-2S% zIOK(YFFo?+e5ZwQ$N@Xb1Z#SErq)QoNZzy7P)^@+&5&y-ee$Xa?}Ps0getr{DY_B5 z6xh%SE{7E&k-V+z3)v|5=tj}6+^3Y$AM*|?@$A`H0G%N^(KVyg$NF5a{yokQzh zE~Bu4&?J4fK)XDPRJo6f1;xJ|j|c#?44(BY{a%bn^Y8HE;Tkw03l#`0$tPq4*x#y! zK5ZTDINSiW^D%6NJU<7=)^0qA26W_CjeZtQL!oxjP=L2oo!dhuEvy)P+lK?sXpYK% z;zTuD;69av?d`=W&?+XX`nsC>;i-=ZG6Ec>$wT74j0l%H+FNUkA>61cVRlrSrnQor zJ)KVxhG*!6gO zIws9~{lmE4oILzy%cn2c8*uv|mh*u^d;)&c=!?GsLG0Y&ERBH4s?mmR+vLn}Y{`;J51T z@fNYmiB1?mF7trZ;X^R_@u|P;{P$DN1~bU52B>a=%sl0sR z?bpx<{*91<_l?fFgqTXHHFGG%zKXIfqX@3;dQB zKa6FWI#FO3{3cbs6j_qM{+(HWMw%ZQiL@%Owz1OqUVwq!{3W6AIUKf#Be-UU5>p}#yFwb(7@6w;k$dTXM*aN@RqsC8 z`uj%l6;IItky_~ZxR9XxAu$O+W^Ckr#79P%qW=Utgu-eR8`%%sK8=ileU66EcYX1g zgmWM|RUX4p+|8HbgI@b!PoY8*auc~BrNS505&?ZwD4sRx_xZM=1Q^2*IN9fn$m=uP zbzwEqk9oA`H_NL*9uK&G^|0z|2k$EP22@T>kgYe%+}0@_Gg*^|4_!Til@o*S_uT`( z=>-sSy6nn3fBAvBzj*WSr%v@7ye40J{>p^)C$yL?Yq^iu|IKnnt1xUaSik;+y1t8&_Sl1O}8e>$8g4w z1|eVtcPbfyHc$kA2dsvRgjkedi&g|&wgihzROkKf_}ty6z+Qo#GT;CjjLpZHpE7$g zYB5r@X7x8n@HAzKSy|AfHOn9&)&TfvAH8~;+rZ@X*)kSwS8aLOyn4@L(;n$^X z?Dtb6;SQvy)0eNoc@=D#tr*KyHlKGVcwFm9`xvPK74;5e{pZGuk9>r`U3Uc{ zABKq)hm5a(Jwaj9@*Whn#6y99TTskcuhBS1ua#0+|2T#VsD>Tx2M^zcgl#>bv2aThdu`%WhmmJ{F>Sn6u8atOjN3)3f_U;%CEcxN_vU}O+?1AB zessbt3e`z(;viAyOY8w)!gkvHD&?f9lO|PGt*mu&%6Zs!$l#kS<;{xWsg>a+mf^Xv z<~6_O?{p&yQSBee(Tllkd93{MRta`@33X!${FdYUv%`;W$sgtHX-K;rQe%`tV-ikN zI!Pyg&2asBD5>_Q1f#ZlfHsOfdp@=UjHbcMdP%+-VxlR*TR-NRnsL3S|a(rXYlAYP_K4BwA``I9C-QuRocS!Mb$hO5|?GXLa>rl^fk z#?ql&RxT}j#7gVD?Ropb%^M_0pAcitvV^r_@y;!z$3eeFGrtT>A&%76<%Q5{Xixdu znI?*Bv`C#gQ zFe@;Ie2|vdX(o&Bay}o%Gz`p_giG?;$^JI>c0J7Q>!Eu=!*$4QnKQkTyom^o6eq4h z@QKj-r6UnasDcVqFJ4G$NG3DZsq^g*eT~}_@U;vv)d4}^y-7=Z zqUGB>+Y_k#-`kzu!eLjm6R_}Jeua~NMQ$eOfJOZr&NYDW>Lwiz!F&8d4c|BbML@d0 zuaMGP(Q?PqzEn3qAL@9&gCVh(D2&2}m3d6A;hA*JE4bOWaZ|>;s{A!lO4PlB8#{5% zoWV6BSsn7pGwb6gPQhHXSoH1JgEF|nsqw#-XaYt@1CW|6F2xAAj$YLuPYZ@sqVsdrs&s-j7jUd2%< zJ>5=ORxg%c+=5Qy#Zxe4stV=1Cs4R)e=FM7w*3m^biCV{+_DxDr{Z1WTzRw*kxrV@i!3Bf-A)DolL7iiK`! zWxx9D`cFb`V75*d9jPk^Rn*g_gcEC7YDpQbMRhwkkup$guf?`rI8{nf@9ViPe_1}w z#_wYf<8N7H*}~V(&5=7 zDG#7gnr6}4C{X~*8gjR40>Qe1_6#g5#D3R@;At(jZI6>PddjLmX9Y+8-U*oJC9-oz zcL8IXne~RIg`ei9HPYN9zApxXf8gg8;Y1-?Pk|qGU(L71mgbr>JR=4U7@L_~ev_kh za`l%2--%? zhpwiR0!L93D7d7wfu*H3%b1e4Mw8+lO5#BYEg!b01x_g!o1Z9?C1Z@y2!agNNhll&afzM=!vnFgzFubhrRqWVhB=Jq(H)|8T2z$FowyGNUpl z(l69fYY`n@BIIxcOT+z7pfq-qE~%K#1|A^^4;w@it7P zAqTGBXYvTmWc)I{f99(cgT%a`$lf-VA$9soRO9(dZNfKOC@>lOCzARjQ0omRH|m>7 zjo8}y^`cXf86sl@huks4g21y9@#~hK^GdF#Ke>j%oPD(L^`(Bj5%lWGtBJ{j<22oU zZ0?xq=a1Sa1b5r~d6ig4WBpXAV&8j^IGfSFx;)t9?#~PUe|>Axw&sZ!tZG^o&T`%8 zH%(JZJnkz zE=E|QEdzlleLk)BUVIA~EsTXEj*gFAmHlLJJfXQXe_L?88U^c&HF;n6PCU~n0000d z0000b0000X0000^9Nr;(Qz=_;OI*K?jvF!dk^L=9LH7FTVW-qfl5mhS1fG)vUDxKB zntZJ{S>TDX?+-yQN8s}n&vk`F|L-ZFl_=KZ=<;YKl1b8Bq{Dqw@oDR zXOvf%f98?=eCTtvrEc!1)s?qvn(^-gwWvmtM$6`QNW_w1_w?=}WB>O>CJmBNz$l7Wv03AKVd) z8nB7u?7Xh`$f?@!k56rLhDEm?(ax7Ff0 z@iAc%5AL)i7UD}DUVR#ing1%G3vt9yaE`{I+Kd*jG;52|8R`|^3(w>Gy^&v$eTzY8 zf5R_u3{xi_gO1VFC+|}Md2?m?gyi3`zTlSLnfys8=wpid=W4M`8SYkGmK$hzwjs$+ z(basbOrc4%5O6P3+qT<-#be_~GARgPud2hze?Aa8UcL*@Ex*l6Q6MDXlj_#bkec5q z&hE?jCy&hirRYisj${S@JMz}vd~wZ zy+V3AN&C|DtWDle0r8h|Gj_-5GaCVfQc$+i??k*LjvbL^Y*qfiS@=wSy8N6Te?`1r zGXW1?MlJZsmdA0kWha5yKKN0TK){fa6a)*QN|R29HXXwdh`gXy$55J5DW2k^dAF$b z)m3}VXJD_qP<-=!Hfv6Ro?|2C(+^^~I2z z_!JdrFtjPYYbwyf8+-b+)igPfe_cVUNBqSUg0evB15z?#4e!_ih2+dmKqh{W$|v6i zBy4Wr9;Z;p$gz{-RVdNT^08}b2kM=LA(CGV2t97|Iu48xrat+N{yp-VH3*tK--m>n zf@#zmvCqkxMf~-(^0K~Tt>x5KnO)rt>^T@x_Q52Vs>}r7dr53~D8r+ce|sJQJ1|%Y zuzNETK?DX?>F({tojs`1O~xE!SNk5JS;R=#`u6S_o4vf{-FrJSZPeyjvugtvi@W)T z)}t zF@x8b6ww&yQn_a|3U|reNc{TYmdbG?Xhjf9xjr-Qp%t%e&0PJab8_r`i(b$-MKDhK)v?rM(@R>jR~WVS^QG zKCQh4taGah{vP7lvo~MD_M6Fk_`R9oHt( zUv>c;B>pKa=4QOo#_ZM@%#amh*MV0UI3CX!j~`y}Gs&bje|_#QGSrfWZvHLa+~H|9 zuE+{(O!qJ|zZt9)ejf8B;zc{2XG~!bKrT^lZWU;D0+^~v4l%$gZx@$4G>0SZiE&DZ zyPKlI`KKmkl`&P-k&pwm?r#(*moIMuV(UX^cir*Ajvla<3&djiDW1;(75a5R#PQv9 za?^q1mo}Ume?b7A8ArZe1*c8lyzVM!U_wA~bUdirh}i5A>4-N;)z;|!A((Z) z@gR9CYAD%^@r*=tPW0aN2eDVXky?HH*CTPb!AP>ge}h?qGT%&>%ew`n!*xAvvXabL z!+ttDm3n^i`%@CJ#rlT#w+vHEy3a!O_hmB*sVTKJ_vCt-`;ce53bh3rOiY{yB!lnG z@VJm6pN$WlNyo`V$Vv*vjrQ-56|-j>tCS~W^kZQfn<&hNq(Q;SEo8c11VHFk8+(oa z*!Ju$e_fo6u7)Vpv=7VQ0WsT-oFJ24R{mAKSHlKE%)>~G6k){Kftb#?CO%+6gBJoM z;%&A-Bt(5^C&P{0ITrQl9u0w%bEjpgIqz-KM<&X+SopSTKfb7b)eENH3a4yKCJ4g4 z5?6hx@wOM|iq@Xywx6G0{I6I>bu@+kyGodIe~OQg?!q-WToM&_T`zS@ZXIZ_X0F?Q z9r=IzVXEI`1X%n{a||(u-q1s z2qq$-@PyH0(TXm7N!lmO0Y^T#Sz<_j+=ghBJB^I8Ev)7AN1r1xAZOIvrrT+$v9#X(I{UYyYg#K%gXNXo%z9e*noFN6fNZZvMrOXW~bpxmx~YIkRUC4 z;icR2r!pZwLhZPyWrJb>cXhO4e-k9+4tk;^BBC#o#L1h_1NY5;e@~1Tc=TTFEHADN zVOY0Zc4@ubpjzW{Er%|xcur6;hFrPw;ZkzQmLaI~;R=yWJVSHrY=$;ppZWxPMMcr5*HYf9ax~8O5dt zx;>=9J8pl%O3<-xZ*X^n3ZJtT@_-{`N1=8gQWb;h&cOcRtusR_Ay zuzkK$67~V&aDxJ?qMm||=NJY}RVjPu2O-dE55(?or+NlmSRn@qvDMORQb$MLQu9q5 ztmsePrdCQD+GuvxjNGffnJeY%S#58V2Fg49hahH;U@x~5B^zmNe~rvkoBi9m5^Ci3 zy}$-uGtd5YP-o{w?;iUH!HLTpxi7^W2t=j(PpX+W|Ex&m5gz}x25MD;PWdL`Q@%kZ zJfU>%)@qUB=q7X-8eY~}asntsQPe)-?3}rbUo_ZDk;H z`Vw7a$~j>QysVPxwetSCRw=qtpXjmH^{4n8h($Bue}L)}>W*btqNgN`f2aNxr?S{p zxMY$1N6)wQ=z8lPH^3r&YQLZF-1x6wje>lFP+_(Ez;`2bV+^sG+c@bbT%FI6 zHsX#poS$sdio!=r<&ab`P=NA=+44~|Rz9vavO8jz-=m@Oh($k63X#ec0|cTKnLlZv z-&TVO5m-a9n})x0tKV`M6roR5dy*bS6D3&{Ju^~Vz@Z1-ahS_d-z!bn6aLXefBbfs z+)x}1im)CLv;&9o#u^>6nB8p*5BmM2d1FziI@TwnSxl7m&mzk&)?01M+sXbpKC6}k z_`an3UUsavU?Vnt3w#>Hd||xZ(j_5=QB~` z=P)dfl&AR{B))w5u;Ov!n03jZf9|At``leQ3-OMx+etd#a2~l#$*KiXOo_?m!8=>E=!0yn*SM>GSx^^3(fBJjFi*ijQ z-2hFWnoI45;-sDv@y4zbeLw6nK87CB<^Q(2x?anHkBlCUm~3%;Atq?5I*!2yU}Gk_ zxRk7$K1Ye;UG}DB5SZIpNi2~7CBx^9K>CoIO!q_wI3tH}fICKF0Ux>uT<(?J=h8-kY zO5(dM)=)`bP#@Ex1vsn@HI#%?ku>fWAQLVmls;BrpmWBV4s~ei{2MkW?AJN^SvCwH zmYf5MC}xH2P{2;uk$8%aqWpC+l&GtRCLXCjS3`${v2TEP?ci5Ae^v~*Fe`GQt)V7X z+JOazqsrm0MJvbQ9ZfH?&up6cPiQZA)2=@lhLrgEEaH#8k)I=&^ba=f)P{!4i3B#s zL}<_WoyzqcJ%%Xiab#R{AVj;mXSFHHQ(0(9bBf3o0j4AXX%UX;9~#>qk|BEJkDdBJ2EY_`~JB0^C8GfLDk$#%MsKQD2$kZ~M_!bNFaKogsP5 z_u*UaUc5~825Ro`GlMKgDi)eqgHoGgN$&-(VWurX!1GLac@>I{DcZn?2wo_zJ8(WD zoS)Il1x_4w*fF8sLv-1I&Z;RK@ur4?JR~qQ&SF?)rmq(Te}WHTxX=nMi2IgBi1q*bno>m{T?_T|W(yqqt-2EVd{tHPA*VZyrkUKjZo zKHpj0W!UDsem$nA(s1=mt$JRC$$E=v(~lYAhZ4#eZ~!y~F@`QDR#pD^vek)Yy~o5J2OO}88Hlx; z1alXJZfT{6nKJg34^np;Qsmw@CLse*-{tE1d$7~9e_oysP)3Oe0ew2075M$ZuzLt= zry`-BzVb(EyF$HMd64_e47IqqjgDXxlGIiZ3NdHY2E;-szoaLlvxIR|p@w2LT3q`f zw#xQYV85y+#$;WfZ1kbLvcETGz0$0O2bx5MHN5x(EC73yqp*TM%vwR6M-BA_D}6rt zfExApe|0PEE2nCe(@X0s;MzUOcs$L@0_+B&zL7{XQ zgEGRmsb_ws?`B6o_qSZ$ z$ZDu;6D0(Hbw$OJocc__t!1|of!Maknz5tgf6<^UeO<4Vna{DLz8_&B2xTuQ(BOk| ztQp_B_uI%E`*N7nb-8IfBkm?vnliWztn8T~b2~_y$-~IOa^@1g64wivag+(ZCr?3s zN>5YZ{zeh=7oNfe+76e%Aj$!+hePOx?d>5-puzCtcWfSv#i76>S^6#S-d@W+88>HA zf5PZ2cN_7Rkvcc$sS6*gWu8q>Z^$!Cwg3%LW$yzYZ3x9Y?I#K$as?;qr5*iQetCwd zA4Dn&W*praj!${N4Gq#MnLE43*WhJ*5#hl^5~!XR8}Lm=?%cJ>3+x}yn#wBGcMA-U z`;oqpwN6OksA_$i;_4elOckh=@?~j=&@56w0aFAyAc!vMl%?>o_!w#)4^7G zzR&M(pGWxD9M5-5T_}TGO-+_J87}Q8$1|XEXHgwR`Fp9{%=zTfD5|k=x{pGUD+{}+B-=ppEmh$z`*#U z-Q&5_KP$K%R56y0h`6d$qf{f+%O!zI?j557eE}!Gtwth)L`$}AHJ#y2dmc6OWcf00CWqKfsz z`E&ZUbzP)yv&F)?jm=PSb+faNCLWR!mw5xBUWQ+&eWyZa4B3}zhbgoK+z2mO$}`&l zcx+~T<-kKufSB{&Zl81q-QJN>fqflI3+Jm77};l3!oXSb{bd8oc+x_XCXXPpy!ydlOSBu1uNkGnJXv^PIE{Ykq$GqM?D=&U5`+zFQ+ zQoPjCA@6dW1bR+XV&Zz0q>W?_lq<*l#Uxv-A%d7#Ffbt41lTFpgFoUqgL~<( z7zq79ZZkas>p_!>f1<}nKNMO$0RX|yk*x1)s0fY%eD(Lh z^h@Cc)`77P0oEx8(lGo$f$&IBuqvmi{4G+;7gelD5tj@GKx9$M?^%L_yc89pCt{G6 zWPXC<80!R0*+{uXql-LYRJ*YH&;;!EUo-`>=gUDk{{7CjeIQ6NiWim`t*gN zydJ}>`&D!GBWvr3#H8r%tv;#wob@#oK5(jg&$x;nrGAb68NuulE_o%sFdt>6S<06Uk` zY8vc|mWfwJe}7xy3&y$D-3SeM7anr#EuSipxdM{FLcFXF0LfT6xQQ4cSBz29h*ElW zSLY55n5(Mz@9Rq^P0u}C(~GSBPRi`e4!Q?oiw^`Nk0QU&G{-g&wlo0cwfGD68iZXR zU^vbc`fQePy*`!szjD5gW4trY!Y`r_(9v|evtkdC!jWFewnl`Y zgAI}=f0(Fv7M^=I95X(+IP(taBNGri;*M);E4E1(aK6)XvOVgH<}|7(m#DXnEm_AQ zBnu-2!^MAgM@pJQYfZh5nYbP6Z&dXBthipX*|1}DjNafvlAAMK5_?Tv!Y9R_rN$~t z-Q6BB6Kf=D4-1SBnEp;}IG_FF=?G57)-dZje_9{>(e32U#%lcm&M7uKfv1?TeksNS zHbk~RIA#lxs8?~5w^=Uv(@Fq(y2#TqEEE1NwPA4+EKkhe>xIiRhVeeN4m(AQG&2~P z&(z-+pv?;Hagl8@NO3pFjw(@pB5a9L@E3+xkHm~Swz}3h_@Tb*VLIl`%i4;Awf6nK ze|}3eNAjC^-Mi(4MNg8dhjxQ1`sU+xX=&_`tvjEA+PuZn!@nfY&y(nQjDT|Ie%9jT zVsosO&DViP#_im&gbC)L@63fL`20LX%2aDHh7j)xUl+ht^$$%>GjT(v`R3N3>W{|M(s$0YB9i6N;Eo@Dr$z`BB)q`DWF%D5lL#7ovh}L%5=;cvrn(NfCE1T7g(9%^E@Acn zvb)@W4#76Vte&?uhGwF1dK(aj92+_TXd^qw&(n+heWK&r=UMNa`)--y-dBx&G!EQS z7=C-i&A-}j=4{%PVDc@?5A>Gkv3>_ei6>xF#;+WyIg2&su%(Jg=fZR8f4JAUMQC`; z_q5C(s^|c11J6ejLqn$}Rz7#{o_6*oGTQ(sp%YA#oNqRVYyAbvm{xd2(jpcd_Z}jx zfmzVGjrOj>8Tw&mJHd1MdHI{uzQbig#e!{`mqQ2rJxT1=8dCopBs|;2#m8SUvmSo9 zKcmg4m{o7|d3UwZzMXAOfBEw1LcRb?%C0NK4a|6PU<}r}<|k=adp{7bxy*LVvzT&P zCFR1hElRzYZ3_+YRMR>5A(xL(=i-9KuY?nU(fdzgvC%u5Qh~)&{5mkk1~LGVyA zrV8&RhS4&=J$i?+O~2KiQ=s}AwEf1eLz5_aUt_Uzc`F|EF^*e*?=I&MqRl@kC)+UG{fs zal`!_uy!nG%{bET&&YYc`4&p7uO{?`&rDJ^S_=b(DnmR#BPK`^>~?&>Jm0<_TK}+b zpb(v`r1rI*X8D@1tm&!VVt1)zhL9nx$q5LmOufCawK&xa9PCBn#Yg z*T={if3y|)B1WD|H(O`1{I>d{NL-x4A+}As5FU1e`7hc_1gBdO{c+i~O*B{K7&U(A z&?vP}f2J=ojI+?}u=u05@3v;48YsdS(E7@x-FF-j2dV;Npaq62)++(G=fwH@413=N z|CYP8M|i|aV_x@OY5T_`ySjQ_=&>~ExJU0&e;XHMmd`QQaGQb28FVIwz`y}qcmM6- z$WM31boz}{ES?1!50W($6e__aYBN7X#Y01?d0^B`-nbe^hnS^5cl?dPo~tCe4I=DXn_fIvu_%G|p ze+-R4itl0(IS<3nAD_`&kv|yT9e$2K5S`sL^xIR8daLLc3SjZ(E`T6J zP*W7b9MUIRd42P$f_4fGVZD!F$Q2llf9#6Ob1(=*ZCP86Uf*s?-N=GD$pdb$uX2c@f1ba*O=Vqy-x~yhyrk(pG6&m z=rGE!p#dU(Qh|n$qmvO~yKM?pe_EYk%)OztyYV9}O~S+uGw!wC!S(V5L<2wRX{@2ap^u00-Hm-`?)=@L_3L^z zkEa0AyPGlFouUP?0Wf?MIx*mJ87PJOE-{(TyYdzav*9RGZ_|ZUH@p;)5zZI)CyNm- zhVW^7sw_P$cAhuP{oIH8D$fRQ=l1pf7M_aPI zN(!j^ z>xuDO3B)~V#6ofC4rR-We=(8zLfEkbGImYUS~b%+K}WTq+jNtNKskJ_({ zQCZVtJVp`3XOfp|JdJ>G*|UJz`#Tq|+A{Xn*F zdft=cnGVxOv(mj>|A-Kja!v7G)o~|X(WQwDb0uv($w&N8pX?G z)8yVS7`}WHK@YH0w0BKaSR4J17IaZO`$}#KCSnWL^Q1|U1j+&O-`@cZW0=K9`w06d zr!0mBOEgclgrutN)s5H4K^iH~#T-{|WI!|sx0U^J3I1f~e;$5s>}s}dVgom@n3DeJ z$z=ilNe6%#Y3;3WmSt%tgdI- zI}#&rocils_@+d8gTTWMX(ECBqG0=T^O_06aN5o*Nxo(-UHt5XPYpGX&7UG!X0(az zr|SGYpc2%ge_V6UW=G9`OHNM_T+T(n+I0bQSZXrFI}CevC%-2=X}yj0iEZ_xYYi^_ zR%i!xV#h}U{{@IquuewPR)Lk;?-%+|lRQD7luW(=Y5BnF}8eko+)f189K3 zGKn=|d1}A{n6fQgM)QTu(1ILXx&_FgTrs5)kU##*f5@RW`3_+#0!OoZNVwWEDT!MJ7+=l>Z(LRx@Z8lQJ!ZT$HU@2^z-I0yVK>%x`#6InLEFxG zXX2i>e;zn(rSa&uMQxckXcl9W#HK~oPP4NZ6dBJ35!LiP$bG!b?}`yUyx)RKAP!~P zVgqkLE-tK|ZnKXE&M9q%?6-d;fiq2Q%x~!f8}?Z5oDjz{cHqAotHlp-1Tkk!IgPs2 zCLO03)K#q(k?+ zFi+#YKCde!IqnDd{Y})Nw8gc(ZAZBi#V$f{Ots zK62li6A0zfx+VIpe%3oB$07L^e>tT_f3cl8#9~keksait?P4jxdslA;SvK;Wu?6OM zI<8ct1`d^B!pAoUFY-4S`It;XZb%xBozxY?Mcc;=K@Tz;Q!9GAV9MrT z!gMx^9;1Ku%=6G!zO`ICaw&X!SIw%0MHiYZrBfFKMd`aKmIR49l;&+YrP=k>f5|%} z!f&FL4ubB?I=H2$w!RbNcYQWB&4Q`w$2KLlFi5h?^c256mlxF!Z278WZ+zEV!13j@ z)AE(8XcwrnH9fx6EalIkiK8iyyv=#Kvkq(?QJwK((52;~^nw`FEVf4j(3rl0Z&e5K z_VXy~R~P4ZYL)LQd=AJzns@Xhjf>M(=M?ZEXVdX%F2zD)LeWr>Z}qt|lBjZVW~NEm znK{yFUJt-)8%^sGfcghCt}uPqL~?uhXH-Bh>#UD;Iz8~MtVh9CcXJu^=e?of4ygX(vSl-mgi{`W0*oT9^FaFm*U#us19`yJG=jLvt z-kEs5#ISDP(P`gZg-_J*s(r;4qzKDCyBRa?{muMF4(?%0N&-mr;)8h>(Yoku3Eaw? zJR_*y;T0+NWDZnc9Sivp`EB1?0KRl}B@}%}@DKOx7-x8!3F|xPf5vhzSyt69>JBBO zZ%H*Lrz+|lcn;&W8}w|3gcR@yiA_aZ3nhonnKBf=1NarM@lF%Srhm#Rn$hU$ftN~s zDijWJH>z3Wq~ZGjmL$52P{8)9z8$xPG3H1#AJY6z?Br^INzT;qc)^CJlZ|LNH_>H> zt4Ha(lxR!U1Y4RCf7(yNtKzKtI;9*^igG$zZzz%lPw4iAIQr?50j3 z^cG6I%BZJhyx$UHYSaGc-NOV~Skh~1^W>-p3c4;V(on(^39i{Ur+>|Tg^Z#E%OP(e5fypkA7Fcu`NB^+uP=qgy{O264q~+>0%4 zk*`=OAn9SY4HTDxFa!($ehykSCatgMk z`I~!DN*%kvnwPfK-~-3xqEEyi zxC+SMwu5TB(t%$)0>$StWhO4D8gQS|V9L&*e?LMCv`qW;;s(uaKX#49?Gdu%f5d(X zT~g9>ITpt~Y*+Wgd~*wUQL5Yz$bxUOp7z%^x9DOMueC-W)|<783|r$*24ka7+xHTF z_%YKf3~m=^N*8pBe5WRz{TV997B>QDNs!)A$LUh3KA7v+)QjTdG1ho}ql=~q$cfQ! zfA6C>l%8+5bYbeFh<~p7!r9`n+>XHQDFchY2-=BtN72UdYQ1Wo=rREIIn@BkoZ&G5l}G8_<~|RF;_3P8<_2qM-%@Q< z>S20YOjfscV--UlBLaR3aw=m`62JP}e{GzEkC|=B>DksbE&gT#89pCN8;w8>Z)s3k zh?w=%DE0YSp%nnMA#&sE0s=M3R|2sQ?})!&Tj94D_g6^ucwnRjTaNntC1SuE*Pn_x z^@-5%D9=9xGlomL#6%hm0g!#$Vx}u&D$Rnv4g7JHjLu#;a*<7%f3)B5 zZPSWsmGsku3ptxqv2Jevb^pdUXm$=ZDtE1{%5Nex4mu(ZMSP~Q0B zRwVUVEy-6J0>}N6I4-~tY(Sy~e+?j~Qwv{T zsb3FK9}C)WRh7-@#LnHLiUz-(57QN8%^%OYexM0b6Npzo~JxXq&;IvFgwY^Xy`O zHv-6#k0%{#@6S4L)A(0(e;Uutxh58W9)2s8L6!ABO#|&)&>crha3C1XT60ssaZBCC z4kcU!PMs32xzHm;%$KU=l9xFyKkOD4v^RN!V5pptl zBT4RKEJO%QLW&Ka)HDz;*rPC5dX|wE_?EvCBxeRAMP%P;pNl3je_>aa_~W8773l3K z3Wg2%@=b`l9KNGB!ZFEsxd&>TliZ!6b#Mf@PsqmX6qk#pjPAP!?Ew;5*muQz6=>cxa4^=#)DRkYJ|92XDs zp>{$)X-Oow2<&cye@@j_S=h@$+}#!p3?0NIuHsBI@WXI40Nj-{am}HYm&Skdv{oBd z(65?xc!(4l63;A*nV9JlO6^1V7Bj5#X2rrinr@=Fk8Q*Nw$vFTNTrb-sphv@J zzObF*p1ZJGfP#U9Kx4C{3Vb~uHcy>j0{<8os!6!qc{B;%e=PiC$<-7Uz++Ho8=m2! zzMKo`8v+7!2tZT_`Io^g?6zo^DNq=1zQZ=vIZ&shwjv5v#~71$E5Aseam3I#$%YeP`+wC$r*aff^-8?6~PH z02Js_ZQ}8tPFM49k_h}ht$7`Vj5{z0!j};yux-pT#5B`lmKs>6?<-tZBjw!mb6t)G zwBIWK+n%37S3Zb{tf7B%ee-_4ON_gUKjjBVCr$F6e=*E2LsCar7Y??b-!CPyUr<@N z+|eQeEQ86)zRL4qEcx=)H6`LHjmY%=DrC)t4(Hu6B6|176V?kfmb{D=zd{pnkEi2# z7urUBR)N?9iPwkS1ciFkXiZ~;B4q&0zWAPuhEv%$m5Jv7@P$>e>1tPb+%E=x?8XQzszDVccD;u437>~XR=&rHF+7lqx3p#ItufB1D^jVCGD`m zAmO6_BTSEm#yz^pn|jRUm!jl!IFXZoS9nK^lm2l@nQ+3?l0(b`D@&`n;^q06=Z{|r z=~Uwai5$UD*z0v?RC^mE%(|ETc13csa@YY!e^57_;Hq`m@j5LD`?u!X%4MICP!=4>Es2;h$C&NU1YAHR9gm0IH(6NVXe@XI;mW9-6>mlrHkE-U-rp$m~PoQsA3;EQgspiPvC=VDpoJ**UqNEAESp|OTV2~ zNccyFNN{~6q?-s|;sQAA9_-wRW`*>(hn}CGNRj%8iB(GKd-ZlO5C*$GsIMHce72cahm`LqO7+4Q5zL-o;L$qBG7IqEb-fp;uhC^*8L^X>832Nuz{T#jP=gSYX)M>igj1r8tm$iZJXUtU!bw zo6yDB8@%2A-Vme=q~>Fu);S(wCegeQYP+pzNzd34DJ8XL(G3%HigP zOXTe+#zO=Y01dz8>5iylot>=M7sDmhbCiNQctm0SV_iNi0LoV+VV4xi*iJ$puwgu? zl+n$vBy53)>oA2*vDqspD(nLu&ziE6O12{Ovu>O6C0<> zf8UY-8yWG`YgBrv8XE>WbDo1hC3+{EOFfxYLM9z@pg*9GNC5b@e%Ao)Dv2Gn9~`wBr1|Z*Hsw-=(v81@j(1`>wF?J4)mK1!&G*<4NX&jjXqsJseKb$C zEr!gptTehJILY@fkQfP2e|038@7=8%ph(s@A+Z{{k%uO^Sl!=jfM4Ek7^-pwGh>IR zE~^8V@+p3Y;aQ^H01!ZdwVEn_KqI$oZUF3PdC-0f$bIZF_w5qGHN3JEysR%mXxKm8 zZ0j5sybuqt@@-oPa{pQ%Eb_%LBB^7NWwTo5=by#RfElf zg-T0S1$2;)L>`Rk4VaZ7-IE+?J1|t*7=w^wML(rDS}lwcH&ZYA;K`G2l1>}(-$@9^ z#_}1Y+`{)P_J(qqVmtr#)_1|IxR#C}q}uu_rjzN9S&xWaF@Ms!xqS33kEw#YlL<05& z1-*9bui-2ERoIk5EN3L${#Fw*Wxu(N`gK+U6&|FiWSD7?*S1aD35CSFaEzhFvfFwQ z!%wuPYB+VFkvpK!UnVC-Ml9PvFx{`S5yDIrQG~J*xRN?Ce~I8DSGfYR?9VcfOTdrD z#YBg#8;nqYf8*5{PD0kH)zoM3>w2Y)qYyLcs$-!w`RofH*hculm(bn6V1)?CiThIO z(!|v%I_XumgR4;06_w7%ta;$ZY8sq|wp2tiR)=4lw4Ypb;spFtG)bpOH<2Yypc_bn z+Z?)pkm_z?e|M+O)L&dox@!Gie7<8a1(Mb_(8A2Sw40y)r(6_F9$I(Q43bxn2iMNK zRcM%#^C2jA^Y^Vu^6AhwBAcepHBOq_XWv+${ywgdM`6r8(f3#xqG>Y)n(x7>Cas}R zXOG!e@`Js&P}(!Zwg81&BWl@tY>ikk(3L-qo6Ez>f2KBl7i~7Jaf+;02-n8Q++KLZ zjx`Y36q0B0w6!m23LG|T^G!p?hNp!5{CJe>WW9{@~1v%m1@-Csjw29L4Y-~KouPziBa`MMa_hadI? zZrWAT@ZQv;*MBc5UzT%t-KIHT=+E)UtysJxqYvDjcfWwEB5t!ZA36Wsrup*-fiyqI zhd30Cz67&$TE-9(HaoM=LSx{)hAwIWr-R)q75<~>JhmHzfhhVxEC2%rmh|3D-O+pR ze0|6^P7b!DnRl-PQZ8pF7o!_C^>Z%D0L?2)t(&^<7=NRF5%|PHUAbQRlfeM4Rr$M4 zSp`ju^FWqXqAy{3^k@1QTrBfyXagms8SN8lRP|+0bue6Fvx1Ad(X*A6wFEb*4~z%6Q_plyN+fKL^E zg+pMU27f;qi%YrvX+y0E@mJ3`!d+chc)=ixKVAthEXl?mJAN$w8^*j|G9v53R4_7; z%$6G>cqua*F(yB&r5Xj&VaGM{GE&`@jB!;?Ph5~I3|>o_z^G_KjYOev=CZAI1;x7m zvr}T<<1b=KiX~*cVxEwo>s|9!qRR?nJA%#x6n~3@X{y#zo(|k{;`t?@Il$| z{eQSLAv^snm-f3m&#{(j$cj9c`|TKQVp{~GTOu9pfi_cg^+T4$N|59f9s6?LQK4nRB02tAfvF`9=&pdVIb{EA>|f`1@A+81jPOK?1l)o9vw*1ybs z9NjNM1ZeXxZx&g}HES6t`Wub12@Q_Yf_4_HJ~(l^c?So2)EQbI)LUkXxj6$u8H9Uk zr2(PtB2<3BV#mFd)}jPH&(!>A;eRJ(_G@>gZ17Pw7dYgqc<8fnA;G2;{U8ril0L3J ztKEY_)5G>h&tCQi$?lVtKw1LtdPei(yTp2v^6&7hAra{HlQK1_-cICYF@_Z&nzCYi z1KCe^c%Iz{>-lnu%1_2KicUUBITr>c9wf<|>J)fQHc`A*O}QV^*?z&p4u1&-a_ezF zc=PKI(A_jF@LfpB_!U*1!B?aNGSAYIq7?1pSr?AtQbD^^=3C7lzoLyjNm0%ws4Z6b zqTta1Y#P>GbIwF*g8=~ZcIx^yvzYNVXqG>VYD$6XqB{h`HuL=QgZ|*2Le!}QC|IA_ z-ZcxCd+Wdcn}6{GUUVKTlYbBzh}R+5FH%YTPZwB^`k{(NEY zsvLm!gQeq82D;<)_8`gC?PM`u6#`X9D(5pxkI{mZGug6}__>tMvI4`*bIE$%54}~_ z4HbRUBCEblN!K{GcQeOtTOW(=Fb9LgDgDjaPvG~YP^hoMuZ_bX(;&w5e{f#Gr$1JsZAxDoU61VRY_9>!)?KjJT1n$T?nWc3GBEW z_H)6Qeatk`Pa*J_r!#%U?jqy|{GH!*+jmOqN8{@aEADj1T0*pqqF$dGh1fIT?v)cgl#n#F@KjjE0f5d}&8meqdL$cG~TgzZI&R_E0I?tPlQ91Xb= zsQU?!w!g&8&wr$klY+m{vKlOO)6&_s`z7zzOaP6-1*g9QA2hJ&3?r$5%bHR%ks<1O zo>KQid&1;|WcS=YMnDaOufO0x-exX=ain0i+P2T2hB|rUOfU2Co>GOmR3~5A8%?RA zYP4i(ji^BF5|!Q{m~`m>DLc%R(0`~j%?ttA9KT9dz)wxNRDb^A2@4o!d z@UjjN<$qC+@&<208WevP@C&F*oI7Pl03YB@p&XawtPi)mqyHPl-&p$aLhAFMzC5+? zgiG^)CgOa>m*Ov)>%Nm+>AaI=^yh0oZAwna2zO@O-5P2D!C)@Vp3mR2xplxn-Pn43 zkcPjf`)ODi-&bg#agsci;BkKBO6TO5K-g}EHGlPc8`_Y4b^QxLTOUL@38VG~5wN%K z&-#U~ACiObcqq1YCw3^{ITv-kOPorl_v4iah3MAHI)ZA(uAl+$`s4e8hn_#v2il1^ zen*pFHW_;2X|O0J&5)!xz}g+OqgHrPM#;fp&2U4w^@%PGAB?4CREv;IQJZ7X-#fkW z3V#|lKeCIHH{jqdkB4q3axbA6yjX-0mCJ_k;SM2mzUhzTv^k(gv&QFvodOAB=ZM-9 zO>-6VyReTEISDp`p4gL*p*#0y+5Kpkrcnk&tf%X7Cd6`n#zuF&a_Gp<>4ed8Gd8ra z$=Wo`*bl~I-?Epqu`M=rT|1}fz@)BEO@F{X=>7e2WS$fV$f)*=yj4^`T&7?=81fx< zV;1Ezkl)_J=mZ>+3VRaHDmW*a8n)fTEQ2>*a)S{hy*Ff;QhanUQ%qRR(Tw6+G;VBY zzIZ5YIGit^Ax(RKqFo@H?C$EA)h}T%xpB{LBOzYiuK_IG9~Hod1NuZpKe$^*#D8Z$ ztH`^OTqB1R6J-%SQ=5!of7n?j&)P2!G@9R2mA*cZqpj!*7kuU7H$I@%Ax6&~lN%?o zH+HgKIt6+>q2KKVtxDH(B6W@H%~1iW4$i(S_g=$qDVD;he~(Y+(I+&rfkbiF9{%sF zz^+YBJCKsDc-O%LCPS3`;zna&H-Gguk)IC9K)cf=P|zw5=I=8@4ZKDAidZV~N=20l`@$1`0t+TV8|?N@+sz3%PXPt2}< zLt8YQ94+cY)WrvMbI?NeEY?p|!A-+03(qcF;`6(|OtDhLi-})mytZS06@PKU_v?p; zVXWbt1`hl+5mB-9^PJIP_a^EC4J~DwW7mBvZ~EPV*=Q={h09Tq7K5qW`cqD7m`cFh z#=d$ag%9S^b1<5uYMQ~(%m7%eaI#sVqV?0s&*5nL662#*)>+$s32%f8Db4543NXsR zG6We{7T7x2FVr&wC+UYVKYvJ(Sao;q&=*6I<>3SwWGq%7%a!Q`xA0M;>+zqY_7rKZ0(ky1%CpM3(wSnUU4N>6V2r2`;*;52<#B36A;y(59R3}>pXPYyn zomdI3^V`7d_mPu$nGC*ZN zppS4Am_1z6db>ba;~mP+2ZnlHUl;<7gRHDw)gn181`e1eEIXqm~Jsp`O4 z#h%v`0@jew%J&P+zY8DYhUcOQZ}7g>GA!i~gkuBbA3tKw3XA5DETSbMfaRgn83QH> z%`JKOxRpV0Bm3hqT#PTey9E0SF$R}26v2vt998|2N2t;(wmA(q3_p-c)%GOOIh$wCSVV zl@-nY2V1^gQfw!8`@S)BS>&=OSofbS+0#;Yb9Zym|hIjgS>lz+rk^svz*WR%<~+NxL`tgfl=)YLyt zzz{)^Js5NGwK5fN5jx3|bNQrk*TXG5LXYmw8+m7i ze1GT{NDx1*z@>9qhy&ivL}+M;jtaC~M~71F6_M`k#Vb*5&Iq&EecpuM5Mk0cF1VKB`$U!h571lGEct%X##WqO3X6FC#y?yg-_9m6 zKfvZbC5&=Oa=Sdn&*x7o!|zV}Kem&_#eZsL@%%}6i^ar>MGm3zqisSqLj z!+{BcMkp`7j|cyHbg0=1`nVm8X;dl_{SR`LdCUrTw|BF}WM%B&3umY-X6q67m4Erd zZx9U|+o0blGHJ*&ChzB?TSMy>c&7L7PmaG2d0D|=pq6*}Q-c_}Lk;=If;#Sf8M7g5 zi8uKRDiYj$%2n@Loz?NPqMm);erD?kkjjErw0!+Y`&N+-SJ(Yu4o>Lt0J!LY-0?XF z9@@J*hy(ouOX^NFGIq0_!wRiScYm48&V-=eZ{s)A?6Xp45W`(Zp&fuCDHe+5*Vh20 zwGcIBeq+ys55re&I06_fSDw=Z6cO0bk6^Zxq1;xMU4nA2IqYUAUPQOcRgf~q1{&l^ z=P3w|?lt!zpZkn^;)T1*aniho55v>HT;=Y$jdnd~E%pE7n$Ie;KP{_RLn zJ{VAY_-?7`9&U7WTt8;DIN?Dv-+J#xir*M5ar7roFI6las782keJh^Lb8v;fm!mDL zE8iFW9iD;yB_)>pc12yhlpkH+XUADvA**r1hth@7o(ghWWNU4cxPQ)!VQe$h~$cgQP)|r?0}7Qjh%jHG5t=vD^`zfq>wk4qmweteE;NhYwHhJ ziUM67;X*$mw<*2Yd4HjH8@xr5KpD6tpo&#|EF=M|tDStb06NP#Eb{+?%-qX%%ZzFWUH% zM%9E%9@c2YxaaFNAAoRFR&$)M*;s6EdtdgSH%4&QOGda=m46t)z&`x3v&ns+5H{wH z>BwT_B@REaY0%F(H8}z07$42puSnC(2VT<0n^Dn6?&%s1y0rT*RdQs?QYfj3zrc71 z4MkN10iINFWa#iO0OqP<7<*|dj^P49(pjSg7+n<{TgB$ zgqt5&9c#CkT7N;okz4cAZs~DSL=4BX_1V;_%a?Tt%3JvL4_M7@!tc<9th&|2 z;&phs?6p6|u}J5;&ep0_rdRRT-AV#PeXmD`RPVEMcFeEr^Q7F&E$lkc!d}0B&4f^3 zrz&7G%kwgEPy^$oX4NLCXB-#!bGd>1*X1p|&(b@Sh)nLz_nF;e5YY2gq zkpR0gQfD&f9i4oO>`es%*Nni-86?NrlBHo^8-L$p-7bj+fmDL!Z~4NN#NPfl`b3jk zdUSJyec!oL=bjFnfAb7{j{a6Q$_5f;j(-tTsO`4?^6Cw6Nf^`P+^z%cG9GKyU-8!{ zZjz$2Yd(s_hK#E@2OaNeL?qNaX_2gJ3zz225B{x<(+ftkP{a6St6Jv$@qe;u0M6y( z@TArlV*ELB4}6)svWgVdxQunSKhpZ=g`zoFUfX7-|vb`>6)rVtbmldEeLzxSNuz*yP z1EXdRE_1xRH*4m{mrl~@*{0rh?m{xKl{sGlT`y)V;{d`Bt$hk8ALJ173PFXcH2q{7 z;@~h=1UJtd_u@-a(3(gEcMgUg&woQ@ZVp`3tG=dxrpd&4?sH(V74lz;Nbt-u@dBB< zrOS+y)lhtK$?z=qh11N|cbh~nX@t{?t|iXSG|X8yBb5Enj6{ILw&?mCmg&e;Rl3e{ zoivKzo#ju%=1l^~?|FhG3_|qBCFersa|rjzO~ysd+;PDYNGZ_e-{9vE!hf>)t|JQ` zTZ;`>gxB9;2^zwCO;K-@D5ATnF)|-a%q47Qq>b@X5EaMybrCd8bO)A0$VNalMnaI= zXzC1$$MLUEdDm`p2QbRw%bbxrQ2tMdCt*t-Bg6wcVU7FiM48hLHXX6TRkAX|)m6f= z=!v=0W)>R$vBoF@0z#*QI)9`hJPXB|Y`29{Q_nm{K)03Imhe+`iGwiGhK2VkC*9Z! z-3uzuxM&%c>F@|LR9_=@m#PMLo@l_0H>NZ3`t<7UbWz$gTxR4P_vUi2t=5{`zau(V zf&Ni097gUVsv}!?OgbrEK3?_@QIWa%I-RwYVHC5eKOYLkB*lQ$$$yBXBFw=PHs~Zk zk^pA9bL=;|#=dMCZjfgj2WnvEiX+W(3UyOQGbato?X8ALdZQ>K1b|O63GBs(9zEJ^sT}S&>^SE$-+Q&c1aUf30N}1AccR#arn&s~n1k_eIs6LC zYm5BgDL*nZDs9Uz7Pe8oh~i=?{i(K7V=FJc{4(YSILJblQzj z8yF6w>1M^k#(1^1En@;CXr+Rwd{&w?WbvETChCwvh>}8BF;1v(TgR4dgQti~bpr`B(zLR6S1! z6HBkC@2`4c#(yj^lB1OVHjTxDuz;vqM@(5}CJ|~UQAS$XkMknKfRqiJ^wuV+cXM=w zo-h?C+SkhJhO%Ta*!WowkJ`F4&2=H=EtxJ3cM$u{FKjLMPvFx}!t>zOG+uUy2(<)4 zsQK)zFi&9CJJ9=_DnemB!3(R%)?8l2Z{O&fEstFcdVk!F!JF_Se5c9nG&Uv1LQaWQ zbaF_|KcwshDV&oEyjaTZ(KaK?_0gy*NYej9)qRNc_W9!c5Oz(1d&9k*P7P8w){ zkOCP@i}c(tq(&b`q*;TL7mn$FGti^NAFs8L<3HM{9de?JjB0v{9H}cyF^*jDT3id*M zy?>@0kht7USPlHf;Lpg-#!&fmmBfe!en*Rhtr)TG{t>T3htGaTNy+&F7bY* z#=7x{vv%3Cp?l8Y^cWCV;gXrb_mI)C*dFvh#blG2NOLz-x9U+Fd#J}2u&s$~8W zc8FkTio_z3c+~K|I|&;5NSXa`WPu$BUX(@jN?t#nq!X7jR>k15cKU30v000^lpQqT zwA{n@M~C@lb&J5Alk%NL{o(E@xh4ix=jj%Q9?Ehqfqsp}9v-<~pF{jg4Zrq#WPgP4 z^<4>xUO9~?gzhM&YvY_fD%V=>j)ucnQ;mi3xA_#;_apw|oNRkVywqiE4FBX&px%$g zFYBHb}6tL6k2(ifju95DDc}FX7uDfs9`nw_WV`lbtv}Iqp2lD^} zk)}&+7I9v9$@EQt`u@UrPCwRpk$+J;cml$EDdp(C{e~o@`oXcEzDPC`e4faQ-2w`( z8_j5X(wk_3Dx#Ty0>dRIaep9YA_Do>hxEzwk%H8Yo?)gv8YM^%Q&mdVRpqiBQG}va zwa}Iy#|SB6$0cY#bu%cu3qIS8c%uf?jQhilIGOb$@_Bx~BBhGqIJ66{sDGDHQb{zC zu+Au9SZBU62ZId~{PY<6X>Yf7U-|+`>-~jzuJ0y@MEQo2!HOy*DX3&Z8QPX7D0Yh*=Th)mnJeM}@Y=1?P5#f)EZQ?t- z!9B7P2y7>J1govbXyZSGr^I9+?jQDdH0l=a_bt~K6Ia2l2k;mVjk;D~=GH^W!_wZ1 z$R}<5+L-2fETV9KA?5hoE(nTr+X|3%nHB4-@$_j;12%@MDQrCqyH35)=**JP0l(J~ z0kXeHNidk~??M`1#(xa>;ljOcr#M1qRFiUaZC{4!`!&nVC#Cx|`n{RQe6g=~vrGMH z)7Db=X#4t1#ICxsXW){<$4i0Nx~CsvEuNcHwgg>kU~RUVk>Lf+??X0@woj0og-FUF zK~zL&7Vo1NIC4YITSJ<2TM@|ddsBI~#aqQB!s{dxma~-r z_u=nFI9Y#8{Q`pAFBv;%?sRJkUi~DTL>52PzuTsU_$YUADO%QHiW95xu{rcmwi@9# z90? zLrs^iL#esI9u2uRod_#U+C|A^E)zwmqO-C-oyS6{rDbM z%E@huhv$dCqWO}}GVIecFrJJ>Rsg9&L;3t@bzw5w)`oKF(4l)XL-ccoACoA zTZCjji6tn;1vz3KM23;um>fOHBtAqQ)SY=EWbUE{0z%Ma@%^(`7P`LB-mC2LcqyofuT3OXWw6h7I=#FE{UZ@?x(>9XC~hdTcYpMi6$Vf)a(eFW7w1`-*v?mhQfcrC z2?Y?RvINyKE`T0)1?e0792K8h)P}k?3ya^z_;{AX)BJB>xbC?>t{Xu5FuPeGv4OD6No_1bKt=AQiU< zoG~g$L(p?*gpQ{qU>C>qWZtK_bmy~M8h@BCqB%uONl4xopNd)MQ5o?wlI%9nv4bNZ zEOOph27v*AbD|Yr@GPL;-qtqOW#`RU-?XJapnIXBN(mST93SZ(@UOF+HT}e>NcEc& zlEpwLeR%XLH(RlymLr<(oOymhD-pyV*_os^_?f|MGAEfcS$3HIikRYe@sHUN@qdU$ zyouJ%QDE3?ZHXnlSo|44{@8_VQL7l1ukz_#{qb=-xE%aVeg+g?8WiC-i}6_Rffe!a ztk$$X@dJDAI;;-9Q@Qw{o`4+!=Z90PF*uzcNNIE{YWR)Jd{${-Wu1?EGQe(W3qo7f z>wp!iasKe?us+n z19JI_X`nB^l8|7_{GKfHcxiwl4JTcSw0U7M2b^R*Zga((e0rqSVmz&p-Q=&FVXn5r zMxC;>=Eoln)G+smLbzrC9F3oxKY`ksjPvab{pmBbp6>k`Kk_hAcDtXE2Y)$TUv2;Y zZKQgE3qgim!G3!jFWM&{y)F5TMK!`yb@YJmzMJ#XOBdDdeU1kqD zfa1O^bdL)^^g&?}*Emsc`2H|r{+&|Z2KM(u=my-Y^q41)dYe&SUw?vJJw$ndpMdwT zu5+1R^X=P!9mET?W&3AS!VL$R$G=X--EsW$<}3xhcqlO*j9&$E$X{Kh*nXB$sD#@{ zZ%mKa&d3XD{T5xx(lEt+HY)%C01hHKolpCfVc3smf-x-qru2xl`Xay$sUv})yYrAu zQGwN|?JMLGQ0jMy^?z&R`aJj@Cj%a1I)zPz$LtBpz(k=ZisRbU5gJwwv6 zx5gjww6?rl8o<0;&ju@Oms=G}KSiGmD}VAE=nS`Jn=O54BwOW< zb{XwQkwo|)qhQ(jk;{`M!kgRV4v1dJ5TkfnLCLjIAKXCTYyALdki^r^FhEpZ1hbF` zy1#`l@_pn6r@~5I8i)A3WujL!)h^1nk^zftgl<;f`3{_g%7oXuo6J{_4Gyn8WB9jw zfo~{HN}&(UdwL|#tfojBYS|bbSiqe0N=#NBVdhZ9 zK@uEPK%-%sSNzzaa!LlVn`JS}no3cfdWF~Ou-{qu`WQe=HWM&oJs|g|?OBKe8km^# zuY<;8iGR7?KD{67s>P;Hv5Y9FUvrbCXxqQvjm|hxdqd=XxDA$xlPx<&BR=NSjmzae zocIlvY^VW>;{#y(?`YbZF zS#UNYZ(eVtG?RlW7|~ljmB40P0E3>+ur7OkrD1Rs0NL)`jF1n#i+hV{l}a`O*C%(% zRO2tRNbSz8EmlzY{G~S@Wy0uH(-CaE?fMC&1@?q6N}DR|_yw0Q9Vx@8$?B+v)IRmE zFn=vO4Y8e9Sey;3jrbHFKza7r>@2}-LTi&w@3kn!yjQ6T2p_etN49Y1SN$Y5bV*N> zvF>2PyIQ?_Xv^^#{kjW;dTm*h&8Ju532OZ@Hq%omYXxm39iQp!Jh}1s4&-B0W3b=? z1N|UlZYS)U&bU`S4)O;CFK2zn;jj%7&3}uU;4WkGD>3->LG_)^Rnz!;qAn>#auv?fi#1g)ESVV)y(1dIw(I9Ja-0K$88m|qd}0u4ljU{njJ`hN>U zG+qHP1ic}@Zd6BI7?4%U69v-mj&QIf6ltipnwh=9QOtH_o){hx(iKT#cMdauf$NwV zJ+5HfLEh7uuYgjg<$937&tCSx@dC>KndQf3Fxz%+ux1cuTG-0S+*fze-=ppv@8=rv zGRx=a%*d^drzQj=H}LC-s^9E9r+-A(b#)4%xLYIOq@lrH-DSVfrB)t3?ey+zZ!EA< zXbqFOX>`#>%?9*k@J|djM$)kPl>yk{YX_N;OGk^tw1nexv7p{tnK9eAe zRMxsxs%Jle)Xk4tVCoPI!H7MuZ5nLT+lp4!OIHNk2R$Mb>iS$&3_|-R;wEV z7xDn@Xfu2tHhN;L@DmsFwu=S^-em9PDv6A-ASJhL$UZ)}MJ`svvgDFk=58vc#ngVy zYCgl|EYU0jSW9$lw&Zv$^XjVF*HbH5zxH?}fCu>+cYPIjwkhgmCiTAFGsxfA-sn4M zVG`}saw;I-BPhAM$tpEDgpJ%Etf&(RYyKUJq7saQ=F}on}0^1l;Z--3YETz zz*EDq3DiZQTP@9h=%k_Z5TdPAa6JO*)F{WdfIeRDKnBpRlzBAA>5f`5_Yy{C_YW_`fg1 z4JhA?fm?M_$XhR}GJix^0%L@0EU_i_v#te$=09eha>>U!*Et@w{XD*9;+f_HPfm90 zihN`F&#`tzAg>|6jjzay#QJqdEv?|=4eMVFldMhI{JG!ZWVz%-eLpr;!N?St-wY{y zvg>Z==gu%sjzVgDW=q2vl9$7$*MHuJ4@vs>$mUTB>Cb|kM}M_YXJpF#JH9R>3TsFOCkEQTvs_!p#DYZ0g ze?qr#bwWzN7k||LtTaMODvk;*k<-w<~4!0JH0Y?$HH#lz-*ovnQgQB(6psu%@auzbG zNKCpyvK?;avtx?xK+?;mT?M_0>i zH|*7WkUSn$41Nm@|67@eWl00uF?08wGz|Q8f_uY!z^vO%4ypb7vIuqV4O5Bu=RBn} zn6DR2XCfFEF`L5N%MI_z3dH)D$qcF&cCU$tbbr?&)*NPhp*WcH{;RU9%mwT{LGRk! zvj;XZG2$F~stit+AbqJ$B|85!+IuDazKUS}H*VlBB>f(`PWZ z3j9iKj>P?Ng;*B(u0&pO>ahX8is;TRpGD;lMTnF8?49ptwmqVQIP6!cD*1bGdgA73 z3?43~zhD7@8YEYY>PZ1{s9|xkj#bLcVSjw%mvJnx;N0PRM)5CN718@VPSzX#+~jlp zbpd$`ReF`CpZzQZYmK%b$m?a!EN--d!sn;3nDasy@&EIE zv`fTIB7Y)a`u6bI2Jj6Oj4!HRQ-_tl{{~gp@HoOdJg<{{-{p(hMLq-J)qjhb zS90D!F-au1CYQ3TSg^@ziV~Eq%(*4kb*{A!zXOO(|Fulabx1%X{|-Wfb4;7 zmyPi-Z;iKuhDq<5f)4vLF276&m2#=W+VfIzjkfhgp@jG7YL5)&B@d>pbIzG=wL5yA z2NpJ)f)n{Q?eR;8kTOJ~wrZ&wn}3;pcIX9t?-}Q{<`5YXM5{mpKD=UMNI}WeX;>FK zz)x}dFrSI00~O@P2r|ddNd<~!h9=}LtoQv_%>CoUVA$?-j)Ac z_SkZox=HoY4xkp%YUd|+3^Py z8#jG+*;bD)&xs*;>8pZ4zxJaQx)Y)k=Ia!0QhKIDqq1KYv67t_w(OA%i;p zLIs_zIO&-6Meu+Ahu5TV+!48}GR{ghzxbHj+IIvafDOeVh5a?_`sWnu=B(SOjZFR<28Hic5c?NxEAQ-5JF1`1jc!q!v7OI$)GUU(n`S!%HPlgGw%>|X|WTCW+8Tre4% ztEy-Ev8rBpO!IBZ6upM{+IG*PdKAy{qQJgw94rzus|$d$bYCk-P)_h#k|%Hny_Qtp zJ6&12p}bxI6;>-w=&m;-5fg;Wi`Z8kWzq(4;RjLZE`8AEM}K{a#r8A@#LCwv0T}?l zOKg7UZ-sqV1)U$`<^IydXz4egm0(@*oC~DOoJO6|&ZoM$V05+c44<2AdkFZ9*jbS0 z|Nn5$j{DFXL*h#Z#MwN|x+s?pcm8nb7Yq_zeO0nM><>yp>$3Qf)>%yx9yD`V95zD2 zgz-XiBTsdWq#NF*H4+nk~xm zm?R3|c3)0rZZn}>zx;b3_J$BJSA?z}`CZ%@7>7+Q7l|}KO0G^v-hJFk@ zlGD_wEq{D?hGqgD7e^oPmrM)=N9u)$7EIG(scq}A!{s^)`ey{O??|W!1066F+FIEj zOwOE^Hvkl`HV|*B#c^U@latDj8$Lg=kFih7+(IubMRH`>EA4+3+W~$H-SzN--O`ir zcP|7XLAYiN9o$>BgzHAG6A;Iwe|9+TtHzohR)2}gohD;i42-D?KWG*RV~PyvOjMb{ zmXFWr>}72ZY#bvve(B>xHUg;}$1-&<0WASFx@%qGh5s8A_4-V2& zxQs{45ZR%0s6y(2C3g9+pWmE_Jgx_Bp^0yz;)=UDQ$4W)W;=LGE$T*at5vm#JL+jB z=zj_Cg|Q6tq}y`h57Ugb}tR+gYDLg)w{f&2Wby7mM$mF@{7n@UEvU%$@kGJ*za*wSZvc)#8bC(g2d zmH`Z4S-qY>$WfGH-5sA@f9kJf6pOh$W`Fh_SE0>r)_ahpV*b(OBNJ{=7NMAY1-zqt z-@7wmE+&DT6pD~e#6Mu1A`EVw_ClAmHm45j}~%u0CdIT3ue~WkjBaoGbUr zyhrhZNjJRClX&2)ES(UBTqM%u=eIF~V1{PaN24Ym+s%j^tzS)k{i$tb=YUua4u1i< zxmFDfVzQv*Z0jUqM{%MEtn&ur=SoBojyp_RuvuGRr-JaH_uZ0;0am)MVLdoY?%wW8 zdfNT;U+uMR>fMYYEJob^?0YzC=59x!XeEme>u50#CaJSD)$}^Es|!n$+Mt@Nj*1v6 z1$v(dLp9T_-FGa#RC0C1c~x*O)_*7i8Ss}Ssie#-g4={t4;Oiuojus`MU9M`K6IYw zd!90D8B6RUF07&?R4N9Z;%}hZ?5gF{JA!AmLwQr4Ux0F=D!pMdsNMJsnynHLkO2HkIwCnwUoXq(I-!90x@rOvRIvN^VAs2lK zt<1^al`hlZ;qQ9xb*lH-j>P0gU@RR{?M~m^8_81(`X8oEVM-zh`Y$HDntXwJkDXq# zPzC8|V;vCNUTI7Sa zH0(LfQ$3I=$a)~{06x(33w!>Fd}fe7FuObOzVmJ+z87-0uZoLO*fm{GG^ryoOO4RsPiNKkFvZJjp+8>;J4p7Oc5rM8l~K|qd|=d`rqX(9riF2 zj*o9LlAH&7%-96O+JB{lm4jLc-n(aFcbE7@r}C3CP)pVFD#iNQgkbuGuM;Cma($uz zfH;2(Fy>opU3m{*&?$;nMWvqm>7T}+1Wc^RwzJ#bL{dn+DADLa9v1$e2ewB{#S(hW z)rV#tu{d2B{*|Pf@ReO7$`1VsPuD(meU$L+{L1wc0N&@)#(xnB_vf+5G-it zR>%=2(bcCuC^(3rf3iA6l^vn~W90Q}xy$~}qMhQAte^5M$awj5Qi&XPqI`j&vGb_| zFYJ3Aw2|-IC=@9xVI5u_|W? z(SDVvVluOt1KVduE8zF})RZr(4S3%3#6pKJFPOkDOMztR7|$2%Jardi#`xz2!Cr55 zs!n$0-KF$}+amq#D66d)Q$QJKjekFq!C7R0Eyo~6rGE)WFa4(NX$SqXDfHrtYEyHu z4{JaA!$hgoqu&uZ-5-Fy#DW3-VzIG$XE~zh8C?pRtbCtk_!KR5c=(}96@-cni=>$Q zFrr`9()gam*D#{5-+9A8{C1TlKkWU$6p9WMpBw)j}_SNZLrT98>F9V6a z`ryJAc7JfVgcLSv;=9wjCk)8k+^dSVP)2pMioikhD9w%s@}c>nhEDW5hCxC7ZRAR* zE&kJK$y4XGk~UYA8rs$ikk%AI+vL=YQe-;9XITZ-jiBqYZ;-p!FKsDIL&GRCQiYma zh1xV;~wC*X`$-4p}Cv z>Kxh{HIfhcOhQ`p}isC=~B)@>qqs? z34dBj;HJo-*I$BnM8j!Q?*Cn9GDta)Oh?AhTgG?WK8&af?*B^*u3^dagk4o%llLst zHyTa4U`LTpBmk}QnYJUHv*V`Ef_iOA{Xu?)t-8L~Sv+#{Ks|=mxFoyMksfI0bgFfF z+!}GileSP@SF2I+O(F1bKHODZNvqBTPk-ZZg-rMPLDk4r>~R|o_Wqvp9k75$?m{5#D9W0 z>V22tV?y68PVh&VzAN)(<&dDdU7e?}_5%r5EZgY4SGwzLDtBOZ33D@jpyUnRLVt&}wn90E-5t}UOUgIYjD#JQZ`8-x>j~8ji*P?s z1;lhb5`WzHR?=yVOzqN%;u@auX#-FES-ICjYNlYDCO)OfzQ5$YqsoEy{%r=WE6NZ4 z^%)S7N&1JIO2`B-;4buUWTnsKiFd;rBTT8RB|9^@U23kmk z9STN`>GGqX^USOCfAi0e;swmUYboTe`6TvNQh)^0YD0Z0Ty;Nhz2r0Ti%~g)6)+UQ z2|>{Fvw&#Ai^JmFPhmPH<{Tmk=LAW>cDbdg+dVE&VP>Vp{J&9raa$kxQNbg92Q>*F;>W2fRSBojG>Ti=$)(T zyENo|SELTncUTR_e>x_HIrlc12qi4+{RVF+0+?Gt*GiI`hT>GQZp0eVu`QU z7${be&u#g3UyHI!95$gi^UHh%aY#Wr_zyF&6xmlXn!k4#Qa_5a_|ntLlOt|VzAGg1 zcwMD^LansM%i6;p3&|P=s6N^CiBG4ga^_!sAKfD=mJZ*$a`FZ`Y=`Gj!WF!{S`ZEn zLHvC?TW2pozn zs=e^Q*$tL|0Sh0rG#A|aXF#Nqda`GiIl%l5I|0;fV+d<4MtDL#brgTYUv5(ReZi+T z&%5+EYTV|0!WYPFg4P|-lKJ{Vit;2-g;X_@(GV*Aibn~XDY)$k5uF`^aDm_>k72(g z_e)9~Z1^?p0tmrri8V)zPqqx) zDeb>xJh8TY{Bp?#trLHn7vGk(+CPv{Sr0RHz1V()bPNxqh^(nQyC-F0?h4g^Sx3xc5kk>Fiev6&E$ zLGtkpybhIbA=L)!KnmYDSanc8>frRi>eeI27QQHW%D&N5$Q6GvoN=h0NZzf-E;viM1PE#<$Ns*FDf8 z=I<-ssVl}9pHYphwSrL@;fhDNH4H>-BW8hE3eLFTr2$teBR`qqrIyfUF&bZ?Td}FD;pIVJ>S`(;oQz2rsnZsjliMVeTR`>){CFmcqr|;xC7`*S;;#1z6}hM38~VC9{P;Ok)w@?)`_Q`&8vU=He)jq@oO|7m~a3=-ZTTE z)HmixD>Icv4~}nR8vNTIA~JYbZdJhc))a>$SlR(Xdw<@&H#&&?_8#Yx@)i+(R@&Pm zUJJbHz&g!GzdQu>mp~yC4YlwU$N3Q(E4`x)`UJ9&Q~H`dYjbAgCGDZRQOAmd(*#1B z7nYTlW#xZXjp`hnjQKJmR$q$29Nz$qnmXM%b2xAcJzQNVkz5O;mFp(bnc z_cC)l(%KUMsUq5F-!+8gQ?X^1nH0n(+f*;XJy_39E4HyFYZk{eW%cCgj{YYN`lgtS z4Wv#MzK?J(Xzc#K$fX~g(rgrMo7!*%&B1kwhkt*iWBm|C(X-`-p2RPW4<2WT##Km> z<<+Fq0z0^F1+sj!LPov8y&6O<$Gs+6QO{NrWBgOZqvaE(KLodcqKfr3zu9JPi=1Fv zIK#h2n=!AJrq%@wE_`jCyMEy1(+LqFQHHPV$@g309ab$rtKfvWLAnWg)SkB~fpqsG z|G0kv{LRDyP*H1K@ZyeTFdE77N(+a2t-*~*)o^Xp1h~5bv_^g&A6vNs&rdulW9J!P zs4C6@AKkO2bcMHkMB~*!-X75Z=uQILxlB14x1~|iTfL@zivnB{g>|HX9#NEyDuGQ} z4x5W|T6u}1QfxW>B8f}o1;W{>09TAp$Ao{;V^vsRp((~KEH0V+P{b?SV@RAO_z6;N zr&ZUj9_0@X+e*IX^>2+oSd!GhVppmG*z8iLl+$a@dFN0R7&mTOUq`LKOgQ z&Ifj!{2O@{KYUc^d7LOq{g2O{Kzn5|f5)G(e51=ynQx^i+Hyl3wT*!9SuJ?WIG}$g z&gQsXg`mpb1GcL?K>3u*_O6tv4sUDl(gm^>A~ZgEr&36iUyzZ3=q5#l_iXetJ8Otk z&(3X_AiEzeF!>q>9-EE|*d0vt$c-ysfBbqKDBq-DFnM1ALgyliB*aNa{(x24$)o>w z915W?%vf6k<<3Ba@WYc;TgncEzOR2x4{c`UX-G+O$iIF%XTcl2z`T(@6Q|E2y8wiZ z_`0XHasg{KAW*1%d)W*KFsS<3s_q$oL#8%>=R+^}62C5|a0AZ5(5Iu9Q2#Y&o`1ip z!5QCF9}}y^ne_bnX$(}-!7OaDgzYGKAK0000h0000f0002zmyV=KlDc{WV$@`W2ClL&JluiB=v-wv5v!JL@Tj zm)3K%;eYain~b6tR(CA}c_x3uAA~iQI|(oC_M!gYRpqfIj#TTcda(@?5R{0CYb4CIyE5Zw54jyo>z zNCicn?3{1nek#M#%3ZL$J{H~@VVIhc!U!G4JyL2Vl(#+ckKUu3YASz;O3~)@GjouX z^z)BkH*H)2yFr*dV(b<9jWJn)sTDAIc#8y|L+X5=9U)5LZ)BdqKf~`Dx;a+*MroE| zra-WW&32t67Xu|oo6R8XZ%H5-^VY$M>s4LYQ%|SLA2NCnuy0ayD{RXfI=SSX{L1OE zi)Wm1qz;w7I9+onG*o{vNnkCMJfg)rM=qqTa@G)WrdtPn*UigG(_b_2SuxaZH;6JU<@mn%@MB{IIB}wHTZwH23xu7bV#I zAI+W_bG2D+6O z#VAY*8DeC+8D>FRFv>P}!*YEq-ZVfUO31Nv2{W~tY6X9`*5(6wU=t;VA^xO#-Ic=d zE!)o)>#9PHGUobcA?0Q1RL(Hf74X2aO(*MBMX^nMb=fN>0BM#9B_~1Y-*4E+*$#+LbKH>m z>1Eq~dmw*ac!&%rRSDX{C6EzT1XB_%k=wpBkZIk=4ilRA;EF<_oCE_SsZ=irt_D2emP zRZa8WP=}u7L~%)sp22)WGZb?;#_YgBNTGaPlDK~q7&30S=B7R*jM!)kOHm~?#QL3L z*pNvu-F3SPD3&$j;1Erv1wD}Fe z;k)sn)&Z8bVk7D6@Vk+eN!NUol>D!*WO|*IFCvVYQlgyKUZ0wZkX_; z0QmgKunYKby?=0M(kz(`StEvTLh~~nDxrV22f>hdr}$E&Pc&54AOh(4i5a{%q%<&| zxd$-vg7 zf3+(3;k(K*2AkHGoUqtd71CFj)&$cSTC#0z{Xu(#{=&~Oe{;0`fNsQ?cq4h6!K8m^ z(D6JdLqa|fFvqIpF&*PeL692T0<^o`xN2$I?r%lNk zKOnmFU4B%-&o2PfKUIPi^vah=iu1Ejcln{DIvYlw3Kg#EHP195^odN!FR$Y`<N4#}V$qFgOSN+@!S)-OkT7O7 zqSl||G#Ff*X@mhBLVPZib*4Arq}4U}5UOWRP$?+Ub|OL-;X+WQvi(t5EL$iNkr31% zzCU+{#JL-r(EHpoaPQ$l_3M5Nky$M_N5|?0p#A}g$0xV1k^BFulw+_E}3DuZsAoBbi#zQ`@D6Xt*WT>XUe2zC6!@wl97nHHX> z0oC!ltCw;>inw#qPh%B2^~p8vm!pWN6qNb(A64fU7%uioWR)L>V#C>kti*bs{4U#8CkQLk=}Y{IJ$kL3tpl8V69;@BTIPte9|}8ev_~OrVXD8 zD#6Q3z9lEP@ECt~yIU)XClBHuht@Z$Iuo7Bh>-)-MLFfoqsRMDeT7XBEMnN(A*u+4 zu~lvvrmW&!-qrpjM>__;KpJ=WX<}cCF*)h|*%(qg0zMNIw|sIHqsBG#EaH%)kJ@Q5 z7^Wl$;_>Qe-2>#V#Z-zx;>KW#|C90^HQY_oxKL+^G}V8UDPeo2sawh-< zY<6jd)l@G#fm=MoSHmbS!At7@y`_yR3ppb`(mvKd^ECnPRNd5oZ@=5^8jqPzYotURf&B%;=$C2($|k7AdRb3 zdo{qJ4T`~m8{*3ThTYCWP;7Rhy2HQ?=jQA@8?-v{|KQ%z?alxy13DbF*K-yuqT`+v z&8K9+##S$QQWUo6U))fy+5R6Nizj^I<*S#TYdL=!2zIt>BO)DqPaY!5n)8;sCeN_I zsI4&2pwzvp6p7{R+ZfMh!Z5g2z^QC!XLwU%?iBpq0MS@qR7U^q!fgd0M8c`gC&&%l z7d6zt>4ZXa!Bz5OW}Q$mv((JZzyr*5+7`}T744D0V}UiP_aA8pufq7Ecd~@7+^Zks z(#?N{dkpsmU4jV?OG)Qi3y@S!+G0~euLt({&Fu+}I8X4Ey2lj9g-N<=m%&vBcqjql zY1X^Z-lcZk)=Ll83xHB z#gigIZ6b#al!$s0=;TC?jqHeTg&{Wuoo0XN`FSRUVprFUrPv$=Z!617SD2KZ8E1v` zzip`99JRz2Kp@}@xCID(4+x(m($)ASc)#*C&&?*u2b@8M-6r&emgKY^>j~2NI8$$KmE8B3FbkBNek-V4 zt<<3^hT8gF64p-T9L)lD6@t%MgjaTA^V6IfeO|G!lpme5(vU9BuOM>`p_T2|MbT4f z%1HJKipBgXy$gTf&g&)nSL%KkscwJAn3A{-NU!whIt+|I*_UIl|9V`1+ai|e5EXQX z2f1OGK$Y)TkWdBlG@vCn`sSC2e%Rz`r4J4mtCg1c*0$tRE6AsD6J)<4Qoj z^ed+t`Z4z`_e&WI!)>TWPH#V{D|)>=WwR`mVf=hKIoHDj8iHOcEfp-9V+e0&e6uk) zd0w%kO;4ABv7!B3aVz1$6!jXM1jD<2;lRAMQvkJ58NzVS=g;afl0LC`c9|r#$FX*e z>(4YV^&8tw4n2rt;m_~+$i#oc)vnp?H4}znB$aGzk0Cb=6L!tO0LfTygL-|^MSJEE zd}m5!+k58VvYS_fMR%45%DC;ah<`m`RyfVVwX_N7%&iUc!<^Vne?)qXS8r;I->oLA zE7%F4R|hJL$t4QDP@cD6u(zAEExjkLO-s+uQ~;YE+F>r-wWnB|?t6b9O}h!xr?>=W z*zTI*SMRUureqMNDdY*vZyK4m-^*GC9nlj&##`h6)1c93!pTsk96oEHY7k4qNo$#9 zT;xU#2Ve{L+Q(i#r8U{k12L_ip~u6e%$xRD$$s_fKC23wjrkFxg!(h~h7`yiWB8gzfrM zLh-^My|$_K7yiE(W16S1%b~D#yBuuFREfv!(+L8HUuHtvBW3)~=Esc>LUWM}Yw8-k zSl79-Ad~ ze^fg(Yvfd8P=e_4pQC)Om4zXChVYpYD}$pSVk;kLAZ>K*Je<1hs|X?oq3DlpK!|Qb z&p8nJOaSb9@v?t6XS|N}eVrsYFHEKIOa-e{y?FQ*G$v=yL=ZZwa~%2Kna%(UI#zw9 zN|Xmb3+M_|w)cIJ>?aA@I1O%riFFBm(%d}ms)l5Jd}RYkg3^3{{MUg)!4pb!3oExS zYc+4OYdHO1RK>P;#v;5kt>GGz?xTmDjMIpjBJ0|iVmE)g_XI=SQ4o;Qd^DH3rTS1{ zg$F4;=a#%X7}rN2y<@`$!6b%8%H3VmU(e);w4=|$skf)-MN6P|$N$sN4fST;PE|L8 z^f)SLP7D~KX;d@S)-ZNTg$W1u988D;l$FOjcH|H+j` zwkY)cOYVg$bPl_u>;~-{^!6@|E-*S2u zbkUHJ4^HB?wDq)-*D0pX5e1zL=(LyU*+&Zl4!LoC(vNE@7UBcu_Oko={UQkXx^I-L={#GZq;H zTv_r1xf?xuZTN7!xG5Jw4nzj{?u*&odiX98mIrm?o zc1VAF|A`@@{rI|C31#9yUb>IY>6@U2Iw_CnhAk`cTT{;)W(behY8sHjEeDS7?7p`W z%S3-{A3%0NhU7zmXeTNLyQ8|clUf0gfLnmR=c?lR7p=Aztc}}ly@}Qm`E6|-cp0J9 z*O4`Qt&r;tnuFjcc3H2ho5^3WPoSegK=FUgiX~Zp0j+$OGZQM^j5OlWvFI@APB_=5g_}rAd9GYIx%trYg(j+V-Y$kf3?n zVTrnBm`r{VQoj^*^IOGDzV@NB+{sPK%uGeDhH^KJW-cOrgvN4C!}3P~1p5Pstp$I= zO?HL# z0&=^Nh=4Dw;CydRn*(mF*#3IURk4oaqp9*sXc(mil-01Q*9Sz~wi9Nu*R>QultOZ? zFWCQVG~(dPWQwVYeM_|V$J;fE&FFuE4|^YH^A40O=Je;O*uMbP`XskLC}Mq+sa+PV zDX9Nv!uhdc3}_Bx7TkN%^55*@(B?mJUSA7LR1(uoG9*{)$K(iBe8^MoFmmE?@5Do& zz>Uz&$$42_?QKyfH&!(yU>aq#tPWBlN4IKoy$*EIIx|HymYAYn*WtPhk(#*$L z7rJ6V99R%%%5xad#X7FnzS!6E_3!zE@sf#QKuCeO2AIoAa!_{g#*7>S_p8JY+6jJc zUGi`AUBsq1RQ$z;=5bLxM}dDnK9(n1$`$&UyJ=!2*B?F7s}EH0djxnD}a7(;aEpl}p%@xAWpTBqRClGB+VqAH{sTI8X7m}-bGknMkG6O4s7J$czsI4jz9qvNK>Ba6)GTDwYG`4|jc+Jd$ONA>yzdjqLZ4vo3Ohn|R`P^PEu^kO&3hV3(|1(P*4(A4!$b`)?Se38 z1Z9i0%=gpq>bI_$s{qR_wM*M~KIlcVT?*$sdixZLq2PFd#~yktJj@>@&6R9}KV_xS zzN4ZVK3<$>V#eT@&3*8)=z)wjI?ujs1v;t#xAx>YXc2!u6D0`%BT2i^Eu8vRGMV-b z??gBGtHPSnLbC;lInF!cV?MV}7RS3w!p^&~p+gQjVC0lcArE?%IFACdKN;&Vd| z1y$U8@|jEy^&bTab(I?4NIhvp=55Xt^!zgnbu0%?h$Mn=x5>67-}`;MHUDWJHO(tL zIv4_qdkkQSwW`m|yVw$!13E52cT_+Qssx4)FQBiDLCm;aN_@*-n~y(Y?RCup>?$8o zo8y1*Ze$Wx_W+tb0OTR>GFPVYL1@}Lk1&((c$~p(ozCNh&qWgdM;I6Q_rmkbpUoNz=(eU((C9vI0Hg2&C zn&0%==)}fxSg_d+@7N@SNuzOovWVzl$Lb4xPoQ@(X<8i6APh{TYgZ+pXlLosW~7z0 zXUT=)a9yB5=3XgEUKM@`h=_iHAARyvb5>o9c(44gzC?(qDR$F8_$4hEL&ia!wIH5d^jIJJtZRqUyzplX zrHJ~vPr8O~35D!!(p_&U28rr0uTPfKmRQu`ma{rbXz8Ok4rKH_Q(T$TO9wqWw%KT| zf|s*eqnrpbhz$Jv8r^lpyZCn94&}-K7pQ*H{j-!D3b=Q@?zltEO<6?q6S{x0DEkE; zQ(>h@_vWH58FbGZ;5#DMGxq)B`|r`|YEBy{*ZeQ%=i+I^kx>3tcxFSnrK2+fM7I%H zKzc4^^;6q{@LvswwV%;2<=EM>(h<(r6zX8%yZgiMgb}O9aegt>Cvl7185EHN8g`oz#`ES&qMtyzxzukE9pB zeDFnXr*0)Qq<@X#k(^KoR@kYz+(`j>K|YO57BG~Jv!~he@NX;oX8h*;@OA=y+2jj# zz~__pGm0znE#lrfemT;`{ppsEuN9n%9ig-!6LD6nwVgf!p|yX7lnM$kv>xcTVs{r4 z#}^?>i72}WWDYJYIv@DjXpczzxO|N1w86>u3m99*Zapm2V9nXK&SO4)48ft7^sPh!;tli-O%UKBe#^6@dkdg!kW~l~H3_Xky^TP|x$8Vd zx2_vp#=Y{k2maE^0H;C{%={|PZoZ3TR}{|h_LI;`7o}ByC+R1xIfHn}13e27t#5&Z zmN09fi)DYGiA}?HCQ^?TX59L>CnzzGYwtR_%h^}4UMpOfMrNhA-)}s*ndHCs1H?VZ zrlju|wRVhCWb;lEW^!!{jh9_v@*=US&le@wG11Xkj;}7G2!r4@+M!Xwv-5|76@4^e z-q}QaA(S+Uz#lo*pX{4m*!*_4g}$LFZDysW6iOQ)7PU*I>C_5a~&da4tLtaeVMe%kCIvDg^5JS ze~oiK`i*;LJ5ikZ_O&G6>P*Q~lHk9u?UK`mUh;K;;~+`R9VHMY)Taw8n*EFKqst}x z=LM|Orieb3)2~NQ@$!6J+RsfVOUz`$81R1pJb-{}cqmH+2^(2gQz_yACP%jD>R-XC zW9`{EDg)gWg-5`507ato*(f}<7JLfY>^T(XlDkEP*6OD)%R?O(FS_F@#GmVBYiRKu z5dAtWrkM5jcO3fd>;(Z6lRa7e<7l*U1x0XN%sqlma>*f!feoR7p>yiDOsI`y^1Xi* z^pbdd1m?mm?T@0fSZol8qUZ;)2rf(9-Pz$DJjmCVZrVj@0?eEH&S}F;#*o40)vewm zlHU@DBbLz%2m^b_QXe1kfgL+V*ex@EJX-pNgs5l zzUXI_Hl`L)67SYsvOvvfW}sTasaK;dXY+5*zh#TXOG$jN<>)=OHzMUfQoFkr}0h!KDLaW;Y8 zANJQLDzwFI0wua{Hx{qVNZaS@0J~l=l^?s2J!kvbRQJBWL)og~Ye@-Yw$n)SWcf_? zx$yxTfkbw1Xam4{pZ1h88jRS!;`Y7Mk*tC}sf)9Uf=}Nx=U`f7=dB69ezh*FZJZE@ zvjpympoqL2#}PaToYhyoNpF9bMO68ymz!BYF6|8upn6?HFu<{YH!t{+Q$YCv)S)0Y zc)o`ZH*2?oShc7bYP(27O!CTk#&B|?p(B`U#qaX>NWH5SdDdw{hCHYx$KsB?0iujD zCVVfQm32SaI{!?P+NJ@Gxc8}qrgeX=K6US$D>w4Q&4X-(V zr5)y|IHm<>H6NZbU6BJ@xmyZ1z082+nS0=yG-|M6Sx}>&N8fdtP$) z_#g$plWMxx-J13+uUdCgA`TFaQ?}4`8scPRv{60wQxw!^b8^lj7U{?a*drH$RbroX z1f2zCk?CX!rn6$cYV3bTX|!%9wT!s?AVwf=kF=WsLQ_S&Y(uxLG`SlDhpm1omL_XF z7n^YLtu)iu6tY!h%sJ1%dfo7Q%g26Gx{n}jK~Wf%gTNOl5ZR#oAcffqZxls-ywKhP%L=}@8&e= zY0V}Nx&iyt>}~usIx5y>C(YOfJR(jp32id;aL7j0r=_|aXiPivB~L>1j>Rfuol&HV zxJ5R->o|^2l}9r?=WP|U$&z_bvm~l8H&6A^pPv%Nj?4c)#zDk#31F1One5oKq>$>K+d(xFUxD+xp!gv= z2){F%8CJ(_iTC0JC{A`^Q9eC)a9=;o2k{v8ylo6T!}H5i_*dIycqR|xAeZOurPg&g ziN<}OAzuN5K@7;A@nK3;@_}qW46rwhzm0vYk}IiaKU9CMV`ncb07OJhj@}O*2e;?X zViRl_;p4;UJkb&%-0V?lf5wM0wqQiGo?cbg&oSy}WmRN_NjCCp(80LQ@O;K=lgu!+ za?^O0mvwz5zWnoQ$!AU7#&1<55w?Ep5#f_YWL1qaipWr?{3PHEllAEwJ zw2S962i|`%Q5JyF#%oz)a}SYx0kMRcf!z1oiax9z2@1D};KRP}n_aV(-j1`0$`iZd zC_j>yy4$@+96`M{g7Pk~^1Qw|M*Cv9;>w)uT*p1}XmX)OTqOvMfuEE%MI*I!nG60G zgk1^9K%dXC_V2Wg+fg?}Q5N-tT*f}Gl~Q-k)nb2X^qB4h;A1UWL8fTsufvX$;k2~< zh^ph>1_{YSG03+hp+T{vw{}(haE^0&nNyC0|x{!S~>23HO zGCB1kpE}EGbszI2Z=8x@`dCzB^mZjH=D*aczlR9zl?empROQ_OwV)2{aplTeHbZ#H zhW3AJ&v|s}c+?vcuqhH67`$GxNI}OnK#$raXKJDcIvTK`y;<8|PUj1GUNHSoOqs(L z*nqi>eBC*c4|RN!18g?7>DLFpXY`Oh1Q(8h5{jv0p8DW3g zok&aV6pgHBpU^q#G?Dt}nYyus363QR{e0MXu5Qy71&W z6b@h_o4d^`KR^N?{_namVlu|l-0$DVsOUwAk~{s(Ln9=6gR;7)FLWnPKAN2x*Wg~1 zm|wR)^@=NpfsaKT7PW8z?OPmG?h}8bd%5^J@N-JuXs62-(jNaQ9)9$Z>n~G>en(sp z7H?Rl&52^jU5>*$N_b;++{6#ZqxT}1HWV4edQ4!4crJ4-nHsr~S+XOoaehKYENikkSds>cB(cdCrhqJEWm423|?X zr&zFL$70m=1*YFxx-a) zgJm#Kd4dAjar*a`a$T`xeJ?-2$6U?$oMujM_?jOl#eki_lY*@PuV7^_v{NEwD&TFy zzQUG$og))5{RPt^z@QaRA9DjeGBMigD(r*fpUEhB<>2~nq0NljjDdfDOep}&7NmUI zQdE7E3kjov1s-hZZ}SyRn^#W`+RxIXGh+Nqqe&a2 z3+mb^Bot?b^EaNtwgFPXW~|C1FNYa-$hZ6l{;=LpZdeES_49xCkdGs(Q8oZ$&s9v9 zqx9TAaZ||sJsX+NPAWv6(9vfLI;G~mfK}(iW22sCker!wLTsEIR>fl}4tp`aXSMFE zJ4BxF@*jm=I3VB*iPu3Nb_!)jiX8o-<|+)#imT{E&Ui$+fXJB=4Cv1fKHx9BDl4GL zF3rcX?M!W}SA~Dq<*IXR4aM`f#@IT=BuvR~y%{{dKdM)~y_{g62Cjc=+0(QZaZ$v^ z+}IvW?Z;B*A?-_o6k^W1ZTfBNqRp2(bZQb1H^$A-V7xrDntZUwKZC>fEmarVuQ`zq zp!!-L7hG-jQG<`7$v@>L0XC~siV)H_`k>n}P%t2HW08NF-?ve4LFOfI3QX@ocTt{G zi36xuxFE@Wl8li#4ZCI2On9SC+zU7{#xX1sjP(-slhl?$fKx{@>x6wG2?IntG^<0(TtUq2l-KNCpsvc_Egu6r-)$NGa(d3QFd)fVR{{IbFDHY!gW z-g`L(c#nVa!}kB_E-~~F**T^5kw7*@>MV}6X;i;or1bO1fIQ?S*c%i;`<+XgZw>QX zsC8540Vls9o?CsT0pI{|3I@ffbHkKbqRO;U-+9E1UcQO51}1_-mnPHy+^s z%U3sn(H(%nIfZqM5-3k!F*SL*j%Say8X)BQ&B=l+4T|kOZN0R5-nM@^#w{-uVq$h%)6m>rlVX#Usf10L|Zb>yLvk=FqL3d0v zAQdE>%U%~l5Z}rine(^YMEEr1#R9qH2IF?^{b*Nu53yAs*^tG?+n!?!H^KY8mSiy! zDS~NR7yRsUr>HfKDn!xYK`M|0x#tl?@U4GZ>--f(|Hn`;Kc6vBKh*L4NP{K)V2rc^ zl%l?Q<)w4RH*?DGUcbm>*>VN0@}p-9LKyJF_8M5eiJ(NZ4mHzWR?g- zce)+bB?oyyc@s(w4Ep_pxk9N4IPrGh((xr1#_4z&+yA8nFd`F&S+yg5tTdhF(r4_q z2aLyqziUsUsV>`u;uv*7p7isY-g$p7<|8)Ei>GQAjh-5PB<4FqZXL#XRsKxA&vHg; zGDcU~*vlre3P5pTf_Ny3;LQF%fuXuC@RjzjhB4zHl&j}ia^&H;&usDaZIItW2U-?f zjj4!U5BVVvK{+CR*7JJ1{F$6JSK9!!D+c0vSv)$;yv{1>h1~YmuA;q$6Lo);PezX} zusQnxzCodRVkZ*qkHSGu%uuGu??<&x8%mXg!TCA870t;Ot4FsgkIq-UnGJi?IpDGm z<}P_0zbK-(@iz@8^ZA57`;r3ef0HG8(2)O)ZMJukIx7;a(Qwgy9gcKDNV@j()nABV z>An$NIo#FWDr_mDx%ngwBglUV?x*vJ7&T(*H*JlDZ)M3c0#!9kF%n=grgA?2@q?1Z zXWZ<55WwOAKi26sEb=$%Z?$I~nkM}2!V8h9g>L#3-G0s~lf4G|Mmi&6o%2^-Vz`?Hf6XXyzresJ3TK1qLBHzb* zQ_thlwQQ~)WvTffgkoX$67kt2!D{`mAb>tdteY?U;?u58MozE=D6$F-1WEUs#iXC; zbp-zx%lGyVALu$pN8W!<9}{AdPIPG|US&&J@sEe9UUdU3=2q}AXFsqf^9X&8rgzjK zYmK9aQODLY;bF~iN8uQSKYf{ZuZ&Yq9hP#L$qnp1?I_-*xvXgB=e0DEZJp?el@q+E zLm3gx-8ofPZWs> z8yjmCg2fvn-5i4*;V@gp@XMg8q_qMxaJL!Ak{*-RXMtG-e$&?Sd7&9uG8AD=-Dqck}=t9z{|ew%E69e+(Q#uoq!70g7b~`C=1z>#{%~ zUtR-X2JReATP}Z3HkB6i%NO<5(`A-dG-vR5!I??1$Rg^rfSHEYZNa0q7KVLBZ_tr~ z%vH%Kwdr!ieTdp+06;9vTE>|{F4>3Y&15LfDLkz+W+iV8cK1X2(*3_bU6J9yv4`@c zXl8gI*)``ew$hAZt=!yj6a7OH-=b`mqz3Ghr;8hwsO z8$Ma1*5_&04T1izz>ND;&WV)b5EGsAM+Y}Be}IsB0uU_tz$B5%SL~fRJDHz){x6Y3 z&!5;!cV)7U&a!hRCG<3#@rtie8yxHSEn4$`Pep$gl>`pC8-e*Q(i@_N1vv^McQqw3 zqVY;rNUJ)-X%=|Y)0{lN1+*s zgs}a$hA0S0MQMV0E7G}PE|z4jVyua%FxVb57z*;#V;?*4zP}PTO>Pk?)`m7$sp#+# z4lsY1X7i~M!Cq9SXw9z06Q;fFnxB|85>5kEuifXaG-=!{#Ocq_u0GZ7eOZ(@cg9fS z;&&S#lQpO|^+1bEc}Z;TQllG;d1OD|^$AUzn&yW58b^P~ z64xjgK+}F81M4$9H{haXPrms?5J_D`&wRD<|7qw%Qt)GGp zLG^b#Yd84Q8vy)3wK^}L@e5kDL9(UU(Ll%m<<_wh438_b!Yp1K&fo0?s*XO!>msbL zZW0ynH#(XiING;$dk)4`a7zVXjd&5UsgWR zQ@4D9#sdS@ovkgS{Ohtk=JskO&GFHMC@h$868IeSiuJf{F0X(PF2W zh8v6Sff~*xmWb-&nMs>)-I#xB^SW>^{Dk<(TDIC`2M^_>aF20Ug_m1y~ zc|0`#o7sngS-veOWqJws{GczLp+gb7IXR;cZ?>eJ;+M)Z6 z$!oKmBa+)EfYpOWWTv-AjXk)%aB=&K@HY$5FQ^xx_YQ<&vsDRX-o!M!HVUZ3ca)v z8C&WY+-x^8epOt;eZn8I*LKPtM>=EC#W99@-$#&x3AqNADn*EG(EbYr+Tb*-kD91M zM?$~LPlVLH-4ru*0=R!2NYvvh^vUq#xh`x&wkyVQvtqpWX?or?+e)?-YqtYQx~;bb zW@|IWOp`VSt#Lz9F5;cXB)a`zQIAnd7b9XSTvVnE)_uR~m;S7V{VJE1PCYt>cqhOb{oJl9bf^s(Wg1CX&w%0s~;gU<8&n zaS@#Rx4}?={{7DDpk7x)vqzgHA^0VEx5ESk1Px3wjLm-#E5$m$R8+f$$2xNj^j2Ug zjQ3;0?KWm-7z$CHO5#l;U_&3Yxm^&(`nh zr&LBoQDOC@k3&mdietN1%NzZCt+o1q&JgCZR0Fw(;3 zf5SpEUT(wSF&Kp-Zchl+MO?ElRt{vP@%g}$NR@qzOvGLhp*c9{-p-bP~~uCO_5+R|S64oElf- zt0a}1*nB#Vc30#|SdM^UI)~V%w&($Wn9X>b^gR`W2Z_`ZolbV0AY{$2-<>pT&?1JR zvKR~QsAT1G4{DGi9GyHY|N2SVn?9a7UnGAoXM0(kiD z_>-S9okm}3d<`X5?jSWbk%nCnQtxT5b}H$OS{6qW1s8?5dqz2J#J9z*w&jk3^T`u- zlg5tRrgN|17z(c8Z}jr{*MxEP5pkcMtr#nz@#!a?UM@^pai-?Q=do)ryMdI0Ee*yq zyk#l8pu#CI?W;aw=54Nl4sEm95 z{k&FbyVREtP1Ear>o@5Ey6JU}&@GK)wg$ZxoGMzJQ3>s^E2*>9V0)HA?K{MbX z-C&)v*<^ZuR|!qb4!X|cbhI1RsrZ-v9{5`AZrFih|HUnz!rL+=$YTW|?G~VvRl{Yk z76$lsAGm-bwVB{FQ3vv%9SV1an@W4RUzWFhbeKEpynjD`C?*|U7B{M3cc?(Rh_?(a0Z)Y;;G z0W+x&jK-vYZLz+5FI0sG+poP2@Zk1I_Ha|up(W-94R((aZnK8uHV9wNlJHl{+Fw-B zAJa+3)~Yf-$EhLSweATY2%cq=Hc#GErCS+=Hhs3YtYCurL-vaWJ7{b!BvexH2c(xU1hGWBZsae^cN z8uk7m-((Oqq?TvqrTNq|nO|qjyv~-clJyha5Ma426ldj@{&tLw*_>2IEyLit{jd04)Fj z03}fJ!CZ;4;! zS)4GoxBr-vm65#Or6g-lyfm!C*e9xgLVa&=v=)hmVE^Iv|D)2QGQ}?FPeahR$lNEl zA9IJ@+cY054wt=k7SsC%Ibewag60)%53HTkVh!5S+tXhFr zh=$n&hig(uM%5VZTTznxkz&eU6lqE@OYpv?%{}0#$*2Cdsh)fN3ADJmR%_~ixVYSnUDPFtqoibLEEQm?k&CIioUE0YaN2^fVK|(R=aqRUO=!!bLYqxl_ zC-Snq_T3xM(@1{-ftUN?cE_-KV23>gfO0gTpt+5!FP$jyl=-#lk7rE2U-#NH2&wgd zVH6O4zj#9kB{$!LtG~>0-_>S+BB+EAGC0Gfa%*i~>va4C;1qN$nr^*bjnpIk#TFOb ziWQb}*iMaD0k`%9;x1pp{=$S2p^PeCPOa|r4{tjR!X#UNVT&>Rh(t(NmQV9dzAO+VQava#U3XX0-X41_z>>ZMt#-UPKE5$%5bI+Sx3hhp#2K2^@A#*2%mlm~3T zvjvvFr;#5X!#HS%8%R&Y^X-uF03BNFyrYr%gQrbx)<#SQ#&7`+%_*CM>bsp(?tB|A%B90hp)U^oNZwMW@)xmu64>DUVu9NC*2lFTvHra& z%b0lubUxn-%QTjzd4CO}?uq$P#qikkm^9HUiUXl&bY9ptJ+pFu;eo^&x5@84{@@xT z=6N^>mC1rx+qmZ%K;lQ94qJPa5K2g9h`mWa=~l2lP7l&-T9@KAt+4SI=tI38jM?oV zI4K*=VRCQ56n?C)`!#$HyudCIreQB$7--U_6#Ql6@1r1288{!Iu~5U*T=QC^#cBaF z9ae%h=>bRd7O6;oLB+tgzI~GaO4~`4O4S-_dffE6^ut`Zbc3AWwbuvJfS@sm3R!aV zLD2s1Gmf_GP$ubo2Gk77UafdsCZ{1~Ig-$q3tW~0#wHI7dBk!*gH${drQKbGWMXMO zGUBGmj)a=hhU%yMHr5^!^7R=$PpjF5VYFIPxQ(o~tI=71pF)|Tj3i%4%o$y{zAuAS z3^+;Mry*O}-=;;`!_zC)4JDSr80ns+Qw3{~SVBsZ==|1{dU|rHT^6GBv&x)GTOF8Q zoXXH&m-%0JgCUp8O*(%BO2v<9;5@O$F^r!9oBDi+lPM$BK0tf-f=atiJU7U zHPENVYFbQxF9Fb9kMrb!se)hH`)wQERmT+D?5>?FcSQUZu}YF+1Zb)QzS%?HV_4>A zocZ)%d3I8V$Y-AY3LPUPFZ_7xths$6Y(9bj-CUN2;XCJ{=7P&W|GTWBc&kX?L=KF`WNVbV1eD{;^h&(&2!8GS8fUjMU#<^#o_eA&Q=6-ATQuaRD-} zeaTisD=EmW?49tm37y|>Wp?Q)ZGFbyL2OY>GxbBkHSCpU>=2huhtkrrmEhdda^{oS zQqBud%?EPm&Om|EaUuW^67v^>s>2%YJ7InT3JlL+*@8ft0m)-JuEESrH|oS);6$6k z?0q?ZY!8quwHR`5L`7)(ZjpmWrqq@K-7m*Xx;}qi(nl(%Md%CxzN-;SiryM>NTX?v zI$@3uKQ-A2S3Y3ZYsLW!!ZAtDgFeT`uQE&!9<@`swC5PH4dK%%Ighx_pN4*eO#D=F z+wNzyMC;=^{mgd!tx1@4|B#k-asT>V6!^V=c2Q|OA0>Ko&Xo7E?hg0#@28TtfdM|` zZ}rz)(%5b0#?Q<6tFRIz{PBLfL|KtBZ*&jk+eF*SFmruwqzR}E0|Z&NLpqNSntgcE zr&WtdR~!O8W1a^XNvmYvc(R*MS{NdXxvw!_D(RO@L9#1z1Yo57dR&E|d_S<^2hW~= ztnrqNo%haUT}!F%s*@PQganQB!lv2bjnTIEb3ZBL9qxZc zVDKr1Id?hwv-xwjEM+fg{N$`e>wcvb6uc=3y$7pLGkS7f{tEB?%+(A#OIh(JLTEtc z9X(0~BD5$8-V`%}A6p~qft=MUG`<5QDg#xAFEUsNplY4hW@O7+I3^=2O!Ad~^@u^_ zE9c{_90)AMIc_+g6`X1OpHRNChtmekyP|?0o;(6z0f2EFUXwYMdHwm{fUoqf;2_G+ z33D27Sn(le{lo;D=;!%|sR-8?=N&Zs@f&ho3J0 zMAQKyS^X0)LdI~C#COq?pr2qMTwPn<}w{}f*s+1>c%0Ia-Fw& z)=cv5Haqx-jP0%>?}gM_(kH*h>yv zZOoRC%G*wMj}~zuR{be4?_xf4EPJ$-iYcxo?DoXSYvB0~*t<0_P7_a}&N& z@0YLtzqZ7fR+`{sET{s1zToo`1iz&wVink;pOni&5$NPzmXI3+xQ>r$`s3l1w;9NA z`=Ig0%l<`bt7rwQ+wU17gb0sb8t|Q;@C0dkHha7KDG?O&^(!5m_pfFZ3uyFa(AN+1 z!z!oXe!mQZKmAP+343Z|1GW7KB6$u{DHVe@i^Hu02p_9W&w}fJjMl9SzPNN(;?ImR zJNNZaEIa&B1AegjooL+MwjuMd-Kp0!Fr3Ot5*D}A%mKhUgcxW|FIy9Dl^E)JPj4r!QS!xG1|hHT%Bd&Ilu@P-2-BU9CAL zb@d9jg0UOfhq^P%=w3An)B|hNnOSuS;&yym`ra1Y-f(@+lGf?oSB%;Ml4OJ~S4qr} zB=kdrxQ3RCH8iA35UA*X|I%f3k&O2!hl$o~%5Op0 z;hWZI4VvR9s?6KOWVhpj)DHH};N%WsbogGO8}@U&f;^V~J&5|TXLwcLJaq$uRE_Rs z&Y0`&ZSBD+m>4F?sfHZ*hizf)1B%Uyk$Axf^=I60Ju0wvi<(?~>pjzB(>WdOdt}a% zneOfq{Iyemsus>iTZxO63EdE55w2$6RY4icTdbEP%EhO%aDJmA6WE?Fb}K&n<^>m# zfxrR2!i~(t z4Cu%l&aRuhH(_>e?dbE=s=sW-Zyf=Vt#~M_Pm>@Hdh}ZPEw$kM2vbEgbl7Sk>sb2{ zY*%+T%O2wfd+J9S`+0N8lTCjf+YU^nw<=W2LjY%{r#dc zJ4Ud7{5;X}U^$@q^0-`bL+(G?9jyzuQ)mFw2E>rk-vJB042aoJS+~M%K1dRI$gsu^ z$h^H+D2K&&a((cUim+d2VGR`e4F!nCX}2Uk7@z>zw)zrEJgN5uNdc@E2&__ljc9GJ z1OX_9Nr%mjk~9cEKWX)%gaSbph8;(X1`-*6_7eJreu=DDv@o8fA*#QJNV_GsI26xb z(X}XkO>Q4n>Ht2%d4BWpU}*Me*pedCUV1%Y`y7~&{Pbq|Wh($qU{~pg=nrJlQopq1 z`svffzqtG?xWa`PqTDg8ku!Sb4v>xH5WSw_nn0WdUJkD@VzpDNvuul!z19KbgK0s3 z*wG&lQ?aw?eNxa5cLL0X?Lh@`4+{%o#Be`$Aa2}`G zb>+(J(14_jMI)>bYflYY#3qh{kx$l~TpBXmg^BsD) z8Lp6ZWO-8yCZ_MLz)Bdyny9GangXxG)6CDwu6bjgpu3uDR#>KEn)8(j<_o1C&^nxyiJGw%dzU(1i`vO5TWd*2byS?up#c#mxJ zJad|Y3L9jKq?Hk2iSyoemR-nb74Dv!JoL8mmmhcvZ&_n2F&4Gw&c_(xh=Q8NucM04 z7YgCM{H#xyiyQLed`Tz$AOgMbd1mpp1zb>lm=Kv9@A)8S$a-3+Slwm%q%yY|1wkei zKf%Kl+{BK!FkeDqETN-sx|a9!Cr#jM!(hxxoc@y`Ge;&C2nN9qq<5k#!foKP!N`>N@F-S^a(}yjApd`LgI{xhDoJ%NOi#QWhXP+%7@gE! z$P&1=fvm|1A^580PP6c?^}y&kifvj1Im4k&P|eVKwZA6t7SlBRadaMAib7Eo{U8S9 zG$bQgGR(+1C*kXx>WQlcT1$PGbM{8@f%UpPXtEB94DI12^v3;w=Ct6PTp30TJwDL% zQ&%Ppkz_W1{&Tg;hHQhIL$HbJMECV;Vk&;*k*jKhQsc|IegL4l;{_eP_9yNROs?ZE zR%^}0NFcHV7J`g{rg72B~?cC?G&+?z7y!`^6-=`obEEYRC zhJFx6*Ex&cZ4J+V8A%w)F6V$V5Tv=ar_RY}euI~P(!6Q<^iV9L7QP&n;Dr)NwK15r z4P_Eu5jM}Zs^G(RKNYzI7KkOyID(oA4_0}j&0NBYT7&U8vwNM_p`Q`;g|`gGj$Ankh@SRG&~5`rg6Cr ztZv^Qkh4wueAe^Mdla-g#wsz?XCkA7j)ncfu9c@1i)}g(egb24?b}I*g3!+yK#(MV zqOr`9>s;Y8#16AfWG|G6uEF<}83WK#DKUKtEZmrZ+D2-693Of2x25%_0=~-~e zk$RW+g*SD=r=n@uOw=0t+Z_2~*+Ws13#HP#n13sLbTjEz@bGd{rb2iVnqGO#bfs86 z**n6|4?hFAKZ9ra&5It#@OE!(xVOZA4Yl88kvdtHImPrG?!1GVxQm{N>U`ri!IqR#4b|~8vbr+waOejV_4D-8B zcZh9VrHoj}r+ak`t$d)vOVchLjKMC`iR-ausOcp!G62 ziNeMMyd1ZtTRYnE+}#lAva#^3{kZ0O>7&*-O*}Za z2BCyU2*)QK$kKlv3yx~HE>#(Sg1dc!z>UQ7Y<~JR@#x+PKLzq}h*nkX9{_1*SSz2f zkT7h@vkLmw(RM_RqPHGRpQn#g3rc*1oNm?gnq-)xA-o_<>uDI4xOyIaz#qw3?Y8ln zb+c>!@pK0kZ@KjoZV&WrO6y?{KNyRrs-jdeW3eV!JC5B-cDD*Yj)y*fuXH0Qm+9IU zX6Sq71_kxM{7 z(3r975x9u_?QBOME?IK-=MCI!a4Q?`jy=6Z?E=caAWZha%Sjqz$fzwXNqCQa`fNcx zj{<4f`L3iPOc&(hk<%%Eq$7ZN!-u|b<3|HP;(R|!Rygu<#LqZwwwhDg_2$H`D&1HW zB^x79S&H?@gW`eU0l^a{%v|};XE86E0xH}iR!(2N$i~bmlvWO?t8zP*31Hbcr|TFV z&kj~jphI(p$suLg{mYHE1kZXd|&^B(BHfC(aE;0iyx}*6Ffg&ky ze6^RwFtXO-`zOWP{2dV^`i zV?6~~KGoug&o9T`~G~tcW&RSQ^j!1n5N4)U{MK`5?>48O2woB0OZus^gSa#*P zO`r@HSNuA+VO%SFZP+x(-}G;tb6JL7(ITA7Cx+ylY=L&6{TYv!T;u_TA*s^b7x`5K z3eIPvw52?n@?f3@d;@#O0lO#yA>Q6-dg6wFw%eh8uelOFWJ{B2glze8qwE2Hh8`w> zr5k?-W0N(1VbFeC!fq79l-YGPdv~uE|DsUCrp<%Y@6mmOzt4)tO&uUfSB9JjrM(Lf zNpm$g6>Cy&iJ;5J;WK;7LVZgY+1Iq#iC~}OA}`FJZsy1x@%?pu_)Y$P+QEoS^Q+^l zZ&F%X_XYJayQXF^wKnMh(_vIZo}2n~k63;h#sK|)0%{_qvE>eA*vY!Dk7BU#z-QG@ zF9h|pIFCD53;X844lna8mNZ1fxYk$&aE9TuQRtsJpRQqRT%Zo5ZLq8rI=bm6@uZVc3UYlQS5XCodS0v&wH_aLH z=_+dQg12cVtA$o9w2wN}+UKYWn zzaV5HqQfRzsqg&tk)?d58Ljh=FYIUmmH#S5bspI>e!z%4^4AW)2zP_?wjqlNHNis2zgG;R#k@7>3Xo1qVu){yf!tyf(_<&v_=R1u9nTt$$TbJ_b zpLB) zmt1dLD++628s@`Y@|V{)U_L;!oxiWTAHi?` zY!K^-O>aP~en!`al9nA56RK)|JLs0_m2m5b!Wdmtdi*8-^mCKP{n}=HAMXE5#Xv)$M3gNWP#x;V__LXOS0Q1`= zS@sqrN*dm4xxwlX>00Dd?D+#*XCk%C&S`C)uLJR@#%X+AKNWA~wca)!) z;u-YB?NAhj-ZE;hD@(bDDus#2E4ZPl_Xk25ruFt9nzp24HCA{^NVIqJKA{ZChivVe zIBIv67W{W^)-~^C{~C*)$~(8W(H5h~*9#G`N7?#AW$JxC(6s)4?h#T)Ep^=)Ou0=w zqEW3|rO=&n+Qn(<#WgM8fC!$qCocD%5Ns%apskMLEKAtDc2|=xqq<$BIy#j zsia6W5aBHTcTdBt7mD;$Feh*~mm=}t__^of`8Pz1T&Wb9PQ6LTVB{nAHx0f8-dBVm zG{QP|@(1AB6|sVUOjLFFwz5KhLro&`viRMStGuuyLC49P+@;SR{5ks1+JJ%@+M}97 zJFovjN~(^WO%e!82aY4W%we%QT*t?!f5NZq5V`_3?yP+W(Fv2OY05fW;cP!>o%AYS zSw5Z-oToE@AV799*-fN_`A_O%dpofCJU1*e#xbqEi;l#9MQ?74BHxHlZK!B>-$7kM z9ds_c8Pam|oN{Yc=1JHB%cjl(?MIdf`6_j8Ikm4nJYuvY36uw&)pO6(zsdMhvjqYG zu*D0n5BEpeqE+-9{&$q_^}b6}W^scQxTlF4BV2HnjYMSa6GVI*oh^$Zp-1CQhEIrA52+3Q#P=Kn|rdA+5fc?cU>_)GD`g9 zrUtundk%au`wZCeYU_Or-{}>H&!O{sk;~`z13OcHCSE%72SD;OTJe(zSz0AX7|eu_>02eeJ|fdYd6Dx zZ6{@zz^_UNpApH?;j{exS z#DJB5sVJm}q|<^1gi@IjpqJ1?Hfbow;-qn+CiX+v4CIEcQ%n?}oEmQ1_#7^g00*ba z2+jAZeH$HHEbz%C&lI#+!9##a1;2KN&lESALU1X~vo8Pu03P|Lf{`A7Ec2HmmtSTD zd*OIRlx75QqB~CgO`MEk{>8g|bkYH6lFy1#n z4CFg5MBNkVPVlr7(T233(fH&@Qfx{_!%j52@TaGTtP)ZCg($~4lkUAa2v18S_jPc8 zI&~_aofcO?zeh?Rs3ri$WXE2U)9cr3d~@WdWnC2$Bf)j8NnqSMsPX?G^mn&#OieezNhU!B~Z( zoe-3`?sPrhP)(1;>p(80I}H52bt=byX&?Zwu{_lBWT>1&EmeLmRc;KCqp|ANGs7tK zna9qJa0Xv&4d<`4?KPwr=KKVHfBP$lW z?V36D88lExf8oA7&Bp*v+1O)LO7E%e0ACMq9%vcs$%otp|8TJA@jni0%)zbB zC$A~C!ku+iC|$H5@X_^Nel_=hBh#ZN=Gt%w3yq63FwBAO+vx{!lpPuh)O;jO#0htT zGKGN$BA?s@OUbYMO{rql z!jTY#&~%!)cc`Rkg%nYJIyb6epTBb`bx){X27eyQbO$+~ z%-SfPIin_VN0{31Od^c=5Jii zfaq$36#XD-KU_j{mm>^+%quBb!6yy|``l~6vVBjqMK1FYd7^3TWolgZ4)<)-Q8fs2 zzyf3_bD6vwM@7vci74RnjyX7*NffMmGtif~i!-nK>b z<9~v@k8!mVvYnfej)+RukbJayxmJX|K0Fy(!dm?Tr* zGmbKw%QrM%m?4ILf0c22qI6zjTwuOFTS|@P+Yg|T^>K|x>@e|XaRwRw&~H^B@SKSP z>A@$cu`pa*9IifRZcK*B3dBe0C@Zgz?^J`R2FXxozR`VkSC9#4WXk;{A6eWi{Gt7n z%j5GznsoEWAggo@ar~4CGZP{tzI~f4KjSQI3w<2e{-KnAd7h~jzl56x==l6H*b(e9 z{_L<973V~lKPCLBJ#SMS#7x5$LFp0B2ML|T;3O!erbtWIAKo#NWCh`d>dgX(u3_{F z!*M&pU3KZxJy)R;!PX+PoL_pY=ban^VRnY;$LlHb{C>H#Z3fV}f!Y&8y9+8Fv&yp2jFr;p z>b^gmb5MU}61D zl}HmCh|rS0Sf<8}#@z#$&eNJW1Mz5}R26otDz*e|9%iuiNT}`?y_Aso^PLX??tnQR z!PxJA(o`fsu$Ul_W+N}00LPJLI1a5P(x3K~TXjK`dP<|mU;IckhIlW-)y0sg;n~xT zt#9IvtA5ZofueI+l|rH?0Z z(8GQ)Gfgg!W}#Eg?y(kh4l#lpdHb}>2arUunNJxA+JGY!RB4sl#A#B36%A=x9t(DS z{tDRY?&4vUWH>(a1?*vH3h@G1D{Ukzgl(!c*W|F7c3n1l`Nwd6h>b&=s6n?qC#4wua|)=HSfH-=W ziw!{CXV1M3wm^0x*!c7*n&gWiI4c}0U+|Jaesp^Fmf2Xd{Y)|mH}f)l%Aas*{T}>X zvN!lyzlB13SmaR07I@0PAuYa7c5v5!@Dl!mww%1#VHO4x`DxchxUTuQir}bzmQA_` z-?_&sVULQOVL%X;PSbv?LezlPWbE@u1cnm4Mzt7qrxH^;W_>o4{bXm1SG4gXWv&_~ z3KX~Ag^)AaYWOSFay)$kP+2k)-X+M{6B{85nWZp3*uLm9#&tYzb)CYykUJiKMpF88 zs1As>gJnWwa=3Q5ztBKB6iqDX{!r!Jyezi!Q%rS+rCn}!wYbJ#q{IzT|G1QHvwVat zvL%PDw0_?w2n7aekMoa(>NRgGESlBL5;weqy3~$N>J(aSo{_j=BXf4V@}~^0_Nm)5 z{?I$HE{&Y8vh*^St2ZE1a&gmt$7}~O@+WvmwC;J6POAFMCDq;gIT>hcO%Dw=`$UTHK)5xcPV|4`?QGVyb z4LYjI0KQ|5 zDLfd~J4zvv!MDFctL~0>hWWYPHGKUdCSUzbM^DbC+u*sFM|*`8=bl$XhRp8Sk3ool zdMKvs_>{PHq$2x)PIzR0b5E+=vt`w4rIu}*l_7oN+H|wA^ILSQnWvbT`gLy0^8yad zRRv<7%g)RLS6;@wuxUd=%+=(l)tJb$)q9cdmkUuIYS0>tQc4T)Gev-*nOTYa+yO9= z$UYJ3e%@UESesTgMA9@#b^?6Cp#(73qK_lg4@NIgV)^d#kZHGnDUMO3+_IfJS1}ZT z6)ro96hxR-hgwu`7zv$YQ;k!PuoWM0r@uaqVrskDUJJgk4&CCX;CoLS`tpjY_ETRe zS&kK;@g!ICsdUe$Aa2j|dk6*Xrr>Y)%tD14_#(oC=OYoNY72! z7ka&HQYp5?SI_f*T{sjVo(~YQk+$`-Pw!8elG#%er|0La^ga{;U(r$q&=wo|dqrHN z@vI7KTk{cW41KDxX*>s}OjCDBdiFzqnt%~+MQWts-=e`Qg2cYhghd@jqSqaZjleSX z(e3uJKE$tj(?DaJ_yzxi4>Q4dcAH;0QxOo`-5x%2>bwSjObdk!hl{3e;>_R@ARzy| z329%0M}vAdXQad5czb>Z8e$rWJVr}24Cu8maFg~hpnqVj&cJm79#mE7g@(I?l!{`~ zaVEqF$hU?bM_HnY*Njom|I2!2I3D?(pwW@}I|X``+q1#vuahA+Dhw1`eDycuIR@Qw zE5HXKC#BGTBloI*x1*hYInF+WhACMwQ`b4nAZJoPh1)qvU@}ClM2K@^Wb{n5ho^_4 z85|#r6DSRlX}+n3MGuq373k`9^h-Y1nBjTQbs3=8l}5j&pwuVlXuR>2s)_={$P6Y< zcG5%XBMBO(x3FNo!P6c05Y2CZo1FlAz1%|!dqJgtGoTw!g~!kmHP3-WI>ST0*Wzqh z)@bZ3Als89`}lyi6Tr+4%xF6w7^va(=k2-b9kn+wlr5g?;~ZSI z&F;}hg5Up)B-{5UJ2`zQ!rH@Xp#VL~{y`kgv|(CjfD?HAA%9vQ4`gkSciLWiwtFOR zR$@$lvVc=xSH!Iwg-1qJh4fozgf+Tf$B-4AOYOb~|A=(AAA+l0bd z*c9(!v7cnzM7DBMd3oOZk@e+*_tYwA89zLQ zmL|xqC1~fMG5uYJQ`}siO-q6Nr7=*}&=th#=4*bA+<4IY2fLU*S1YbPH|2xHUKV(N z#Z;A)Cb-W-(Q;_Y7WDi1VT6V?7aTb7hAyPvJvgz_Y%XaA*V17TL81S~=hf z4>|z|lSm;-C-%$);VM?9M)XSHX;7wPo7-lvq|%p%At*R>w9+VZ>AsjIj<(T%K#t3W zO;9xpuc3Ox5T2)LDv*+V*6Digo`6y?2vZ-w6`mBQs! z`eNMuI&>f=5*U({Sh?@fqV?B3V-w#q-dAV1h=iRl>5uXELJ?Q?5n$iw-RWR1xTSgYyG&y>+epuedY|Ao zqVALi_CB(+)O*0?pP!iwCqZbSK(nb4O4B*;8yIS;8L}Wkxa0Nq!LICp~zelwS1Pc1x})D zpTJYRQsmL993^YIn6(S1tvr(7!%Y{b-2AS9lIDIOw-ejSLZWI)8dG;)2^ z&s#iR8IoXINk4$##9d8YpS!w4Nk)=pF`cK=8BA%7rW6V4US^$RTYSBN{nMj!gi5GrYZxN=`pVIY^fqVadO z5utxZVchiX!CHgR5^&DiYD||GlV|lzn3Eb|6jU?X(j4;C9Gc}=Zhu@uQ8S?g5$ZDe zqlW>5304q<-Oc~lfMyW=aa#ksBkcuKe|umTt1HRR4@*j^5xRoWq`tIM@w5@|Soq(W znWkX5)@2NIia_>%LTt{(ERLt1PmT2V6tX*Qh=G3x&H*s{SBA^ndb8h&Yq(|jim5&y z3JnM4wK8Rn_M6*FPmD8?Q2Pr0q`M`&siYugBXVtfuQ0UC&F}avg*DiuQ3=Y`Zju-_ z+pk2tXT{yk8{h1U#EH{8CVnJTT0V%CY3dW;(=)o`QiceB9$hGcijg9I#2?{gioHwG zBw)9)Kz;Am3foU$8}`j))1Hzdaesy5tJgDb+_Ox6kZ5+X>J9lgF%(cDCyeLevxS-b zXB7rlbJfGTOcva{KXK7u^9!OL)a9`2*|ih$F+{f+%g(32)=3+&=a;t|uyh)-6oH>l zK!^*l{c>4<1O*%eyz4!JUQhTzpGWMc<=Q@{NfWfk=9jJxm-3MJS0Jl15^3Sbhl6-Y z726jvTeUNCp1Z^!>=q#he{PDPID|K#Dey55hZ^;*F)0a7wA=VhWQpSE--223!pkuju84ug<53Di70xT zzKhEe))4t5p!A)a{CFZHWb7<%I*)DpuP2W(gYR(5dAd?vT`Ew#xqaBXIi)j|vmTX3 zI1Yh-1UQBj1Ft?^e{#eTtQ_r;;wMS!MW_7;-rp8E&Lmj)_xXO{E-&&nz-iNLWk;+L zv{WrL5`kcpXJhw*IP{TxaCsD){`O)FJ{~b&ZQ%TTtL8>xd1Mz!F;!uo>?{N`{N)i; zv$mgoU_J7B>;bnvd64ke#O92q0H~)RC6CwEPP#;zPH7!aPIkdX0MhY}cca}X#q z?cxftw_1_D zt?VoI8rs3-OV{QiJl!M=v6eDR=8JV`hbEHJMtCvtBKRiJsi_S%G(Uu_X!I=2aHMjG z90}Y)@NmFkz)cj5fYr5EPyhCvABJ}YPX)_*TWw^Ph)ZWUuoL=g>>1%_AS^pX_#&-e z*vBDis+3q!9TgL`Apsf6VW08nmfiG!PP}o?)XY`%`ze(Mm=B7c=|^iwg{HKwGDhR* zEUS|H(Wq?G!A=c*OITq;8XocpMa5WMw3wA{bU+jl%oLngl4x z3Z1v*^C|2kBhwxU9-9SzifgTMK|d|gdcT%F;XM}uryi_Bi3JD;w*J)?@ICtQ&8CSj zugdn-d_SEBIP3}hJShnPIHC@J9pvwMx`HUOa#BSSVF=Jics}k{h8Yt|_}dyp{Pc_3 zr2#ba*>r%VPz<@Ip+~v?cxCdMlTk;^)Z%%K!RVywGOsfPK72+?G4E4<0(&V_iF0|1 zh9r{i&&LZ+x%6vY6VWfKkOl=C*iTFq!S<`x+)cDOLK9UsLOE8GfAt=J)k*?<@8*C7 zx`Q{xx$uLrKcioPP40(waN55`D?n4&^`L~kxXPonj;Sj$(E1tLb zt6bG|#%f&g(P`tr?%1yWa&%^xJM&YFn)5sIby4F2skpJfNEv3P3#-4KF1f%bs!5-n z46BDh0mMxFxSZ{Il>UPOs>VI=1>lGhKNFD*8dUS-ux9cszTN_V_FITC4NE$f;JO(p zJTwln{dy=0UliS9i)|QtHqSwy$v_H$Opqg3oky93w}8n>{)(ogyHP4@zUi?>ZyqpI zfkYGV9M>e@T+v^ctXn#^CY4T`;yF{kVs{{htuvH>qXt-3VlUpXxJmv%hQOXD8qI^k zFSMhOdEdw|Hoks;gIzhYNq_rfsR@vQf#MxRnGR5A1R^={q16#mmkAet?QyIDIp-`+ zFZ{@)=MhD&`B=pC(3PMyt(V4Uw)P@QhI*^8 zdP{=F<4)vcIdA@Q|9h@^bZ`;Hno_cKesUwwSc>=;8Zb-E7_iZ={GIZVs)D6-4pK9l#XG|qzJXAm=UQ2C1eCN?FlP=|E(P)1_hxZ2M%Mpg)}gv(t8o3KZO?y%+VbFt>jtx~|2ed%bp zzhJ$UZmGlo|K49!uR)zR9}TdFAh@(Jj-n{CJI26&`~1dt^!{T_>k3rvRd9}uCmrIi1H`~CD*)S)|g5w!t-HXSkumbBgo{VXF zh^s3s(4`4!mP58gSzPJwQ<^-jx}~akNwoDk6rCEn^<==Bz@m5S`ZK8`2De>0)h+6+ zsh6*Rg^GXBR)xNqKqkA8=a80Nn4`qtb#GcAeK8jm_p8THku4QGfFISmC9!gy?W#BX zyk=c94{84(QmpvT1^_ca%)f0H4Qyc1Kgaa2Qk}Kqcfo2-ZGws` z?BWL{{NX^D>gn}Rf(p;4j>Zt^jY-Um-~wYZU$`7Je@q^~L&7o=@c^;XHEmi{k0h`F zNpY;EL-u5RPS&5WCj6F@_z1$iY<{cjnZ-Ow71Zv@y#ombK^KOXBXTAY$Ag?jvHAVX zd*Ojtoyqo2lVcL7lVuk)vC!!SS^MqX8l71krQ$sE>L~MVGmXcY=T~j~0;u@Gewj}o z*mRiJ32Zbm}|6h~r^`nVGhQAIRy7u<>zpwqqBUD?Fy zGwDOjCyg_}ECyWIHB7Xgj<#EH%50W%Oat}6p~Z>t3x9k<2iMa3z5}ASe8Dk%7kA2Aef1<|W$`V4wMm)`JfVDqraQgG0z(XW@ z&%op;%=WlrI(IEU>e#WUY7IQ|Y?cGM4@i^GsoK)|D}ZQZM-=R18`1FX;zmJNeXc6? zV(G-nuB@{YcS#LS=%DK(vZ8TH^y^_u4u+w)EIni%4+wE{7>~sHC{W*IMyKM(qilq4 zf0}Y8u+C)uhAk)pX#E=W7y=wRYi5qnKQ^UF2h}7oxeWFOOJf@mIkno7nS|dCZ5Lk+m&Wp2d zYT6lwT+PfdvXuM`F5HRArc>~zeiu%!e^n+@2bt8q()4N7ETlf;@7WElZ!aLT_-fDv zS@?cWTZu;)5Rh{~`peXiIsBgKYOq82>&ni>bH=py(o{x&_`VKo%hmafu%`~k{5emo zAS~HNBB5=TT(<%9izF%k+~|s~>GmMpQTSJ+7D#(3uvluTTN?f)wwZs z&MD(>^1~my>U(m${R%MQeW9$z_@8~LtTa}1OJXrU!mI;fs@G-olC=8Um>9b(HlYvr zF?AI1r~L-(CKHm1_}1AFx4O!!f8||@MGxrJiG)z*trfB%LHWEBqMiv>J6SzS>%z}3 zNUcLxvK<1J9jYsuU^XFdmYZe3VsX>p)s~#s%&-R+a<$O9adS_p&8s|NZD%l0-lxSP zf8@Kov=?OpW&e&sdH@I!WgwBT9~K9L+z}UKT46xSh~x8jdN>($B;qlyf88@93P9^m z)7xnQ6Djz&bM8rf7B2vyoxB>xS|D_R4zFNjM$6$T3Fw7$Bn3`ck zIa>E*7lK+g5vw>y=^!RnlO{i}^PpBh8M{lNKLOs$_`GMY0N`B%0dXp%pY)9Dn?Pq~ ziVCa`uGm@lSQx>yr3Ccse;jSHlatf+O~%9Wa|xqm=0-Lh^5tg7jv*a0(YF)zIy z=A>&m6bFeD3_5&i5mSuW?<)l1w_s0Apvv!;#2{`6_WC~ZMcG|Re>kHR7-z&m@8?7? zkc#}~8*FRE=~y;5+qCOHZ(Ocf&PRY#j)0%0FxWGp3}OYOObs;Q-TCZB@l3dh=U98< z(Eyx>q~Vm#F^DlOpbW6ta<0R`(QHFmQ)J9oeRgY?N7>xR2*MmzY3UwiE#(ggm*~H1ML|0qma;y z3ENF2&)ZM|Fp%6Jwl;|0J4*hNndaO$x{Uf#e@`D&qk`@yfBuLKVoC=>)o!W9;ZfXs zJwpElLXY^(byI!s^81pr&(ZEQ?eY{Q=OSPMX0dOv)HeAO;kFEfLjSaT!Gn;6yn$9a^-cBuoK? zkG-+EWX*K_VSkT(mL0P(yW z*G@>8k%}|qD7v);U$FE`k+x#sHt{Pn*qh>b)3! zmq!#rBQw6AI8$UUWWV%j9~r7=R9n%ISqvqA7uTWQ?!=Y-T_fflA3}bS9A|}i!cIK* zVFEj}>oSaPcPE+2W>W4gy;of7Y@Ohw4{`-|a`?S3KKI!rxP8$-k0A5o&jk)mKc~i; zK-zX}Z}UuRzBU#2%s1MA51Jy{H??o5$M(Yo*jrk5oGE`oI#hSxUDK<+ilmQSuni-B z;gMP%w*5SiiF;t?G^LFeuv|3?$e_2Mg40`j@6Q&#*XOD-_vK8h5IEzjt@7VBY*zL) zr42&-ssOyE*%PsG5%%>FtP0dQ>S%_ZPqZQtSNJkR>WS9y%Y1?R@m!hbqN-iH&~my> zAEMSio%y^lpk_IQBAKm;7-|itP*Spg1`)w8Oh*<<`ybMei={X@noATZ*L$G!-p-$d z)we)>=;@cT%JzVS+%wG|-~S5sc*6%5VD&s!92U`ad6;EyBXaF$OY7!b{K5T8FqOsOT0s1Z1V_zDf<5H*Sc(fGiw|A>!6Dh z@J=R{iVw<>BEdP~=Df7VbkPiI|Ees@_&84a{#Wt`Ac2t*3KHlaMdz{HAP@x658^;h zM?}sU0XK3KIe)$JNmW+ahTWO&*V3{JysF*M`2}Qd+vYZg(}*9|y&HnU2A73G)1Zmh zfR(g070w0ogpcm$ysAcj0c=vXbpYkghZE>2YbMB{=NKFQW2ml6Q0sP2Z!)80(J2#) zzBfH*GRhktCC0y0ONDN@t+5i+a%MtWr=W6D9AoJc?J8Jd%L@{p=@_ir_{j6cUDQAS zXsndTB_Jm;Z97x8lq`?=I8+!zj%)eDkayL3KwEY11)1Iu8(K<#hF-*{ZOh@?Tpecq zP7;@=i7%3=R=x)}_A&v~1ceAFD>HQCF5_WsZP>Y*wWjRCyI!~1^sDhJO#wDwx|Z~r zFeZolv}t>?tz3%L@c^4?3C) z6bNV9KBoq2e%_RS7_@gNh6HpOXAOnM@hG?dOuIT!S8=~MlpxnqO8QDPz_%3WB~JTs zi<%Yu6y@muKRO{nw_b}NP(r|UP}SDS?g-qNlKvkfb}5v#k%J2wB7lf?rgCEnpyY4a z;fgQzkf8G6YG}jbF_png?HKBp4(0Ax`X%O%K!hgxpCva)Uq7&;LRPk zhc!zwo3=!^r=rAod-D>6V(H=E0C~A8tZL~;V0}ot*^S@h6RbZN0FPA7dhj%J`Bl=q z#pbO+R&%k-C>-=cl|G-yety#ep>9S=m#N-&3^hC7kBVh)rH}EPF0u!v?mX$teJqR| zJw)=Y;<0~!qt>=fuV#sw*oz*RQpGKJrq>l=&tHMl*_T5$cYS8JN^zJo&I$TuXDqD} zG@4>9r1`M|2LnTi-ww3MrDtDcErhNN6$*NOXC74A0@o1o@M3HBD6gGliet)@X{yAc z{6q zkZq`czgP@@F|fJ1hFN@;+#;?0<;3v?Qqh`iu+O*vM?0T_+p zzC8zhSg(y({Qj!PqN+IBK*cgZ+mT+zoWLP}mVCr$xT$?;^lI}DGygcfqF&Q*-eXk# zARD&hyvtKk$#{{|r!XKS^|EO}i;iN`9pY;F9=mAaD4WShlKy_HMJLIUv*yAK81yrL zE<`qEOJ5yda*Rujj44EN6)1kot(&m}@m&3!7c-2N(E!GWKu@TXKV>B_|BqDwDD#Pb z3F+p&G&y!cZWY%0Ai?L`!-@YmFIIQ`^K1PI8Ixw_u6`5o5H2{P8|V*vBiK8#h=#ci z{L8NLi1jt1pTm}n8xmf`nfePf`d|7-(2YiDUrWz!It;Y=OcFwqtjGnRJR{A z-{EROsZV z!-^3-<3E;DHzjyV(BesgO7%@0*<2}PL;LgQQH=!I^Y^?bXF zV&QK9h6|C$`5cSfatMGhoI3S?rODY#Kpl+SCQ#hZ_bpuy#M{cB%_U)|m471YwLBlC zKjk42ToliFpS;95afbI6pQhjxSw zkx;ZBj&*~L1whaktOG1jGYZZ!0n6h-^j|bY)H+X@7zo#RZkwT0+4P`)@IgH&iju*U zKt#DgH~Uj_XQ3=oAVJ@!8;`V5fke?aV8aBVQ?Xqj0vP{L)gfs7Ai?XQT+owIA?rf4 zJ5bW7PI{St7)C&)cFmUms+?Es1!Ay+6gwJ~F0=yCU}?n=y#KBN0!q}NZ*n&MmQLxV zTLB^Il0Yc|t|NcHwaIaRp=(;N)|Sl_U-U2@iRd>TxD3c6V>$N=`@G!ToV)IWC*K&J zN%@`@c|CunbFXyhK{W?&{1`Hk9-Wb9Ehra)XN+qa`pA-wFz9}guTaqbArEBPZ$9cz z61fsz2n08B;k;Tfy`ls(k56HBAWz@_rZei$EbBP^{%V6{xn>1_Gok7?cmLtv7fWqc z4;xy9S9niQ+glyAkye+7(XLU9;~iQdfI9NwV0V54!{}?F_}LViLMoWM%c(ahmp=-t z2ZH8#@d%-$8|Vz%FUYv;tlpZPW+B|{RSev6m3Fs-{_zhCtZ#-GQD zmEhMu#qM8felOX7mweT6D7{WW0(^Lqa4t|UtPR@U_n;r>+}cgkTbWy| z7q}zK%Dp0wa~tK69Z>WicU&jdi<67~_#od>McC1E_0lv=zL)IXfDeZSJx!H|v89_s z%N+tZ(p4w~e%B>yCumzfRySymC!d&08%Htd_Q%GwOB;HBJO&y8uxCut<41q(53M?l z>GU)H@mz#uVzx$2Z{Q{9EIIf8REq>IE0!Oq7S8T_F>n6ocaI}!W%!)TVYJ^DvhWo< z5zC{0osFpFw@TdqT|TXEdOp72X5Vc2`4nC-FcjJMvZShQtUo1)#Ef)mA-ViuX>(p@YpHD&J#ZZ9x{vTzh)85zJz0p;V+cb zGxH(pjH@<~{F!IA&XCmNgL9_m`V(&+PT=b)-6QpDk0#kG&KhOIzE+%N3d zN{BXilYgcE+$)17F^ek~w|z9I7_;_=nKVe!U~jR1Ul?~j(8`qdwp3-#4T)II4|il} zc)|)S7?mwiwc|(txd^OF!9ZMRFBk<;XK9?8mSl2hFl1iM7}nD%)pp4E+N8g#F1`M3 za?w$#{*Q=%_zmB`OCac?ueK7@n3W=Dt(fM4}yM|K~XXm9g6d*9<}!J; zaodhnHQu5#Ten}37R3|^FPQLDzHbmZ_7b#zcD6$cb|T$>_l)4Uw=Sb!14Wo)cw)u==hvuSx_W1TYd5MtPu0S&2ChR8bHMK1&IOd{t4~9%x zR{yV*$T0aAE)bpzU)n$m4Tkezcy^ZTd5c>s=SxTcjvZ!suw$)p{K~nq58h5v7zGjr z47^+1@8;wN5#@`=cD5RzwW#9%1-CyXjA6H`7k}(OQJ_BkM5kNTfkmqq6YJi8_sO~z zkso5D1WaSQk}r7NTx?j<_jr3@u2<7z{pLa7|JlIW(?tJ}!lSJa3VsWp>*dMuQ*%b|(c*Y!X;es@3RqyfY#pKiug-t~ ze&&gaj^xLObykqMlJLTQn-7V9>dN3ds$X71TtKTHb%Ky!Njz12N#s)X@6Td23E(b% z8Zlfmle^z6CxH`m)?@oio)CoFX52lY2#51NOZ6Az^pYJo0H`>e`{7bmLv-B)FVs!M zUREpP3O+|lIt(u2+66Qq`aRp+x$6GZ6>mdfMVLKOqtJqzZ7@tH_()fOu`i6mM3RRa zYhuvXy?Uzb${?_}E2WZeo^R>;*A1+SO{UPz^!`!&szrj65x`-M&5ydO_yU(-*k7f& zF%iUw^{Rw3Hrs!~o3gc7m4W7*qB;zPYHebsg1BNUW%C=c%vonp8*X7|sO14*p$A4A za--!+eJnb`SL2vI4qSYH%c0L@Jz}L>XbOj)`T>1Pm1D%uv=X}SM6*0soxEmUJMyk2 zLZ|2#tZ(O8$18FZ+ufXjZ(MUfsRH<2k&(860N2j;d=_JV!5d=gN_%&nP7Srp6l+UqOlAxR()@kAZauY6-F0LyZ*K=hzlQ1QmXs4!=K&C+6>Nrzc33X(u{mON5H{R zp#;LT4T1&Y4$U++T0PJg6?KLLc;Sf#1&ZgyUs zvw0-Zvh5v;TNj?w|eu)LW-%r2z~ z4Szd}>VxNyU-sZfGg*9A(sR`IHD4y+gTpd^$t?4|1r>;Y)5mAQ9)609lY;K5sf-JM zh{G@$lL$>!9Vq(!MNFhz zB=FmXgw1cs9{ z2G{vs->Su^CL^F;7`iu{bMa)sF&P3acs2>Gsq8+``C`owX;lq5g@l#{0$cBwsdWl~##NfxsQ5Cx@vW(SC zn2@RC$w;m(v=#2J3y%~xsI67&zs^dG&lg&sm&y#Dah(<^OafFp^hy+@he-zw+<>p1xdbt9>o2D zsPy5O_8Pobgip+YlB)6g*jR{$RkRfyC7)r6)CENAGk6ggoV7adnI!V4uRK2}P746J z>aP(OagILjF;R<#o3IR^ zHnSta{@-)95$u@NU}sj6G$#+A3d0vzf2DB?`-{i zH8!OGwLUau)GaIvi#-}?2*F=5PAxYel_$j)f^L6}k3?AC+M3QzP;qdcW~{BN6R-AkG^0Eeke(^vH21o;+iX-M9EZ znCL-bm8GRKVky~6=;GTyzdSC&=F5eqX>vv=VBgPY8|gh5zRYKsI4Y9sntglvpr=%n zxz`$>ofzJzHaj+-IRk(-q91R^xaoFX?h$>kMY!cvBd!VB=Z7k=`dVpWOzA%Tl=Ey`C;Lu zh9~|7pl8t|?1~|bd2V4z;9q7v<*m+yN9mgS$734wkqgJ=geYsd7eWHV+BC;h_*0h& zqMy=z7!z^8FD46v+57=t%7v%oGxDsxKp1KI0NXc5hdF$IPDY8Se12b&+L#T`A|~L2 zjVCZ(gCMvLV{C!BLXd3|#`Gk`;9IOKF)gz}#1}AivnheAkp!~%6Xal==z`W1dW(Y* zk)O%-YD6U$s!Q;9Oyc%iGD7U~jUpV$m79kIj4({Wg@zN4?W`vtvRo@b$zT%ZW%=2FU-xx zHo0RCq=DucKPqk7VR8@tt`>%r#mV_$N!KgKKR<;;aA%yuM9dD-J%hE8C5N+3#xFh; z?s5nT7bxu8*KaoP!k74^3z*<{sZXb{vYP}lsCOCb`{h#gNucPpYI5R(H7)WO0e7)8 zMS13b#UeHLl;MU&;PR7bplI8(^Tt?T?E}obj|GObp#v-n&WvFJk&A@ZXnKk6)R8LY z($Xt$1fB@*a|Os@Tl1Lx>_=j-qv@JpTSaJ6>1AV>#$dq@aIuV;TsRV_68H^!#tg3* zTUmXXMmA#@l1#zP5IS-|DTDi@}Qv1q9!U@s8ZN74MH~K2*?D? z-_j34@K&;km8@ZaIt4>tQ`yi)7>QyL#F2U%VEHnfsA6$cw|XtgtPzzMIC>U@qP%!b zy?bW1yWhheC5z(5H}%5%t38Q zuDZWe{wpJF>RoXqUyV^y(GTRNjj}&{;vDdH)4=DH(?R8+6k^qTS8I*MVp9Ttonxwi zNJFvQZUN_;f6X4v3@C&iZm|)jk1;_lW+`xJ0V!?!VNKbaLb;rqxAlFxS(!82Y)Oha z7U=A})jfvo^sYd|sJL9A(Wj#WgJfJ`Y$g?euz!#+`qlZMi^D)afU|9g?h(vtOy0M* z$xl{_avZHwCv3yzIP@|nKfG;!+{jnEK0Vzob6cfL3BAnkvsEBi1V`Z{x9gFwDb6g*=e zy3i(IYF(X~llkebJ`_ZMw>4%wtKUntvU_qo%xG)B+ah5fGabyalH##)b`y}C4Sq!B z3s+j(bc(1km17O!N0f92>6LdT-o%mco_dUiVk6;e=36Tp(+|>7G5LUK%4js>oyZ`H zLvQI!5v`Wm9)MWbotQ^|7IF_JJ63?}c~@&V5@VZ%twGY!Q3CtgkM-A6_~eRLUh-khP0W16g-a1Ym_{p8>Gl$TOBFTlTywQ;e-a~W zyh-RXbkz#$mP|7B#&;KeCejC#^`fZR&QwtJ z^Z`hIOQ87EQMayt6$s|OvV~Mm$l`a(R_s?GQ?P5~z@%Yk?j-3tHN2B!GqKYwq) z#>0Lj$W|yyI5daTc$)_@a-A%2%&RU3ZQYEhk7xQkM8N@n8n_*!zz-DxVq*05d?vdt zTeGnpDzszy#XZQ_Sr&Q2Zr}Gee^+Ipj(c+nKj4K>mI13+mROwvh9`p*o(wekhOm!I zr1=_p=cxlVb+Dc2R{Kr+hFy|AMSp#O!q5C8(OM_X_~0oS&anq2Vc)U3X^*rA_2xNt zMWp~dUeE@A_iJJ9U!E7sh!k6zje;~Fi{w3_+Ao7Vk-wZ%@r%f5Ymo^1L~kYkz~0J1 zF#rGnw5<$d^OXTJPZ+^`e=~(KOS=iBT9R1Sn^lo3OIagVAWRl%6{!CmZ_cQ0a!V0R zOd0))({B*Q<>R7)E7U5DR_Ko27rQv}VzSI62Olhd+?{?SZewZ9(Gmhb7*Ka$=Tf{3 zV`(-M-S{QY?!xMW3OrmQq-F^VFNzwFqa^KoQHRMSYeY_Adc z{|^Lm9d3=-Hy^b{0JP-`ic3E$ccL;0gMMClOJF|^%ul(CL-90^QXAx1N%z)kndBx~ z=Vz;bD39zw1KockTybnl+e zpgLFjb@CYyo!bGXt)_>}npp_1%x2W-35SSJJf~H0N?~@0Z2O_oJ{WMq1hmxjIxIJt zh1E7G`~`4Unpo;M-S{HZuI$TXrjsKKmEG`vWcDR3ZZ|wg$k6B;2wNe>j?$O{t=F_y zo4fwKXZotX49X;rrW%`fROF6+ifsAFpK0FCn;stF_iSUI2FT`j$&R`cWsgM8TE+=T*}J!JFm4?UxBHYP9%zds1VFt#ke-#BRgNTz>!D;F@eaT>F4SR5hPW+ zM%8W+&eN5gJj8y3OmC z#HW_Zl7JTB=3D(H1Rz9zd-518`5+oIu?gB zkIfD`g~UMhs8tFPa>OWd1GstrM^dPDnS85=nA^VbtB^0@_y%Www-A_?gGA2Axmn@7 zpS5I7>Q&BL`DNfLLRo7JfB#Q^<)dN$L%h#m_{r6+o=fHGE22F1gRjz>+tF-|5*xb& z*pCHSHqn_zG0r*B{RIB6Kj{p$t`28j;g5f+YnFEyI!g%f5W}p=$CR`_XDaq&zIN19 zUj&_?z~WTJH@N6EfNDB_dRowevZBqEYfS9scg`Xz*IdPRQrDj4<$YX#XYq*x2`5}? z%MI^Mj6Detuc*{JvUSq+;FqlHGJRg`jUgY#TijGh0_?3*MG15{{_Gps{6c9mg^%GH z4`rCyZQfyB6kiO2!NajW~ z7}S04n=#U9fcrPGcxZ2b)(*7a?r-OWW>pVxH<9=o+_BR?yD4}++}{lLA3S(y13AHS z(b(p}lCuf`a`iI@(W8Fy2vH*au|TfsKLoTh$1vtU&aBcW#v=PvSizleB;U0U_{Byr z=@KUr_A>2F(GZAPhktB}+-@@Kw*e+myyk5pKCcho1{H``{0QTJn>AteuC*C(%WVNW z-y%a)qWy_Izm%L0o3Fp5>O@bPH+Z5eSLJCvO>QCHBhXZ_?9xzza-4}8V((ZZu?aD3 z&r}+hdcQ|*yO)(5Z|wD7BA#ECEkO2s2uk?P@^)RKw6DU@ImtcY8MfT=57irS_?j2) zQ$7EA%ESFcO@E?)9=mbehst431~YAXV$+-sZ6v1UDPW^lPE#ACE4k6}%&q>oO920|%S~M!PQ)RKnXt9*;GXB+ zA|)+tmTD8&M@21pL>lu6)bXnP-V*5}pOOnOx$dJcBO&Qz)WPOcWj-M4q@ z%>SOf4vzq0(nka!VG0gy34i7>r2*adq9c7he zS62l>Ru8X(6r^@OyH2aMPvEeQw)_Bnc(9sWwAv5p&9)YZJ6Y=;e)q8v z&t=oG=%t%yJVII!_G?zrfcv&~z;mIR#=cS+Z+gS={t&k@+1ZY8qkqhXRIu^FZEy2` z$4%;ZE(XR$O)3t4;pOoJ11Z3wL`hMtiNkDwhY+wmuqg^z5^wSmll>48DA!!tA$Q)O z?;R-^x_Jptlj?YB3`D<)VP-z8oeFT3OdqS84dG_{U?LF1W?>i^$r!oY(f{IVbSqd* z;Lc4#3cWufez1J)?7s&;oYCMQJea_Lo2X1e{l*b9-xpoLdk*(FV>L+PwPKyP9|X%4 zK!HqyTt0#KzmY@R(VzR}8Q*n(pR$}JY?e(!w=QR+vJ+L9|7{kEXPKGR{D|H6y`9LF zi40Iv!@%-tF|L<9 zZRM#l3CId)H`tr7CCkI;sZr|}4 zabo&k@91MI`ufzM;QO7!Qa{>T7n7(uL3oro z#J8YC1SSIb=;v!D#m@rC86;g8q%c5~q-@`oZ-IxS#o>{W53gPn1o@nu>U}>Tm8F?)}~7E|MboYdLzix?(gQz@z*PE-Mc}gUkp|lA2s>ZxUuZfQtTI|6CM977YC-a$HeR0sZE;@hy zl%q0|cFT$C)kd}-4nN^ATytc7Nnboa{&eI=4E>W`b$Q{;8ISLJ(xRE+1zr6pb`Y=5 zvkt-4Gp|8IiAt^neG$fkW;%w49}aw@-|bRa0fMI=ipK{IM%$pYRweu%>ho;&zP25`?wrpN*Zmz?N% zT`mKUO+Tf7W`7p9bQGQ9J1FD8p)C5}k3fVs!&--S<}uSYW@yGot)cxJDxmn6CYiM5 zk%s1Z|0@rJMbgG$rh0(5NzW?VY1l}V6kc=Ui$|!M&~r3Es)nr!wy_sZN`*U9o9NgG zT#-a=g_k&8EDFmkIC9_EmzQlsFL^wFh|G};YEp`Sde>E&k_M)oV8k!oqHxYRqE`sv zq~CYYZTSdM;KrMd79e?Cs0CP0R2t}o3!Vqwb@Y*-IWH?VAZa+#(@cU|>zAb%Vyim@ zH|7=n&|ERbw~3wP1KFQ570x1TsL{M_c)1B$=%LGO67>h{tt;^IfauKhDU&9ThT<2a zV$FMhz*?S`mY{Q)MvX3wZ=vps6yyE`AAn6mtb%?hNZS@FHx6YTNrp}}7gmgIf4Od# z`>Jyuw?gxMyW{jqKk%v&njZ0v`zpJR5MXibQLRB7|I+}6^aB6u19q1Rr2_?Y7$kw< zB?c_so#J);{Kh}VW-~VtE|R2WN zZF5`k)0Z$2YO}a4;w<+@WM`#Ng9e{O_D_@#+r+%8DJ`_uF&yD?V~11cu~nOdiW<-C zENU+ox7wrpyMoH9K4}c!c)>A$3ftlG{l;(NgEWm;p3G17wFNv>0*VO}=Fw zE=3e8uU~9sk~kplk*y?w&PuwdWMeG3qIhqt%C;ZWI^WtZ=uf1S?Pz>7sM>#tK0{iT z&o>(;=Kt4?=_S5-20VlTprlA~m;C6A%DN!`CU;_gUnt|khhpF|(1JpL%i$m(`s$k8 zoe~w%&KEMhXqr6-`M!=ZAIPLL7@XF}-0BXRq4A={v$7Z27vMtL0k@}ekx_)mT_WQ>z_@rxZ%eNI72hdeS8uYbwqfh z1-UT@^;MmQFdQz~)}MZVGhN+(26?kgw~<`ZbvS+Em^c92nF-hALZu4!HBP-8E{G8q z0G#vngy!aRK9=cBI|P)(luI)@+WfFDuuZ|HotV7iwY8qc_{K7m5jQzfIuMb~;GGI` zi*`4EVPs4m>)3wW(V(_fSMe{tlrHE?O*}^gGo6OVs^3yAj)Y2o+jfD_B%s!h>l3OH zZ`rYb9O|kYY!Ay-H4IfVk5cs;hSbNnN46l`11V#7ab*=N)YpW38$C_g)YJ@$HBirD zho)X!=(FDq?W91G^_s01Yi>&m)7K^{xAxIHpTqlau(!u?wSc2*ABaE>#lLY zS3QZkMZ0NAv{QPcpZU3;)A-pfsqsvVjILLXSX-wM5-p6|>wY_{Jh>wR*jIA1;yS7_ z!)T-zv_EFEIYraRqVF&5mAKmWfwXqMi7k`8degZ$Y}hNOdAN91fy<>{KO zHTx?Y#b)_`0Jg`jz86kmx&8=ENy2Ig&|nfVKU&fEhr zh-pW^<@`cCdZAhSKhD)RLSeC4(zVzk52R-dtk?*~NrFz-@0R=qsMPWWfD>tvStVl4 z@EbBeKD*}dKo5fVsrcj=WS|m8qlAMzby%VpgBpE*K=XxCPM%bU@L>qa1@{X~>2vVEbq82OtH`*3z3DIErh*JDH;QDLJA*x=oQAnerO>wm6c+26 z=1S-Th7&r_8pDD3KkEJCr#pI?^xCt9LI(H17pi`v7;|n(@KHQ_C0y^2SH)G+A~Z2; zuC~>GpGD z{6dn8ESi1M@2oZvI5k+}ak_}HPWg3GHG>NCF8zerx6j({K4vqZmeKaadf9fiFrvYt zSP}{krIssJv^16hmC1V2y&UZftS0`-ZUgf-UP99!5c6 zt#HJVoWQqrst2vD{qn^U+;C?&QI(L}ao;S zqyeH5cPtfb96Ik+w=wq84(&$Oe|ay!mN}E!0-0cW9(QSaH&m@KdmAsqq9n6uH4=2n zR}sQ3Ad}F#G;W__@03=YYYQeKGdevRlxgohM79v-CR#yOs)Fd&I>MYxSzlG*Z#Kb? zAu^lVe(cat;Cz{HyQLEE^(FM$egG|hSgcgFXhg6K?qoP54tQpAQ3o3#b~*;z7~Am! zS?_Ru6N=`j>gT}EG3Kzl+Kb^FMx!SW4{tbm8ZxZ>NV_d$!<^ID!@??Cnj@DHoS5R|s2>3KDv`5k6djQ~!}OwMip*aQh;>eN3IZ3A2=ue2N9N?V=BD zR=Lf4Mc#?LO9HL$J4rb;j^7_N((KGiRJf86!WZP&H2W>Tt%H%&SIHtkMj80n(GZ!6 z)iVt?eRC4+02~08?F7NR6#E~4R&Z=4kyS-AeMv7jravsGBR=Twg#URS?Qm>wh~}b? z5x{**5|9e-qaW;REkis4va(jXbCVfq8^e|HQ%LXZ2a$%KX9?2t<>Aj|CRA#83cnd# zX{MWr)2QI>WxuDlVA#I{fL&Ew7csETBsU|_eSf_#(YUGHI-zcVX~A3*xRTf0vziV;0wmB%}o zc+3JH!S=tSH8%9!p}Q_}6Zvgr|9foTk;;g6|2lfHEyxDTAzm>2J8$@^E*Zb1zairW zb7AzukbRTTU#bz+ra^sR8xA$qYiF)(@7UvfTFf+3irnYspMZmZDZJ_&M*He-24Xc} z_7G22$bh@<8Y13r@U|PUULq`lcuMdkkSXiY`5#m#Nre2$uYNJ& z5=A~Jc(&#n#=e!%#&Mzae(;qT-$?gC3U&8i*`z+-U+av0TN~^!OwXBKxW!-9+Q?l= zd~@`}cfbiP4Lcuyb(5n|xO)hBBi9Elei#NdEL20=NoEYMvar{Z(q|i@Z&e5Nhdmiy zuk-!=33}~dEqn&)}H4c z6Te6gp{S1V*=4*ZBSpOPu6-8DTesggpvMSEd;$^cMWP+wz}qUT!@<&sE=S$#O!ko` zND`JesPKt`AxkWhAp1he$)}Dw&;VLMrN2D=zKP71f&6B=*tB3z!nY}g}2#Bz_L4p)_Ksed0Mj4@3Nb7pnx zuqx4{W@wP+ykCE=LqqX4zjG6we=0ans$EBvHY@UWq$H;&_@9nuI(f90Z(R8IcmAhK9~&8@M% z4f(VM7NY=z3#A2FNZ{Z=tnmr!k-O{Rp3-5e^s^|2u^F$xi^Pdjkio@`)qkr%SWfLl zUV97((zLC}lWWicV{aBYTIM0V`LQm81U$LJ*qOPTxnb(+$S;#(hR{##>U9)aQxItM zhKg;R=Y3~Ef1C*Ngv2y)l?$)_3+N=Y4ktAqt=fHzMwwgayQ-EUdEb?M-f{0!+%B8R zeb|$V#DbZD|Pph(0V=e9><^-!b&c^Z|`4v>AoSTauwxjWS;otf%S=;a2NaU|qpgS(CE<~V^TMpB zp3LW9_`!-kAj$XjmkF8QOi8TWwpIM>2G_zK`Tc2|V8rmr|H!?7QyGQ0eQr_kHCj4(Qb)P)MZnyxFFiM`17(JVYY~| zf3{A~xrZE6K`vTbU%@a!K5@i`bPULpz8E_XDVeX`HDx4G)`e0e0;KQEoTF$e1X|GjdA$7RJZeWvQd_QtRnX9lcqHeuE~Iw$=8oo*$SzuUR&TP*&qu!rNnA0IoqHqqD0lc)e|Q2z3#7OS{)@9 zJf_I`j?c>Zv*rp#l#XF&UMa8~Ny7t&m|IGZ7$d0kSI$42Wx0}x$%~eJIo)N0e^0AN z%e)ay;&P)168za{S_)A#z>^mY{hImVYKsczVXH(*P`y` z_VF%WP;ypJKM?@q-8?E7vdSgTsw0=K-%Jdp?~kp~sQ)26$@UHirc+R53^!5A%w3YX zFoKi)2sFu=6*B+NqGm60c+ywVf8(>oV0_UdbdS%F@d+LGNrl5ErP)Zbh-k=(efW3Y zV5IJ(tcLHvXG3k?9kJljJ>Bpn>5iX?fMr@*1KArCY05En9l0y(&?^l(8}48R#?psf zLNc1y5oUV0dWrP6m`w>IZPXq22ZQ7st$6ikPo6kI{H^_VB+npnJDNZ)f7C?IF8~xM z+O%@e3Kt*uah%RU({9D1Edv?d_8=DweprsK#B~XbQPm9(mdB|A4c_X3I!e^+8yAOs zMAulSxmyzI$<9_>ZEPq%c0c-kvtB4!YWDN;>1&Veqanphx{0|7fiLu$Hm6YE+>&Kf z%KT>v`Qyq@6mS@x_|9Tqe~p1Leez8ktMx;m`I~jPgt$|doNe=crUkSPnfA``R!|&8 zdpb+?#KbXB7*@-lBJ{dLBQNT63_fD&7ZM*C$5W-VwQRGLr2r7P4n4P@Qggs+i$XEC zdma`=6Xy{qx100w2jb=_j2n;(o(c9B@~UN5t+uce;y+GrwDUwPe+uS9diJZgEK={} zGgqVGr0-N8T-YUNDY-a*NY3x~5%rZ|NM=XAw_e=`;j?XV^6Eux5xw*Kn|0 z*c)c1Y(7yEF$z^>H-=8ZI5mM{TT05Jdn z0Jd28^(M1PY70wWe~MgwN+GA89Ws*VPAQFT>h_tg>6;9m`HolWq@qOC~&!K=wb z_nQfG*(HOp&YN{Gsw~;kr|n|u?hK<3w1SOJzR?N%@3-fm%4(k~_ReqhiTGagA_UZ9 z-7xya^8g7J%*T@>SYQYqQ-f-7jvzIkFuiLQgW$$ZKgwe5f1SA`pN)OvJ%a!OKoRF_ z^bw&6FDEG!(aT~Iel7T^)8M7jpu>sKf+*ozIo$EY^Ip3^sXr{< zNfCHFytMzge;rs*ym{J+<)DZlwN2cP5KL!IA5G<3@4v~)U$Rv~`a-}Y(g2m`(O!hc zm=HXM!P5z{8lidA+ewK`g^+@Ke0KA~Te2H-_0mv5Z>c5EuV*EKOJ({~e-&SZpHnm5KwaU@Y^5Sy>6aL# zL6ZsXn;~2gpbdAB^^nuV#3+Zt?=8AsP1QTDB6;^|CX*Px$It zGMITgf5IFS1KnwLF|;BF&$t_7tmamo8#ODLu<#uXlZYYVdC(NIwCts}!iJHdz~m;t zNGpNw?Mpv43Z)xZX4(%Vy3WhiUR55r+butP;;KOa<@AE9#0MbE(tu8DQD;4M+Q4veFwA8@V-V4{^O ze;RLo7QzN7b$~Ea%#=<4V2l8e&=+t&1&TGlkdd@`-30tYVn+xZA0S%;c1{chx`?Y`N?&f7Ln z1NH68I!Cytfl}&z6pz6hY)6TjAw*|ZdqVj=2D^&6TayYIx&rqTt3Fc&MiqwOO&-{% zXe?EpObUci_r^oHY~W}tQ&0``u4Q*qj}7OOP;h$dKHd@bONW+le;(+KCz`t9*tQ5U zbT=eRU;)562g`yTnZVvp)DH^Sf8;k5Jqs)?(CKuZh7V1}XXk$Z6sJGGwkf3! zEvVKow_6r5zrwd?a6*&)f7iG%R6Y!Ni%*(o?+yLkUm^eC4dT+|VY)^{Tv!}a{vxh6 zIhD~c$rrIRB`AJdBDBAC9``G3-E+svA3*<%&y3JVN3fUuE**$O#!Uk_v>v9?E#FFZ zm(*!!57a3vYn=39cvhK{k~X=NaD;vbm2Tfoejpu1{RQUv4uEDne+Eps(~K#7kK!W)O*O`ye5S+eJR##(Yv#0{{VwThLof5!? zF-2lu==_oTuxUC;pF~^tJ>K9zUnmL+Ls7W_@RTM$rqry!27WIz+KG<>3&7`w@`y5S z^uBB`|9)u_(JDeee{@oq(L<|J_z*Hv{~44=nvJ=O{ulaWHDL+6x^*B>GoijJXZ-RP z_YO)~P03j4@)=tfum&;~P1#$30F80WCI>e=#z?TH8#}}qW6-14qT~6hX$P(4JW`KW zYa^cS#Q8P&oD*G?Bdr*DKfUu44I8=9lGCQALmA7g zw^s=4dVTJ^fByR7WE2bNbJK7kXhMp8-K8S4Ewrr$HUKn-JLIRT-vcCCmxoD-LX}+p ze;&9CIb)t4`abh)>5VLJUQ~c%l?HL2IsELV=F(0-HC=WRSC4*{QoeFH)OO7&b|S)hwg2zyT+-VcA*Go*N(be5RbbI#*rQl>?QYp~01kBAy? zI{PZW#07lS>qD8Vp;hJ}FuyD&jks{{fIGz6-SSt-5PTS+5n?4Ugr+kW(c18^W@{_Z zXgPeVH32k)v_4ZHI;6wv#=5DRD%Lvqr~yfkf1RwDrU0T$is+NCpArq*v*oV+*WQ$R zB}kR)-vd!ypmAu)&AU63!S3)g?oN6FU9zNI;g(`6_Wvx@?@0&q6F7AMbj+`;o`|sA zfsNcwZtL$6^v|Z&RnocGRqX=|$wDK1ATA}1wiA*;%zx`ja)y4Nrw7(l0gyc%tGVgObYIk%=~N9$I6LDep_f-_@KiGX zihFy^l4>FzK<@YpQB~&qo~xEDjJOdotV_JXZ7%`*(M`7kFUUAUuG(IY>=?M&Ma?4{WW~2ia;u=ao0SDe`5oX=#Vb%gFVcSr#GPJtUs#9N;VjOVSfGM z%y#hGCuFtTeLe@xuD8oDqCU|Ol7MEhK7+2N-a0ZrZ4FkrNoT4GSE7OS=}NHBh9tHZKQ>fBv|fl z&s$O)g_J>^7Ipr$z&cuk7N6|8s;BEhl;%aAHDr*D31)=P;L@ii7Y!9W(Wg2$b`nf_ zkn+1PvFI1om_{8l|H^GA%R0c4e;%bOP7N4@aLE!G8WGr)ok+>oNfm5CQz2CO zgWZlJWK#HZfvfM2x=*a~t*Ds@*Rx@-CQeqaNq}0WJ3XVVMg z5*}Gw1Z(GA^5ppq~8EQz4EDLvTDDHye8(@%F{cR+ATK_47(!)Okdj zpt)xG$5ycxo=dpvuU2bixmhL?Y#_u;#*(6KMI5HQYUS5-CTr;L

    >s<|7}&lhnUAj1Y<%;ARZc|WGjYhYwvwc>HVe@=;#EMQ%B{$2ouh1+k zb4j~;PnhL0=HcR~q!-jXKxW~yIpS&20IRK$clakhDbBGtE*Vc_-9Qnj{PcO3!%DDi z1D!EDxpi>~`EEAgB3vM)KjED=0u99ka;$e>rred4?CCQ{O zB`V=0>`#A!zHmR}FD$|XhQL#Rf6rV~?;BKze?)!UhJtnGOWQ)SFYkanwZT5}W{1wN zCqh3Ge2QP%jKC#--J4oJk#w1kDo7-Cw?`*5SVC@NKL5}oy}z)1fH(5}qH|Hb;n&D{ zk-3wh4$J5>!x0dq>3Yx|FW^3;J2%N;@f)#Ov-;4sKfY9xF6FS*faSz>wIc}d{q@)Y ze|i{!E&4I?J4zV-P>QTdzHIf`8g4zw>-=6C^Ub6)%QKS{>OkIU?R`8Ja?A9pgajcZ zbuqu}2xD6E`JS4AhPKn5#?DHO%D%6NC86P`;FG#)7LUl$S86CywRiw}wEtoY;eG$t zv766N>vyVBO8v@g^)*D^OY~e=@chHAe*xPCDW!$}T-*NKey74(?zm9v)mwLxoH{x5 zHDv^0bDcygzC3RK72}zHdEm3ld#~mQADYOY@d`g&xwHvF z@Wo99TrPW5;E_L?*lSsu!Ez`9A|*(Tg#%-G?{C*PQZD$s1?Vhwg%9^Vg<_feT7k6f9ycCAq53v z=gJxf;Hes3P2DP!0mpd$}e%-#*CnT?e*C6x%=2ODRI=k9~kB;-$EzbQ;xtJ(!5qs zOvwfc``iXB{s7wMf#oDofA?NRZOJt;se_j4-QkBbafM45t@Va1gCB+Gz@>hfpp?I` zLYLX|Z1xeNFg0kAEuV2WmMgy*8QJR}5eo@UOM_pp>Nfl0A_DXupU%>y=!yhctAYxY zcCFRLGgsnDlC~3prYHhES0wg_a)R>8BvF6kz>Manq3P*DK)qC|e=5|tH4i&91az)F zhj1u9#=9YniP*nLIw1cTiE1u{rTv!P4X{9qbUd{93B8f_lGl7xcQh4w=)+WO$>7C) zAf0Q?u~s;Xxc?joFwXVM``7z<7#8L4&XX~74=P0cqOKoYh>F?Qnl&KFO(56+_qP20 zEWp0rTt2mY_I)Mve+BksTVarHAHU!s1`R}i-?Qcon6ci-X8_1vn=}MI(EIk*hWmL3iJ+DZ0oe^kfV54kCgD!8J-V?Zlult9--Z>E{xkP0)CN zz=SFSK!K;K;Qs!$5CXJ&90>1ZZWQs6{b4zj+z z#(oIKy0}W}e-cU1z0%r9noLByM*hz(>*NEG0z)T6La;EThsYP$l#ey{`fHT2mhxce zf~nt>T?tSmM_vP;}apZWr zH`AGUQ>t(lyp_p4;t8Z& zoZ4mre}#9H=mSo9ENo6H8GzSYmv5p0c_{z7Cm;Oo) z*!}P|LnR32Wc3WH*P>O58*f0UR<&6eXsPlNJ+dqV#t7*&^WhE|?KpP!b{Sn2H(l&L z=%BWem%ttrUvTv=Xt>|6ihb@V1E+MmD?QH?e^+UgLLaS|9lNsE?zqK2%wAJeJ1mkI z6a93&wN5^$=QHn{Zm_j=RKm8@W@CCMGhE?<+THU0;uv6I)(!{{{+S3R^`?OMEr??F z?UJ>7{8SdjkVx4@+3D!A}o2^WlNH2zgI ze}BfYP!F4maEG8=f4(4Hzgr?S%EEpP24ym~!who*tKJ9zUQP`N{~Q^aXHf5|9qPXT z5{P1S26>ZVru$*FhRR1PLTl^^~~J*l7I+AM_>(L%Z9^3f2Z7p#hW z>)jjzcI0bvz&tm3ki0{W!CSvc7J>Sqf93MgDy-#G2v|Cp8h4F zd)1|Y=a6s3SARNw!XUF8gAeoDA*LP<*wGI3Tm&P7t1N234q*u%sPdpDmYctF?;vDB zkRg{Tp*G6<*Q#l1C8_2MZHKI{dHa9#pZR2ktae<3(J%7Fp3aGlUV+bA#|}lTe~g#D zz;xvgp3fmyjH{ie0+4~6M}tai0*3v==9lG}cQC_8O@LfYlCyz^ee7wDXAsR^PQw|N>Z-q zm_pqL-T>)a>W$+gQRMI#BH1Aae<60Rde`uDs!qqI)K2&k_>A1NIr*qH;&L7d6o9d40Ur`)v(wjn6_L$6aA%hhF&@!r|ma zQhH80zx72SePyw$Wh3f1<95Wan_JuW|G`??Cvq3JXtXs`YT?NCf9&fI)Fh9yYr}9( z6{=-%RYj6#M`%9-wB*}JTolT&xcvIZaC}>v+cJGg1$Xyyk;z0(Sd5*N8?}At+bQ4uUOF#U z1jtKqCVocBE?{?>GMi4v(ugZOL1?;s#PFaggrTXQkW$yQeV z(yFJ(W-s)OndNEa3H%Gu{<+VSXx)75fCO#HAJJX)lLz_KGG3x4v%kw-?-r)ihI=Q0k#AYLbD^9Oq1XJw$ z+Ux2YA^E8&!35uG>SA4ZT)jMeI(efG_A|#Ln68TwzM7U>qq5*p&IaYB1xD6V+!;&! zHy&-le;u%rGttu#slkQ^SB*7g)z^6WbbiWQ%+!B{hf%g-XqlTiG~Hgy?FE*Tjl-3m`H`>D-V&zf~@A>RydnkbF4f83+$Ay__5w*R(xcH;j#AUX)@ttE(^ z{v>`58R@rc)rYZiRlN8(MDc61%aMVK)9mHTzDUL##=sw5l)0sJzDvpcfQIvBCB>%K zHn*Dq;0(X0L`5R%f^7i#6l^~0b0pm;meY(Ee$)k|dbT?X`Qsv#dIh1K1kQXsAK%0i zf3E~VKxA!q^OYIFPan+cUr6x9&~aRrfZ+z(6AZ+=b_3>lH($Pba(Up+8Zq z9)U)MID;&LXGIjis+FPKM@Js@d&9SGgeNiQAS3pplxLSZ9ehSTkQF1j#nw?#Hw>@e zGG{q1NKI?9pD(-1XFlPOE2e+CCBNWGX!>L$i1mAz4EEXn~SKmCI4|I?2P z9ZAjH2DS~FU~x6bh5bMd5$w1CA%DdGud=G(E^iqcGS*rDLU=XL^P!@s7=AH5S0NE( z1mG8C!wo3FHiF)Wb&U_i?j0wO?~6$xW@!O-^vCiKj5YV=3nhTtE?BOA5$W>ae|8}k zE=gtRwb~0Eno4|dzq9he;dI8KEmb`%=inY6lhd+0l;9j)5sK?HerF(bE!Q3vDy_Ez zId^=USGf}~9uQMgqg56HaHp7pu~BBA&52dWZv(nq`KcE~k}ob@<~|xqJl8jVoD2Y5 ze+Bz@%-Oo)ATGn!O3UXS8K0G0f188)3C|%|$nKxB%gmJPGaBED8GuFK^0+Lt90xq| zp#?{vca-Uo5yE0S&FCGKpCn5LTPEyga^Ge*eZ=BgdUeO$ZE-S9ovJ+jSr^n zhXRtI>-PhnFk4Pk@58)fr)~=#IT)MgWU4wG4@Hwx*r$tR zzCRF|WO)=J@j67vr1?`ie+}w~xfDa&(noniF(dCHun|ygJ3)+HjIxdy?S0K?#w)_p zRmLMr7tsMFSrIAU9YJzEJKo@6YH~Sbn0^fQ=o4F3ryR_;4b5{jx#2{T3Vt$9c9ks& z*2^M$$Y~OgZAjb)Co9`5ykn7M32J!`?P2&E6W_k?3Hj=+b&<-8f4kz;=)c9U%p+?U zB;7*4ki09@FAD{>=0Dz`4T;pjbd$<3brA(}b>E#fo_I3=002!`KI|c!h7)UU$; z^ld6*PC4mm?O%1|iN-v9Od(WYeQ;hjiv^ix#}+qD@XkH-DK)R&W!(o@c8v=75Ez+a^pDjk zXP!fZGkF+z2>LkaGX$l(eub)B#Dx$zY7MdxMs-00@Wbcje+%XkQFG7QP>11{sG3^L zpXZ>SV{pC)ko9!0Qrwf!I`DCWh&JG{3ybL&3ML~@r6(HG@q-xh(d1d5Dp7}mY{Nz; zWEH&F;dpJ21+9Fk_#x72EF?T5{nwO2rKZGHtRy#WW2?Ozq0E>}V#er;`0v1CbQo(# zSWO$55a6HBe_O;Xmh)o?}5&&8L-2w1Rtab{}UPe=58*Ch3 z3gxD-fEoT@ST1JGj-l;RarT!buUx8yK!5j=%u$bPDZ;H+vXGNnsie+)GqS($Q#=Ei zL29D(Ti4#7;1SXpPwai9brZ|dUNYn~_YkNJ4(sFbf0Sed?UkkxjV1AKP;JBR(M%Fr zP8Dv3(F~&GhM~$O-B__vG1wF4a7|uzWgL^6E@y#28x95B5S`wT-p_!#LzFZ^ce!&# zDfsd}+)Pfi>*H`1+P*wK6|4&&!@*^rKCP+2eB8%!lmNim&$iZW$}byhfZ7f~`F1xr z)bFgfe^`owrLD=i<;!~2h&}DL%Z$j!8=hzIgd`(aU}~7|Cg_w0`$#iKqK|oue~5o+&jQ>-aa-{b@b_CP)>q532f*?F zdx>_xrxW2GHouu9rC?0VcnQtcyo0)ye=pc}uDONMhnt$s5dIs1i3M{^{J41t-}P8dYH) z-cFYl#kE5UuG;D|b;gHcvbNbwh0X5=(R#44`0QZzQ58r*ZI_*63oxyNgDh@OsG6ghZ1_yFZQY!AV=V7qV z?{KcmrbI5?+={9*c`3h-GkB>a^(iE0~@Li_Fr6j@$-75L!NVU^AP z5_tmjww$eyrO63g@q(Zx?li&X&h#<%)o}vyX9rIS--c_c*=)kcO1!SNTUr8Sf2@$Q z`9<Qsj5{J|IcG$1II60NY$CuBK)DT<_RWs)Ygq`PP!Z`rO4(=tp zecs(SQ0#oMgVI+NHS#psz@o2Ke=4T~L?$*lOq2+#s6?_=#6t{QeZ>Rp4JgZZlwvO` z-{Nzyqvdvo{fI9xlrwHVT~aERNy&ct2h&@fK^m8^iQW5s_Mxe_&sz_!K%4`eZT6h9 zn~q~RM(%RB)4vX-`WvrZxuG%?;4;|EI#8eX1bq!5BPtd6XP3EK8@cLEf73lRqvniJ zY{U-*Fj&CHnzs`rIYEBS(o?0Z)Xk#;@E9@RHaSc}+6!dclZ$R@7sW&>1_?J0+~IWL z!ST0UJ;Y%ef{E+xP6!xfy{N+F3l@+X;Ans1zpU3S(}jR(e@$8Vm;Q zn(U>uw{kn$aO;91=4HOp z7}gi>pO=fr$T}n7_ef*~+lSP-E=B62Z&f@+IN2~|h;9x8krZ=GbQr)MH}mWH(irG| zKoM`-arTbR2$z}`KwKpA7apD&#-^#Njh#m%xN@ z4@HH`h%wT?1|GIwbcxQb#qwmc%;R<~Vh43x!_*V?!xYb|2T-a50TULEL+_W@O_l-0 zl=-IlRWp`&Qm7Krf8kXlD<+7?73{L*b>zCC-~&DQ^Nb+1f7=T6g=qSM!~&aJ4I)$` z`xpu#ayJwYKWzYb7xT^?nPk)MMDSdB?qEEy(*?K!xH%ajjiz52yOTfvZ9 z*8{FnKS@U#)T-I|rIORzHHBoQ)|lE;&mOJ@EXE+=&0%?&f10rn|4`{;hGCFPA)fj2 z&+21q4JS|(_oP>cm@nn-G>V1}{f{f#tiKP@91ewHSM`bsNjuNNh{IIMw2lH!q#}9E}56LHkqy=U_Fy zJVpPcE;a7ee}drc-dLLZ#q=1+X?!701 z6!_i$XnWJFzMX!1;sOGMe-I!cfe;fN9qb^ni5(_pe*2rU zT~)Trwe)iBDqBi2pM3U(e318$+aaP*xLh*auKdVJoS#)|71_i(PKWbgQB}Aa%{(Xf z#4@WMI+7OM90zGX(sNN=>LMpytF-Tbu-=?H)*qYHh!Y;}(}UD)Sm!#p5Fe%+2_Z00 z=++H=e~MLaJwQAjmxGAy4Tts#c;g88r5=L#s)PfGJq^pPj&?!PXCE1PLEAHPp1`PK z1`I#e7T2k_W^Zn&>$!{UDO3<{6~u0Th<11=Z6dek&RDUrTogWos(ZUxdk4xpj@NCP9nM=~Zu{*5=w7<6h;n%he>iIg`3eJavD11dImM>giQD36BFRp^ zogy-KH~o|i$DSm(iqlqMf56r1SgRlc+#H)|xZ~kku^~weha@Si@`5Df#qy6ryGv;p z0@dkescJG{M`U-{)oXXIpbJvY7zYn5u}bXNf1_#l6O%xV=p&H2VUS+G@q{drDZVH91{_2KU)3 zx~j?$&J-Gspupy%xwX#Lz6H{sd5K;RusI)0Y`delTN0ND+FUz$*&Z$no5m-ItZspB zoDc-E%1V>Iim-Yu6nYmcxS6q}U`K zz@khEv(_)&@L1T;UL8@B}5p(lW7>#gMVx0V1(OOcR#Z zcm{2+><+s5u(z4q$f1SHie~VnH!d*R zxqc48!)4Ov0+j4pHaBX{I7~Ljn7!S$K6%z>F{Og@xj%rI(X=~cH$c~{_nMCGmvCp- zx;fscWz894B~HCFoaDX)0VRt{UfQ3w(2UdMO^=QjdPFG}$v_Uz-Vg*Se?iHMZpwTb zt%ISu9k%t-dBoR=-ow`YZ%gayNgA-yqNEAAf@-pM&dRdGxG}x%@s>14aiQ8UNj8}2 zDy>Qx1uugXz|4dFAke5tr^~obwTa*mYs?IPQ?A6c*w;FuCM(WM<7M15Xk<4s=7BPG z1EHl9-rJ$Hg|9tNJ023Ce<%!tWl??^ET*aygdL?5aR?BVFerB45t=h2%SJiw)wDx) z)Y%HSm^#cx*wpg<2GLZ6DwkNg3nEcTQ08t8G3_dHwY|TOorY)P6@6vlZl<$_8O%Da z^=xax6Mv`a1M+M?7+%1R?t!U+x)`%Jlce_eTlmohPqn*k)j+L8BM4P-SSgO~kT3;fVagDXL_N05z_n_|1Y zwI!Y_D1E$zrYkx`=|MD`(PSi2dDU}CXV2JbMWb`Kv>Y#U$|CjLGU*vo7-)F0H>-Ns zS`$es6BFu@q;tk>D&b}w+!Rex> zBG_^=>`0z341cwxFo$*qk6npu*%+yiqGAj08U)dVA}O*!Z%lV`+C6gg1M_f8^!3FM zro-ajY=#Y6f4EU93fi0o8I{~xUhx5!8cr!+D5Wz>lsod1*9&%9?l`s~>66rV^sr&h z*??`}jy+l%y6I!vs%Oh4u@FhunT_cXxu9;(k9{t;EN(jasmIIhIIu$sg*v*Df)i6T zH(Ns%#i?y1jsju5 zK$a!ry-UN06t^6PRp#i7+EC7MWtG)RAJ0Jb&&Wis58|p7(*UWQq)sjpq7?M1U{)Ez zG06}Y$nG5D*uVmLL3T@x{H-P^nF~O8Nv<8{8#;fT8c|cIjjybgZNz78psNF~3kN`$ z-W}{|f1_RVlXK}ew>-+5Sc?5sv^9e2g2ll?(n-8^NxQv8yQ63=4F**fxWYi%j$lr-c+fixM<>% z>UKR=8oUo|p&2>x$R^OJVIdIvRjaElDU^{gj(Y2J^I+%0vYg9vXQ+J%#){3>Rvg!0XlZCM>}Z$W~%5T~i|KrB!X8GMIgArQK}*|=#qLl>w_7{fSR zZ>tM2?n9?3gbR)<;@LR{w#!5-o8UWd*@QRsggAhyi%X?<&;cDX-98hXxMc1=XuxsE7Ts7^X`!6@x8G-_iEMTH~~=7Nx?e`aK~ z)0Yqv_{bOW65HAhyMc4Ow8=h-v0ZrS4ESbEAY-rf{F+a$de{_KOTNtteYj}us^rF& z62%*3UcHlkgvqiD4#Md&D|)macB|9=hQ~WIHuuW_BeRtxK^zx16kA!WrGRivIQe3W zmAb>79at?(M@~X6`*Ba`DZ~&}e}0OC{3H}7vs4WPYk)ZlRo#lQwNJ4W8%@bL^UG8T z&@Br_Q6)z9Pb~MvAT}zYOSSdhTzI+sKo7NFZI{! zuDuk=NVt^VgGML)WYM2r!HNykK9D(@q!w^RdsEa(7vfY)tZLTPNrNcca`kYpe z1I}}k&2_h@dE;_mS<2`Ye@afLiPDU`!Xou}!QFX6kX?t&NwK2nl$$WTzm>!66zdyK zZbC;&LkiwRYm#0%zvypQd!|JjKCM_9TG09u?PRkIPnAbpK}DErh`T;I)wwN@_Lv|+ zt3<}irBi~mgxx7jv$ah3wpvhHsU-_#2=21a4~KH9&oO-Ig-{csf8{`&4!Yp%Bzxdsa^{XhfZ4oFTRb!I9A+ ztJCt0u>x80desw+e*#L^+ibZZdg<%)&LM~W<^G4KptCw)+WAI|>xe7v)xI;E`>h9U z=wz`u~4#_!3zJf1nt5XYe`0@I6R|LxL;6whwZFz zPlY=ln#W^pe{U|mHQ*!#4Q1}a@UmOFQ;lIQrOdbbXbCtirPnLfSy<|Kl)#HcGh#|2 zVffaURQ!0mGGtstv*r>@m^+)xv5I=B$Xz?{uOR3oo0ET%itFYo7duo`^V1R5oGQ^! z$FG8FTCOMJBC-q_MK)t4KC8LzO||U-kE)$R^*tcff3j$Q-{)~y@Qp(_WU*#52WDuu zJ?^sPL<$HjhQ=`u0=}+&Z^o#NPHZw`g_DO^l5geh zH7V%iVUt8?`oV`OzP!)_9 z^G3<#(|WU4tE=nE;vuf(x+N4ZQfb8y%OfAw9OFn0-DaL26jxQolw+gM2agq7x6l`; zVxnE&bOqr%8EYCh)it&_3g0C3gnMnaKdBe(e_*qC&Ie(fPpe&pPU`@@okl(sFRiZ~ zh43n6^cI@JUWiV?jy*y94G7qw5f|uMyo&p7;YrI4ZjP#5SB{UN+q2_G`LSLj>kxN3 zl(bqN=C2OPcxO6Rx$08W?PJqyrb#a9fYD>2akumYO ze{AQ{H&92AO?Y8Zc}{%A(kT7nkBr5N@;S8XWOR9M)ki@e?#wmQEIo~4u;h_zc^AOj z5vukaqTDpVRgm{jJsP-boJ-|ZC&dNrFlYlDCq{7B+&B?4Y3?rOghl5(+RW4Jl~Yx$ z2<*7Mt`trUjYZ|E5v26m{-F46cSepkf7QI8?(AknfAX$zwsz0D19#Dx_V|ObsxF*& zvpY0)X?t1Aop>QOE^8dwEwZA+N)?Y19QUSkL}nvWIlXO)R)mZrr}#BIPN3$XDBqH$ zdZ-0B9oGo9YVpIo$BUq9E;qBI&eO(_c_@$ctgOvd$RBWruP;?ED02a~scxv2f2pfc zVZqRLoC^p0zYndo#v$De>BlDO3o)CQpFU=X3N!_cffrq=jzKv>n|9g&M?VX zYilnSKCGHIo?UH7p+0m+sHowWmYxJEN@n;JaP9&pjN~{X&s0{ z*F?-2BM?{cwqi|Iih+&YVq5mL&ay`Al-&$-GY$Y5%cRPA?;*NWCatb)-Ls4^WV-Vt z->k<2#gS>wHq0PW$mM2;fAhRMQ30Qb=hKR=_F8f^;KCGfX=%J;C9MaM@abgXrIc`c z?_zkX6^F{?S;F$0aE>ev2$?~R9j18Tu2202z=O{;F5ho_Wi$@8J^%4>Kyp?`i=AI2ba zf`|{-7s@LWX8_Lm5Q~9I$#As2e_W@tDGh`0&+74JZBU^}G%IDqR$V4|OJ`bTXEA;Q zBzadcA(l~;nlr+P{8~S0JMG*|kTR5qEJ~fua3tN22e_$jp^>+ttn3J!k&c?uXfR~b zeh?K4Vc@d3#-&NYInmlDHGf?%5x%}DXO%f@5vs@gDoQN}N^lSZ6C^$Jm$McUq{aZ} zUX43^$4rsgt{vKf;buZz7&oYeU%Dqih3W18HUhSB!ZD2Z6b)x#zo3V&mp=sKGT=iVSI zY)g3awbJ>$$@)YxDNUIH=W{(6>ac=JL)eR3kbC%PW=lnITut58vu0NxwQwgZ!{|$- z?V0rrTGmLVU0KKVgn&jajR0%;Hmg`S^Nx74-5Ctwy9)2^MXH=^QHdBQBn5FNCRohh zKmOEN##30$OT&fi34d4T^{i0zX4LTv^+P1QNqQY&2iuNBqJhsDXXXs+o%drqR3nk{ zvv=L@*E|=}0oocvjRKdj7q7bm#>|7s>nVxWL7VeFLRsBW^4cwR-rU%$ztR_V++JyV z-30iuF#<~;Nvx;iHLU1s80wgTVS}Ay-aoNYwW=%(T!(8&bbssYMJe*v;fmB&iH67% z6S2`)UH49jukfnL-8vXCXVKTpftUphbrpHRfpPB;J`Np<%Vb)>*PXf)vOjEhTjAEo z)TxwnKirpU)*gcT0J#!$I}$8!Ox{*H^N5J}k$<_AnA%?p&-IZw-|Q|vr6FB6 zEjS5MBxhU|=9TpLT-vVe#`IG7)NEEKEs+m)oM$U)!Qo3D-}dGnIUIus^9Rn#rc$lZ z7}wT|3Z3mOWOm`T?UzyS&f)El-JIGfhiY-zejqLW+;h;tH2Rep2W6@aP#|=OvVxH?=FtH@hKt22-O4(fl$#Ie*@N5WL>{At z6l`u|&B(A6V_<89KGj7`fXF|dyQZbB%9iJoD1XsZ7uWtN^EU=-poPXdBXHL3(#{p_ zD{6Tdf{kh|z687dnQuk;7|xjnD&XOim&O8}^Evz`rh;bmHQ(>)W zVSm0D2W2NVCZcoeob`yZhF3zT+^k%4OKgv>3Peh`e9R-9Aj%iXaS#v*(NP}QU9`I< zX&p8}m+Vm<2!17Pa79^e`vf(D3f1^XQhII)MQb7E-ra8Z&WJ16RC-Fz?)Z2Zr)y3? z@h}Bra}6;D24M=%;&v-)467a1p^`!}?SJfs{Sw92fT*5Q{fXgr^y` z#oG=_)$7Ydr0aF=?3fCM)_}rk47R%_I37w<+lY`x!Z&DQV{64hbLCjQgXh#t%ERsM z86wo)-tRzLl|MOUHI42}IVDNLRe&*J6w{+l!olb=;i2B0Q$9ky4og?r2}uC^NPl9` zY6lP6f{NYeuG7NBr&Rb#TmUOx*K;jUTB?ooHgljmx>3OmSq&QMNC((Hu=JM6dC zSR@L39Q8;g`ztNQD5eS+uB0GmbJZU4x)>hL zR;sR#P8h^XO+p)zvNB=qZ!fn}Hd|LGwL`Ns0000p0000n0001i+0>cOmVeNf7l8o& z!pzEeN}9FU`jfYorD~?oq;}E$M&pnoT5i&Otfi|r2!7YucuD#Qf&{EBHu})(0Fwy9 z$v$1qY2OBJ1@hngl1+}{_s6EX1{8m4;w<5W_F|N((-%z>-~Zm(meedWDo}OU@JdQl z?QV}lPSW#-G8TuD>P^&aM}Mf6E~6Q3O;F!yr&SK+I(`v1I316>Sce^Si948}rxvT+ zC4(ZUqE^O*RV?;)gu08`9ELEu7{j!uGTl_^fR0Ipgy9g`cT_LaOBqa?<29Z(EQ?|x zo&_!R7Rgs9%%` zP^r;JXR=W;78EFkBZ)*}p&@QfeG4yCrZvp5n3n_QKxJfb8#b&ibPF9foak!;5w3O+ z;o^+kSXge`INQ56vo$gLa;7_RUByus%X3d>Jp&zS+oU(lo-)eFi_HKOF6gOY*H&@b z3e({dpX|fcO0AA65`P%pY>bhL+k`YgF|TAYiHJxQ73Qh!ZpjI|T7&~NrB#6}{D#;D zw3yk|oOoWL;raehjC0(O2?kMHdv4&Rn8N%p#sSh%hSh!tpsyGay>(!m;A-dK|6I?29y!Iyy7?WjLY@z0*Dzn9rHvMyX z^W9lt<-=avm4D`52sqe1bYeI5rm#9x_dh#9vZppZnwxtIORQ{0zeZfgnEgRSi#=DR zw^X5bU69TA)lue~C?5Cgo;VtZrZ#Xqr2UQObwkBP?8eaH^mb68pqZ7^iC*Vd`Lek& zY_pb>!|Al^V`OrY&7yUt-w2Z_S(18WK=O|7<&5pNR)60d&A4+z)sA4_^I);Uu0wNf z>ShdRJmUs-$V4bqR8>8$n{A(q$IYdOW<2i})AF;K<*q_YmppVx3|zd0-9fv;>orS^ ztUb?7MA+LI#hE4&ubq!qw}2ARV?7_78xl&pvXeJ8!VL`tE%yvHqLOzR-pyLmREem=0}g*VQywbDO^Y)sf=aN(J?@IbK0|WLhKGG zC;<~S;brJDXJYBveFt{~FwiTcUqwF@gyXo0(c8v%g6!N?qvbczTA-|*tCA>x*yhk_ zK$S?$NF{HO%nckW3@*~hc7eDy(`|dSDdt9Ye1BP?7KKm*I)_;1b?oN6%?(?J3<*17 z`MSjWEN%dcgRQj-HdJy19?P(?b8$YCXZu8`WQv^&F>|$2Vv|q`2wF@|6BjE? z(MEIFM#8$3g%LX>)23IpS4ELTNa|MYo~eD9Sgfe`E#w-AW3Hfwj#I~#Bp?%BO+}@;rJ$9=Mocom!rr zwerjm@kX)w+mKxN7CUZXPQr!J?qaIK?D=%f{lNEFj_PU;5@s7_7X1i2zDONHRDZT1+zr z@>h^t-WX=;qkbeLyH}lT-K>$CukB+S_;PetcMLP?wX*kmtTT_Mz)LgU8+HpIsD_6noQc!R$w(W()&Y6Jj zN@+qpz>|wn%=B6*4y$tmd;vx>exk_ADcCqWBe_&%xC&k6pt8}5z7UXY8AP675qmny zO}&;ndBwULF5Qn(WXpvZ-G5;HmR)-$^nlNecVz|#bl+!tc;9wM=CIvd__)7+G=aaK zFjGrqzX2(t84||UCF#v1Sw7KW^i|o)fO?lNIu=CCP>{L%N8%*=VqJuaLt8uRG7Drq z7wCdqW%I`CAQ-QCp9(EI9()z$p-70zm{CT?qc4{NW1-kL_E4`16Mw#OvI^A|M-y^S zpR@Yr$ya+Hd0akAN4g{77&qyV&BI7I**M>gPQ$g^Oec0yXm83|k1l1UTk^4#xKnvM z#SwEH`+Au$%<+!l3Ka8@%fLAw;a4L@t8iq6%cuweT$8=UK?+606xS zskhS8!s?v(%4!u#vGX8V-fC6Zcs53?b91MjwzBrNOVG2H9`+Z9jW{X~<8dZ+RV!DD zzem`EGQ&rtbJrzi#$&w_HVzIdms}ltL}rw%vC0*1Gs#|3U4MgD7|J3Me7XtY3MCWi zGN1Q?f7MPyw(HI^h>6>zRo4UEu-(jgr5{|d(n$`^%1lY^av8%gwJDzra&xH|QjHx+ z2=iQCb`YweE_P<&W(!i$t0ppP*4rs}^pDqK#WV7OxZ$TuW^bpB>2n~-aPrBub{9jP zB3$N%9k<3;H-BMX#rj;gC`?RZfX_@nNuWeeR?28JvF$3!HBD?eJM`jNiVQ;cNR^9G zIP}-!B(}F<iZpvngWM z>)43b`(oOH!Y{}dqX96M@@9{0c#bp0rk;e= zHpW!4f`8WC1%~0PlrcJA+0nElH%O{60{8N?lJFbdfdW1DM;#bPE;?SMZy@zVA9fih zhAE8_?bR~2hgEf1I~NnT&gd;F=5Aoe9VW{zUJ(Xr1wo-}-2s^^Xw|gSW@*lpprym$ zv}%3Z1&Ay{{fWXt{ffueQc-alBnIh9(qRRK<$s0EhX|k4W3*#;D|vkyF1ARVO^;yF z{g~RuL24;pZ3RJLq-O0^y&;LNVN(0(a@gO}##je9YC!`Of_zC5ujgBF+#EK<;Tm{b zvJCrcf*@fzm)C%gm;KJ8F7-thwsk_JkQ$lC*iG$J73g;5;#R_*vV@e?d7;USm*t3E zOMk^)vEaqESAFPR=tG5j(n>O;%8O%-74}n5BYxT0I z=XgyX*FH#b>v(~80B`A7=z6K9TLGFcx6mP@y{Vbon_q7BYE8h`(vuP%opxjhGN!|9 z_VmP9vDrCrbCvQ`oD9>y#cPK*e6xi5QGbZ<9e&wm>AlP{rud>b>-N~rP_YURh@x|+ zO-1XNwmJ@C9>|kwC{Kn5@Fv0?_$lMyTScZ|t zH46>r0Y+h=PDF)^L_WV@i8%7B!AOPP-8js+)ICJT)zZ7LaVg9h_zbe__K{`VrGKn4 zlE@TgskUgQc){RUb5cY~)2s1vUgD}@O^sefKHgU$!dVdpE0K)I{FbLT#QBc)3W8A* zSlZD{f?`vKJg;$3BH($p1n79)goTVCX|@ecURk$i|?qZcTYusTv%&8a5ZYX?07?9XvXy`Xo{d#vU!+KYwrie79P` zgLT#5$Y(DbNVw%7`$~)h!mygdaog@7ZnP+!_Zn@MhDg|mK8wb|$4X;vl0h}_&Dh!` z96BDeui~qAxNJh+C76iv+=aPi{YBNGZ811-MN_uy!XP?emuA!xm(Gs5xItz}jC8K* zbJ8R*oOC#MXI+zHQ=)!}9Dlma$hv%NMTPI#mzj}x%ry@?xVfDZIj{P_)Fgbh={iDo zhXx?h=}D$8yQPVZHHh6kZEk!%K!=K+E-l-4mnF3aY?feW?XJ)BRq**ZL$7#Iif~@+ zp{3(?Qi?*dhWgq1Mu0^4Gz7bRPj9wE?kO_N?HPBCUHQ{>-fUWPmw&8yPbgOlgU4kR z7vyERQgeidXOIkv@CmLZ#SNP6U}vlK_UJj+{4zOZx{2mK6ntsl97U>Vd>v(nwZm#! z=W_eol;gZ*5qP&!K|u+Sim4uX(#^CnP4Nc3F0hhy>0v|XU3WcppuRu~ zsHW~u`}o3mrhQ^BoInah#%u%;!J5PtC_YY0q|ZAYYOdRjs%>01Y!a-O>_We|;k2un zcnNnY+#p;d98qH}^GNBX!PeQrUN%gpx!RYPwAiYZf#DS@Sbx2jMpj!8QdWR?b_R8l zxd!oNFz^C9oE5w%2KBb2OJ#D9^_=q zjiz_?RrS=9wUP&^3<}@16DtSx8&l1#yJGWIktqc^A*pmd?$Gp%9S`Oqx_?+HDS;H7 zC7YvB!er>t#;X>o_#=p)JR*1RU1oTvvAUp^jicndfHa6 zr_-9&`#HJQjkJ+Ly*&#sp#urt{FP`@o-f!DtzS;V$=QM`7uj>n#N76BC(e6Irkfoe$<1CDHsAb@7zeZ0d-KM(Yp4wyj4v(?n}2Z{;Veaw|J zg?c#v!No7RCwGq(M zQW{fLv!&YxB$Ad!H`0X>Qro4B+=^V%geCEY+_-ZD!txPzp?Duo=k^qa^t#OT@^XkV zD4own8o1@whmW9q<7rKTu55>&6moS~?FQEexPPP9J{|gq5{~7`p*W@xlq)%s7{3Fs zW>D)V%XT~V(@M7R4Ny}*T?E)CIN{jxN4zkMekS^GCsp)WZf)4%yuI6wUNzdeAjG|G~+`~3k$kbnR4(?|y#UHa$+T~?L9 zKYtWnnbm#n-QPW5AG5GaKP>g5UxtrCl~>L04};hI@$vZ$_!&MXjW_@L z3@5J2?lJa?ET4aW_{C^PFAsnD(?jc(?PD7?S^Vd3AXs=!k^$6^=eN}mHE~{zzdxi| z7)CEx)?OH9W%7B}d#wNC1?9&v@~>I<*nfHTV+wZ4@4J1%zDa!VkI0`MUjDrx{&~q0 zqXI7np#dORR%P^dLJ!CQq~uZX_VV>Eg>POhs^#0)+HYO@U>Hyd|Hpp-c4g&50GJJa zN6o{3!2kAJ;FL=boQO4_*^_pV{&} z{?0gnjDtVkK|MS^kN}}y-{9|8T~`%gFM@fG>*Mqm+t1_kCwc*DulD`@_fNX>{NDFI ziRXnL?7qVf*F1I&kmgr{{rv%qmw#;y2rj#y0+aTI|5N%=HyPl@C)4(;CIsr(cwyGJ z0BPg}YxqAN{2nl?Y(Mk+`TfftUR_5XKrx73tM<=o=Hrv?evHCrEqWdY!m6i-&}-8u ze75orhk|!6gX4>C;t2BAEn=UQu)lZMMnCH)0r-c{3j8gz>Y}N8^Z=vpSMCVB z8vX)5%JZylv-aiUUFlw+0cUyVXZvu+%xk{syPi}&%{n03+Iv=qvGM9JO8cxg{{`I8 z-G;-zzG%?>Llv_Qa1r?p|9?cu6YC$N0VsX@$~V3SbB}gI^a;po9cimP3%{%C(_Q<* zJK0&;M%@DfzA3Qs&d;Awtv@}%xqtn=E8i&P$0)v~^KXA^BjEQ#aP0$9zhw@e*L>L< z|A9e#u!Q~|Htz-SmBs(;4j+r}?;+{$6zB(#J`ySO(`&yeR6hq?`G575N!|0i-$5Yr z^5~DqZ!GfxgNvx_UwHbJdw3He-`jQ&J^QQo0P7~Yv*f?O=g3~%)#r^qMN#6j1AEFC zKBozvCw@W^{p^Ka`KIssAK-bq3^3x;rLL+!@F7_VypWfFpoe+&ZJOR9OT9<-Gio3Z zeV#^AUy;E4fP_!tz<=L__}3Wz{<|LmnMW^}exM?s73#AV0V$UE+^XxEKi=V$UJ?EJ zwX8m)`_AWr0wVtwG9co9P9A@l5qynF5p~}CT=G>C`5HUqW4$3hL>g%5*BAq>t@8dJ zf__SMiTA2YVn0CPE7iSg!>1e;`8j?5WOM%lh5kY>5XTeP7k|2c#>QVSuD!MeX&~^$ zN&1O(Kb8#g!!)9*e}8x+KGO8NrhxqOn{xWJ3B|nUJ@yrwsei58cx9%{_i%qHo_|Qf z7ccRaecx~}9}w}JQ$Kn6PYLxam;ZC+_(y5;lYG9!&;J)=?%$uLJeNDjt9Y3$PyBva z4Tk>wb8g|Y<$vFq^o}{iw_WHLwetKYU5&nPP4A1r&y4!p-|{M{UfA^+nJ+2mCmDRJ zW@X+5Q|wE*`4DGO9^QlHC&_#s`0t;tP`;7Ae3c8Lzy1q^@!GJ-_r}Hij5NL&`6niS zq8TtcN}@7+&+6BA4<7!Xtf;G|^UCf!5$b0ullzT^?|)eMw~%`TCYaYhjBMYGvcKGy z|Ls}ve)(Pj_~y=+=79^qzdR@aQ2WbQq+`TSc~j=ioq@C(pNM(*kkB8K7*tIScKY=@ zk_@xqd(!-v{{^T#^Dpc5iqhoGC!)z0^j|GI{I3*^)G zuSP)tO0zutInDhcYX5rZ;X_pXoznU!HT=L&e^_@s4|a3@DwX|VLjUD%-unwrR`w?B zzb5XzD!jtzb4Cw>0^rfzg4-`T|K^6{(~La6Uw{2Zczntx!mNp2?#~0>^+oyqX5N3k z?DJpueE%=MJXdY)FMs`JO7f3y{BcZ3ysuo+cM$h$;e&WbWk_`Mw7`0bmRUfBcpQcxRSNGi`fD%2t8u*z-FLS<^ zpFB_e+u!a{;prUUAHNa(`u@zfB=RY@dj<3F%h;X@lVAV*gTjJ9kZ;`t{%opWLdOhhcLLKliT|?tC3<&hR(_l1-+w;y`0yCvO}72o!Tbc=Z=8$#oznaVw*6P0 zqrBE5`olZapK$+#VqSUS=WOpO^?3wZRJ3o4q<{1P@axj;%PqyPJj?41pN|8P_qlDH zO;PwNu|>X9!@W?J70Jgc^F_&D-`0J)DNDTE(fu~}KkZ1pk@xeKfBMF;H&~wlQ-A84 z{ExqcUg!P(Gyu0l0!>B!r+>!<@bUq?EZe{QA?>>QcNiYW@wXBGt!fe&)Q`x0@*f_C zEE@T0`pX~g$l?fb|Nn<)l>YJul*In_IeS6Cs> zNIhZAkiRhxIPt;ik2YB}jAS0}OTS!w#2yeENwMJ>;v+=>(_`LVA0A2K4S&S@*nMaz z2<8!Gncpy*K~f64lS&abhW^IBoqcC8V2(`@DM39kgt2k@>sgN|#yqf;4Nyo?YWM(E z3`NpMaOshzUSE4zPX5L|zT5rIGQjkKVAg^u3OD3CG1q@Sq&4SPUw^ zKN}ehR<{Wu8RF+$Hyf#9bMIoRIg})7XqxqMihZzZe$!Erz1ZJCyIHz6O?zJSisg!d9T$ zpbUIZ9eWooQ06Dwf5za672w?$7YF7)vOqtv6#EUKJ^TTG0)ae`zX20LfFUx^lrSIo z82hd^0HgGgWS+h8SNe+LbdF#2+z>pS@ugL zcnTN{`?L`basmRxz26w@S%CICQ++l^>~7H5d;7Q(4Wc^^e%nC0)Rwt(^{xZ}Qy^UG z9z@?OH&AInR!)OOkM|$LeeW&C-d{feCSdfFW;~<$m47>BfLYOZ7U#g!QR-=N4%qx~ zSI~O|dr^MCpRa9&x>JhXwFO`cFhyBn{XVFHX~Z4=_8vM=poQ!`8hx@r61m5*_vy~v zTapx@|NaAD4YCvZJ=7Ehnzsdh7i4F@fjCS8-+)lh5$*{p_LYCUJCY}4pV$ga^h0Ey zq`+YJGZ4Nl_nJE2C#w)+K#)hYi?7le$WJ}>s7pRxy3aA>mhSESOUa~FfIYqk1F`zIs zejj^E>^@zg0E6(mcg6>le0IinKSjKD&CDGt@PA5RXO8?0!5*G|JX1hDu&+&)dLV!) zJ-+jT$m89-ZT1Ou28fi#o}=Y+dax9Cc|JV7f8!S(pWWxn@E5iLZaz78un74Iqq{F* z?ROl#zXg7nd~%8`$N&M^&3K-BkVJell2Jq7vUjJpp6#{JK3bhiNJ2Rr=~m>)6*dHe}< ze>4T4`{R9n$hzkY=|{LAKb*n-(^C8?ZMjF#A8qtw-u?vpf6O`dhiv&7ntzDOkGJ_b z8UC0cpis!aK%agB-G6?HMgZsb&lB`x8-LPp{DESA$lM<}4iG~K)dR4?4@hj029T9sj-$SPZ1WM-Pb(iE zqo%1o-@z}l!h60~{?vT-a%u!Pa*dh?P#Apbu7AkN_};wseBSjMhYz1ndg*ifstxCd zlU`%|IC@Q)mB}}7{VtNR%og`;Dc3{jg>38wVdB(u2G`3HjW-cE|nR z-`%!e5`AETueuyx_b+_2-QjhU!dl$!MDuXx%zr(f-v0HY;HcD>i3VPpSrSsrt#_@=)?H1hxr?x@>OHsJrdj>Qh0kr{PMUS_F?1tmkzu4&DW3j z{oa!M>hS&*_21yns~(z9UVrMjUoP^x9)NG7t^?S$zd!r}Q1O2G^Vd_`qN?s^&Iu5B zdG}VC*M2%ue8suEYkv4F<3HM}_pRQeH;-<;X-WcQ-QDb6b?=COyJ6{-FkU?d@`J~w zo-Tku@zVS88u}BYCIZf}dD^+EyQ~1@Y@;Oevm6-GkJ~)&LVIiP-+!{XH-`GLkNd!5 zezxfQQ(bR1ecj0Tc^3MrZ4sEudxd*x7y9H%pA6w|e|z5Y@sWAcg7n!zzKPB6*MQ{h zzrWol^SNK_*|6>%lyUcE&0Bl>#*!2`hwrXI@M*LF`rTy~{rv2+5PWxvb zQ2U98)V}wi+PB#M_UVr|&wG5%Wj95*1L zZa*q-pMjCczkmO9h=!216KKP7hm`Skw(+@E87c&QKTI*&kU2C}B; zo{&C*fycnB?+-cr@~Hy)%P(`({_+67EWdAk_X>ac<(|&`^3csSfb`roR+q^y4`~y{ ze|g9gVUCC@Clv?2^n;a(RsvoL_kXusB5)e`#f!Dl$oBzT;x${e zz^fGuzDOu8Qz8;oAz5lFDo19w5=KUAw!$QumV30Nql2=swrE&=yWO(twlR)ZCR}F% z-P5y_R>`6*hpF||Q%*+awcccB>=c$RiAPS}`2|B7OFvl&X*?lf<>KDn6El4>540*O z+$8zqsDEU`1!iFyht63+D>-J5a3q_;(MYXvbb=X5_MFis#EB~f+e%}s5_Mi9Cq~%L zE+R_D#xaj4ys%b@vx*eiA?#^0S)4fr18Ed3!r%6lxD_k)YVKlPu@M@PF5|6A)nc`G zsc;`9b|!{Md09p-Ss>m7XtdlW*Ljza(~@C5pE-^?Bl4iQdy_ z=Bk8_g`q1alC!@ZR!ObGhO9%ECCA$>FK+wjkWyqO(#$}Kjv?@5qmoJ9On9Hy=K&fL z$y7J}T%1mEIGN%V_p=QppQsJym!p%HgpHL$w2L8m1IhoFy*F)69LX9+zt6AW^^JI+ z>VKiiNJ1c}p6YvrKp+qxB#?lKjtcD(TG7TbPyhFuDFMbVY-5*e>7K5cuCkTe$&+W# z%#+S|nzFkQqqUmeF6r}hww`(0O>?;4;anFdjWXH8>(rv&?k(qLP7NKGo;pH0@hIvN z`4z-l`1snK;1NR2#>rTdl%!G8v9 z6L45a*PViY-s(@cjp3cc&%;$E;pv(9mVXwr=D2m}pX*nY3IC?ui&BSc7YHIvZfkTA z`fdBy>^8Y65X5kmIq$aKw0qi64$zb2jw_=b@on*AO_9^`HvDGNdSmn~CXK`LQe=g0 zD3iDCUc{JTn>;LUrKxpiZwmiR)PK?-7$ZnPt;ry>bUs*<6I*hWU1jTIlini2LYs&} zVp{IT+TEzB`a5TDH1<8T4Zv``RwXzBpG_Dc5Y^ zjXL72n54Iol3`ZEeW8)n>VG(4Fx_-qDeLo^uF0~vl2%(=O6UHzx@jt-a(As`m1#R| zC`vZnHtUGG>Lf&1lg65|FRut>&vOV;jjL=!LOOZbUdqCHb<&I*(|tL1>(WBB*4}nn zoettG9J13FEp?lg$X47moYF1im8^?r*dJQ}7Pil+3(NfKr?#t`W zzB8ULm)VvYwMT5dZSrADTlRO&y)xVRQ6H?wM2rlRqLK|2hI`emF)?SXJ3&_#F#|zt zb|BK#4pJ5ZdA+VPl7CUfRR@=aXo^z$*fiJmpx&6yB1Fi+;sk+m0e;)RQaA*XWOW3$r+cC~oSZhIxpBUDLt+s0; z+pW}6fo}FhIgW^qKAkurEzbxcP13fd$(+feD&LY^!xy^F7Jo6iR#(yz#Img=u5DH- zF$hvtOP7O6x87dM(rPem#Y>JD_VqBG_Z*{-Qfn|iKbb8nn7<=8R5GZKJ6hk~IOWlJ zJ`&hzEDQ*KIUNn{#>5TdNv}d7PNycc2)U(o0&FR0G-Wr0a33#;q3L^!jS@?|w?|^M zC0T|~0oZtXZGRgTO3V}&nQyioNmxe%f4(NMF@o9+OVa2LxiiW&bv~oVop`0wGVTiV zvexD!KOl>LE%Y1vzsVcp(MMW4h2RkZ$e%eo50$l)b0x7bamG3S$(Nb zh3Klk?YWqY*AqcP(ungGTxBJM6K5m?^U;;fmEN@F&VPL2R&~EBI`Pi#N_f}V8DYa~ z?-;wPh-(%biQS-)bTxaGhOcs~JCOryU;yf%jDvRZ8h(y6IMLgD?Orvfu>@7`kj<<&~M-VBadB9MqdmV2x zX?E)IP=8bvp&K`}85_054y4hgFHh;(~L-nHKwl7`Jfx=ii1tqF2&8#s52&6 zh6~JSlI~4{UvwJ?Q0fAhkXSYMDTVmVWYem3sehnqhTdwNbt2Yp<7{QKW|#f81aELl z>w&x=%%(u=oVP<$oFy1X{6O_(t0~1vpL6Z zh~0Ri#m&USrvU5CMHvX*inZ8FRDDZM#PxhBCgE_=pSC#FHWDiuO;%|;8q|{x&{;xl zHGe=;0|^77(V3flXBEXB0FbBM6b;+cGMNoJ%7z>b2(nWSsEu0-liiVlNDA9pO3z?1Eg)y!00 zs{MwrPO{BXxAwsRkj{FVbn07gZuZKlrp{Z_c7RYgFc_EJ6sKu_p*46d(m7k)Z}viJ zuN0w^h+V5j@);pbaKc>3Ey@_M`)+f?Zffpa)@Qyk%ZM}1b3rEq27Tz`3| zj-!rMV|tXoA?N#^>8(?<(+mTBh0yz5gF(DDAglqMu|fBMS`QPnJ=$qh*e%j;D9xIwXzpT+7@X1`5`msXwdnv^ML}lI z(Nvh2zA+w$Wk=`Cu5OwWndjP7)qiBhOc#-cX_O6H(ZFB=Mhe~js>al75$;;bD#piq zpK2iEPPT1yI!YOfXQIL5^0X`Lk%di{`?D1)H7B7q0_#UN1SH{{VJ{<>?WEV9hLy%P znO4;m!2tIoW6`~njwj7EZ#Ww;A6f4!(r7qt?}k=uv}wz|J>}`d(%h0mVt-BtNi)+H z{Ei?e=3*K4#8IWQX3Im=PZg{>>l%}m(XhISw&9RPYZWdfLKzQwEd#~FdXE{PQ6uOg znM-Jm@n}$$rxvbkvi92AZkukuQQlxeO2<&8KUh&$PX@Y#1ax z+n#dSYhyVg{xYBFv}_xd^el)WFDPPw*#SSGcA{l zS6Zj8mnAQmIj-bqJW}B>(wpqM7@lo#n_pCS!FD~X$e5zG`&%U8TZ7pwT26PiE0`{y zU{hNVg<)JokxU zZ854FCf9DX+vp1#=GGWlu)5OhDg9wTUg-Pz zkn8Up#oj3~lB~_;oPVd=tRwh*W3q~xM6(PeY9K3}QP;ukG~I6PVjV_Ow!>!bsy1Zj z_C#E8Ln^4xQ+l{D)$)8j)~YGBrq$(aS0C=?Au(gDNDizx#n`?zn{~TflMtvWs!Hp6 zbsI%SGuZ$gfXwF2{#x8l#tx6Ks&>$g23=dIg#s5%oS8w9(|_qo8n9#+Giz?fQRM}u zXnxp`jFGhQs1`44H62~IO||RrZ3Wr4JcsTLrtUncjkj1J(A17zPr>vnd}D+1{Z$2< zuj-XXwbo8FfnWjA?HS8jP%>I`$C}7DdRruAy82p=O=3c2>nS~mT*Rq~`-!HmCpCKQ zlFem#D6+_$+JAHbp({4RCc4!hAe)8CwD?dk$$qURIS#V``VzY%aw|^0*)!Vm4b%u9hB<_@}&ALm^ z1$|AUS}@or9$3z>Ej1e=CAszX1f6)MNoPYwqw(tAO$9rl(X}8YIJ0#0yzZzWx04p% zrO^72*sd1VET~7FUN6#=)g;P#nx$))HE?KoiW)}8jAk??5&e$2z_!L7kNpL?;^{aY zwIixl0e^at5*a8TyJaB!ly%jp%FEf9B5O@DsWT1U#p%^EjT2o=maHLNm4lhX+etTRib5g>G|Nivq= zIf+qzG~1ADy@BXmc^^^Zz1>}oK|fK)tIuen3J4GLI@?}Z;xcu@wI|ya;RO=n%6+P8 z)1v`30yxeVJ{G1ri3qg-?E*Vp8)O)+mVeuz-WD)sU&zLL*PXfznPIHD(UmuK6RR7x zKmeH}$wQZjE;ffr#4rg5Ww)*u+L7kFO2j+$O^s<}RS=dsdDEo@f_FEBvftk@KBG8x%! zjD3|F;VC|ZC^Z|v|ICh6qM0UwJ?Lz)4GjSv_cpXQi<&ZP+ z4IpaF%ka9qDVwt-ukWNtIGH7V%y0UHH4vHvF3rZhc-*$i`^I>?DEofBL+E{L)S~F2 zthp4D1r>EkN*qODtE8K5hNJof?<1(gEqd+o+%3>f*L9Z)& z8fw(NS(4IIOB~>1d(a?psm4fxkeK9%p~R>a%S$8Zu+eV6KuvK_0Zf`Yv@^za&1=kC z+ngVU3?a;{Awi&29L~|K)gT=@-MBS@sZJ{ER=pQWY=tLtT3)29go#?jJ}v8&_Qa4} zZ@zL#uE*8&E!&k9Nb^jY?tc=3V>Y*#m*AT*Gieavu%QW)JupDCN^QB<_mf$ZYc6mk z=e3lf+@;d!>D!@Z273ebLu#p(TSHv!j5Ie`uFFZe*>ENrW6Kk1=n>OybG>yfyfyKq zA-~#B*-*u6CfZ7;KD%;7Z-q7zBk9a@+L?~`vvIX5^~<=yaY2SVzJDljJUZB#c+6vy z@n%W7eYMg@s7cbXWL#$)miPCg>P8E_F`p`(fSQ;B)>BD$Gzfrd-_?L&vS}_CjTTE0 zGJHECs)Q6K&<QTk(SH>JSjg#QNOoKGmfgTZfxtZ0tgXhoRYZMoarNq)5~g#a&D0mB(hgJk9n*)lk`nN@vaEoE9{klStYsxfJkao33R}V}HXjy-J0l`VwxayWV=$ z=0(Jk`vYvEE@^2vHw_yYV-Zy!;8m5K6Qc@{g@~DU5qe&k(vHW5t=W!E`s;+#I~Iy> zdR=TMX;r;Vm9rf>A9ls1GAFi7L4Uh;(w)+VQZ*_z!G)F73-xum)^AM_w(1eRy$sfy z?*SH(Wxrpp0e_z{V;W+Z?sn}eugVK&*s%xJ*x;reFQ1px+BqXd(fep*vW+G|)=;dr zt?0nD9qoo}uaWiZVmQdI@_x@vDi(TfJPTm zAJ{cAF-L||e8~0U^=cHPn=-nd1~tPGYj}l1I6#{oO@DP-a@+UJG$M5$AFrkZsvT93 zm6ZiM$+7Ec)m<`HGYxip=qOWagVyAw$<$jUQEo*0v~5@Ij*O0G%D7%0`ID@>843%) z=lmY}rUpK#w^og2Yqs`AGho%usm6d!-MFzHNpnFGa#}EVWYXI2aH-PO{LR=gRZM5B z9=BEdS%1@BTLYtwdRs=ag(N0h%&y!MvVMMhSW#TR*8)JN0F@LCj90BWR8<**<_j!kY}@u znGnl#vGSLzCF)F6i?wCSY1S2KMKuk!l<~3s9U!kp5qm|Vuc|@>N z6eV|~b$gwU-yz#V>^GJ=G0GY=WdtN=YG}kdMiRP>IW8Kbful^y@m$Bo7(q>1Q@Z7G z_J3kvT1H!Sh)Q|pii1#`H)ol&P}%C-%ZAh%owJf}`Nl$Wo2`ICDwL|*A!D*)Kn1O( zv0v3Z!?F}@lQkp26q3D5R*jY-g>jeJYMX7gtV}oU28nw3o=%ii*|B$1gmkSXTi=e! za3MyUd6TQxk-j^jaCfRC2w%!Z9Iw^hG+p9++PVUy95rnNPhrL zK(fD!NJSug=>7LAlq=;(31&@ z;|L)pY_~%#*3L-4Q(zsf%ZS@=14}$9XYG(nnf@BMk1JrGT3SVGj!*{(RG(=_EaLUU za8b{aap3yVbW&p!pwWQ$X?vUAxZLayowk3ExA9SIwvpi!!2AVioDf3FtT&5#H_p5`GKn4I^R+49CTD?& zU9`cB6ahmQaNQHGE20tB@9&UJD$#hk4a`MRvb3@lvBQ8&+*(#iA~|2vA9%fG^rWl?8d}iT`lJ7LMiW7 z^S#_~s;JNn)wv*8p&|40Z8#UR4at+uJvv?xBfUYZEp4=0$(4O-?KX+)DnhvvM)nR* zhM2qA`iSO?7jjS0+G9d)FXTk0!j*p(NBlx^{MA4}_B?Vr z1wrG>4(OD&WMMX*h`>{1fhE`3kibwKX!})2QX1J(r(y#eF=DaSla4%-WSdsoQZ~^0 zEuk_Q0!$$x%S`E2SniQVe<2CG1W0^_8np&1eQ7D&cpc5v@i;9r^Vu}SD*b z0Wts-xfv#I4{xJ^PIKlc?YjM*+)cvaP!|jQxT=(y-Ez6h1EGd=)?0i4c*&t!LbGG= zvEp~OPLlJn+w*%qy_|Z>p+~k9x3b$MQ+B>sl+jrz%#q>d*F(O!4uF)<>1C$Zn zu&Hp{MYpz;JeRTua({@T@?4{PTpO*ca(`MMu7t8(^;R`S@_IfAcw982sl9J+W0D_| z+BVxPm%Yj=@b;XaIP$btq4hE&ZI$`hjrKDxM%qNVwgAj$wP=pY#x#G#P1&D}S$08E zoIzt2flo}QZ!*HTA5rXZy27ZX5J_SXNAkpqS`<4=cv-4UJSnvTVD7-s0yXRhDZk9( z9XVp{y<@XRJOe8)R<<n3s(7}dDeh{=tNm6r=iMYeKesb;k%*0joK zv+5&cxoh?*blhLJlzo4e%PypnFgtI%Sg2uR-%TWnO9%a=U5g2MHkt2vd7LeT#tyjk zz^@&R2tf}J%N$w_!>d@``Kr@FCr)FB(`Ikqb4T)GK>&XRSnElQ$+LFF@4HA68DucS zgmgM1S(94X>}a?gXfa@FjT z^D@y*5{U+Mt4vy9XBLU*#`m_U+p-w40fY*uuSvGo;rA5R)swm=I?SAtX7%AfUJalQ zT`Np;u&aOKvtGKcs9uA`)Ubjs79oxfU1J^#)liGi)@!MJ!p(~LP+brp0LkU*0z z1X)JrjA+SwCY}o83>BOFT-p))?MTtgP!4OEtVMr#I7p@#YW7?aiz8#rkLvY7#P{f> z)wk&%{IyHIQxBWV=j_74uYOv)tQ^DAHI_hXG zhG_%uI1uR8Ow{mdl`GGOOHS5W1GbB{Gcp{-dSz4LU3x76YhsuAO+ij+VnjPEHgBUH z+G&5bbal60)G60>$PQJF)s05h>$HZZ8(}}&M6K;W84c>Ox#eo{P9+B`j#)U>w9^dr zN=4WVkm_#TmF4PgE)8k5nHl4l1Cw8`CzI5ft)#?W$$gL6WL17oD~aD*b}QN}+Dp6| zMHo(Oc`=@>nl=Cc05t#r02SAAy>+a*`(1xcN06EqH3DHZB*020XjPv`bq#g9>Wpyw zVSUvK9MK}{oe+RLA_tYpNLfZ`SsaWLWw)Dp*?ufziYbfxYDb<7ELDYVO6 zh0qd?Nz?6|mK6$6wydnQF1PZdZIeYUJ4IV%v@)E!m9fh#ThmnO`iu&&s&6c9-|BxP zd$N->>yo6Sydy}Jy|!Ghr$}|`xy{($SoP|@QLkpb`jDliwo{#ITmnp=o)u3AVP%yt zJ|1;y$w=5n(rh4cZKQ{;7t~Hvn`n1dtxwDK9>-ZNc?$fIIy$E0ZifpHDdnWy1mF9! z+MJqEKB@p`Xj&DMh^=@&n<$vD?DKz7J@o-%M8h3MNMK5}pd%?8F?L32?9KVgWL|EJ zX@1*UrL$pm<|GVT5%~c`id7CZy{}# z57sEsTQSRQsfU5wckEzPtF2AjwhYhWm%+dfeIjZ(%?;nR!@1H-oi?rvA_mb&d%R|? z{g~+>YQKR9gV5rUX(Q0HiG`b8e@^t4qEkzGT<&*0x<%TlyQxi-$;Kdf+*f;h)hc(h zEK4y@-?!5Fw$)DzN!l|Vtpk7R;$gX?>{GV``e&%1GanAdtuR%~vOU)-WwTGZ{p!wR zs;Rp*(Xp_UEwYIw++t}68`4WW*YI}O9&ZKybdn{EnKrYrU1{Sjm1{Q3-TiDIj)7WZ zt*U1>2?-kmyCn3-NzbY8t=gd5rRsfjpY1115)w$GU+FdRIPPgpMO}aSHB-RYAV#qX znfUu2v9rgVi!E#^HR35|H!V7t^ARy4INSw-!`*hrR&7%8c+VbL(RLy)nt`tjD}gZ^ z$VqR}8_&IkxESxUIo;H|gwPpc6Ehi1MLh6?mRxIW6jo*xP7~H+e=ziL4e_TlOW$FL z+!uGT<;nsw($_Q~w$y(Z_I8+E-_|kKX^3NWI@;8Ex7tILzOnP$cowxn2rS%h7ZkXg|+ znqiB!UoJuP{TdaS5B6c~wGvz8Bv8N9z ztxY!QZf3xC@|JXp1U=iraBXjSww82SL1#HkX;ujmR1M~KHJ;JRs3+(ZbT(7g%ek=~ zZRAJ}R#9!x9}M~^;tVWayo|``LgW zr*UgGjkK64uXf0GtL_`78Ze2yXN9J>tPq$`4qO~TvS=DE2+7lk`hZ@NTBj}}J)Uva z{&Lo^j1k{$#A-9_p=mE$PML|GRQ$#)O3?w%yRJCLrsIFTCHIM>vhEIAav#B##8kzk zb(_EtSE%gg)PB(1*h^RE1>YBYV}+Px>_XZg%DyqkG+plW(5_jb+k3~9*2ahys#Uk! z12`K8GF=`4spmNra^PDVu_8{pj^~#BW<6&8A+N5{Wn6E1M4(GLu9&N~i2+Yg-+e@<{PT-e={yUemp)xRZEA;%Ud5szfmMXf*W7M$M8Z z>~xIPDtseuB6Z%<)?{ljiN#oiLlnEGfG1U@GE8*HLXr&W}c z6BO(C3T30bS_Lk!8B8LctB#0iV}{84veKnnPE~)B`$DYh9Mx_!x>T-ohei$fijCb= z^Cu%MSVShH*;H5C66`=ndYM#SE!V-uRk7B7OiavWd1`ty#*{o`+!CssHCw9F)q-Co zNzYzl_Dq)BnW+x9i?Pc&b1EdP)LN%8RviFROngkMG=mk-mZRMOTZQgQ9c{6enMl^Q zu?~M_xr0#1KHLDmuMYfNL(qZUG>D9*j}Q{O)f@qxc7~p$jn?H2T1ghwvF$C&J9)Qq zQ;Zl41J7Eny(T>q1xy8%Yd*Qq9EOcEe?jAR29eQ2IN?uMgFF zeQdM_YK8&Xrqcw1?QDCb^vm0kjP(+9ghog@LTVS!iB!hOr;q1n|0&?P4g3d5Tq%Ox^aE(2qd$TbesMmI06Dr7NWkw7a_*87IndUkP6UFGSSdJW$Kn{#1(PRT; zLwTCC!oHLuIG=c{?s7Nh1|8CF$;5wFvMqi#Gg{;RUQ^eDl^U(rN@Ld`R{$s4Boa2J zGg#CarNx4^>dnST%&=67F9SnrXDbhxv`l7Ur^_AF0gj*2S@6slP3LC_gzsPm(pRB2#aSo{fc{ zmba`lFmwIJ%S)<<gyVFavIX(8m2q)d{W?~&(CU|$myG=`RUW$?V0E9e#MELq%f^TROEjGIJ*RvUzEMr z6U_V#(`wwD-LpM3Iu?B}?BtUQ?_n-3+lt^%k$! zN=@Rn*{JvO*Be!{KZj`u1 z@C*e-L{mjd*liubKY+i9JkR9^@E1|bf3!Ye$ZZX4svmFwcs0+MiC4idShe`6af>w@ z*$0?kv#KJnk9wnof?pb-QlnlifxizwTA-_Dv!;SN4Lr}HiNd7ow|Emf{EXk?4NR;y zKy51rQN)PbI_!U!0G|jrZ2bdTyKREe(dsQyZ61E>VHkRg0w{^wD$;~0Giz{4B?xEj z_zMaKuE9LLx77v#W?jFnA&nfqY6X;3g`BdM ze7b3ZxnQ8D`zc61-F#?XU=jGI+Y-KnzXB(4VP59tKE8(4E_Qe%`x?Ma%1hB8*5K+BmOuyqW9Uce$I~d6FcHfz;3nbfgP(5vkl06RjgDn-#J6p zpJd2qn6e5dgQ0KCm0!!5k8$Ud99nt6qW^-L^ud3pB0op2@DDlB?q0DvSFdOF?!7^M z%-3^MDjt~o5{x|Q*8@0;F0KIOkiOz&pnM6#p_|VtFvKGHwZH&U0IL;$Eij6kMxO)! zwNRWrPWQEtB&n~z77Sp9>TVDMUM=Gc8L$~IsdAas) zj8WPJX=x+-Kq~~LSk83#Au6e9oCKb|&r^S0#_xePh~lJFpu z&ihhg>3-1<=nqtYuS=DTDDXguoa7B}!IbT%;S%zJVAjpUSh5=jz{PX)xMU}AkbF?! zjz&ou9tMA+-+xt7_mPqZt9#M`IW>c!KUj(9{`S-YKIj1^V|xni2flooQ|~{#T|j>W zZ~_<@rnWPHyPa3$bq_erRK8eT4*3ntg#$fj?Qswur)mw1k?7Bm^@+5jeDnkMpW}s# zvg`{|e;sxT75pT?k06i*y^7HaRee>|lPPnOe)HFAxz92W_;?w-Z{SrsQ`1wpKrWWN+V1o^1#0KFYemMb*g0xHr%zrue$Ho*HT zl%Ar)h^Urp+k?Kl1@2@6ftfE#c3gtY;CV3JX;Eo36{u1Sx&wyt`=Ta_V0d1}k?a+) z%mCz2#lrNkss*~`j!F@xQU%aKQz3sv96*{t^VhOv z<(F4!=v*&6Ag?=g-#jkxo@#$|H6iEuRxhSieNF{jC2G%LDn=<1U<1K<@AnTy8Z{Uj ze_HS!b=^Vy7I|?WwI5KVfrJ-y-fz#2k+*z${?BUsH^5T(eXxY#uf-B*`Qx!RnqbqFP7laHRM*U8BWFN)j1w1`F?`s$Hk&eMj>}dH~`wzih|U%-f&6djU0Z4 z9!LCwrTr35_puOy(hq;h0oLccgn!`dN{8t^55rp!)syb=i=q|JM;d;LfWk)k9H+j& zyC#@Gwy9EAw*AsOCC_2+!?$^U)__6|Xu0yCBx|cQPU767HsMF;x5Ho5GyBqKq z0t$3LKR*z{AiW)f(nMDiUArw&vTG}moai~^a>;;!`dog*B_MU=qSI0gdei+kiP=Bu zqNDXI0`d2Rad4GJjr35Llc#0jRT0)#MUjiJ`)AdTR9F8TqzQaE;o4v*T=%aJ)n7uL z|0h75tZ6?T-ll&q)BpLWBrr{=IAu+R%nf<_4N&@s%6|=_?wJBDDrwe_+n*u|MbQ+Dvz^O_@-EiDq6l?*?q%3&C>yd*I1ZmEAhe6cb{(HQ!39; zD5$3da-&un{7|P#?9N&uWZtks20_a;$KHWe|^J}*4gHZQBZ|uan z)&hV7zL}l%6%)^|k-WV-$vh+&J1y-GxKI{;B&g@N0^59F!IkoHAddVguI83`kxvfe;qsX&#Tq% zkyGVQO-}z6mh3lEHrC(D<^e|Vzm?5BeC+?*mCav4+x&Qk>K;wi{?<7EMX{56OW*pw zTU)~5;_k_{^R25qNf9s z$Drhg%Q4B<#3ElEfxI&Acsbs9KI)es9agen(+f+i*->#v>eBu3S4AtHj!-wIE|JM$p8t4ki|j0-`dpp+Cg`KJuaF3r8R}&_eV2LSI%DK1zPcJ=|NJW=?4q^u zCg^{v{}s{om^t$}#vU_bzR2r#o!#=Zin>M}J-My_CM#e0E3W(_ro|Nq`|7oN#AJAu z=AQj{>C-hj^eN@}s2%+37|b(qmmjT1t-tl?%MgbDtw&#iuKnM7^uJV(*8bL`f9ugJ z_2_dkq-WzsKU$5pt|j)zuk-#lDN*XLhpvBbr$WiU9(g|{}t-Dc_IxSM>)Z+p#=UAln#&5r86Y&Y#q_T(Pjm?B=1l;YlP##oho zcqcRd+9U^GbD#0?^)(||vvogtN&bk_lzu=CiEoq$X&ra_H18Hz`%+dsLt*~Xm545Bu9UVZ2*@tE;1~nAq=R(6bp*J18bk>Z+c&n!B6)y zKR%ZQ;?Z0RuQ(d@DC-zsag!a`Yz~;`&nfwH%?`;#j$XnxhdF&)c_n@Y(&I!Ac|8sT zKh}R*o%?Jufcpv;ObI4q&FAzN6INV7PiI+Na-;)$AIOa$1wz3JB6|;Cr*eNwcNrK; z5GU~~q{c}|LYyAyI4M-q&~ngd}=~U=rvLt#8Pw zn?IFs%D{X|xeR`WbpA!cI;EZmFj~ zd8qcQDfBCt0t)rOJLM-oCu~ThX$;j26z@PL*#MkOkMf+}UuHXhUvhtSIfK<>*kNHy z=Wjt?NyB@bc_sG(dh<>|#rR^HbO zL3uZ|fVR5Jx0bsGvSH}ZE=QXfQrhNh`^yhx*6c-5mbYM41FTK4G=C*dJ-j$TM>3#Z z9ynwlOLPF7zJuiM?IC}4)xp0%D<2n6_(Y|tSUM@0I1S;ess;Q9Cl=_SBC{Xl)zo+V zV3X$-1QPf?XjB6KLdO*HPQhxw0M3hc-~-@=BJckT*=P#7GIG4;*#L9Kh0rNFOf49D zL6BItz^+ul4?v=)~NB%rK1x@=nl>L8CH`vW1_9O5HE!)+u zm=jqX^Um3CY6DVX1J(IiS#5g93MEGeo=wgzc{D9I{SL}8fuS8UF3B!{3@R|g-X8Vo znTG@vSd{C_;$~oGTa8Rv7T6gR;2QjGuh5xQNArr0Vfwk2O&9D zvJbN3AQ?(#P$++I-+>XY*s=|v@Q%9Q-F+wCdn*7Kw?0tUH3P9iM-n&t>-g2a5{6iC-MvKOY-z z4;0w>SOP={J*d2IU}N3uHn+L}QviTm*(@nQa~O~~^(cOyYXe{>sez{e4WShq4`-W+ zF9B#6-<|D{|71acI_)md-B~X4m%0US&uWSFc5&D0>1MPnY+W+!__NU*CeiNo+gAF`K z@UaA6n4KNZHhp9MI}Cb!^-AoLMab@B{$A7Zi6vFI?whp}0B(6xOlWj^h-bV1w=@ z;I)68bAjI!0+$zB2)SQ*2>-n_+(^1{@E*+F0Mobf7=K&}^64fPm_6Jy$-|IP&~0=e zHV)eo01-R=rJ~~IKAvw%_XG#D|75tc;DTBJv-&!P5!Rqo$B`}G0II!))s8tua?$xi zb@=xCZ#3lQpHL75Zz@*y7u>|-yRDvBp#Xn%2R@*SpLZKUKiL5XHSYyl9@EHY@E$OV zT^R7t0tIwYuql*WD*PNn67RK#3=FD3i$RZG%)5R`--dc*!*}`st1LK$iwZFEjflg` zF=XXe;;*vp?MkocOJHR8}$EK&NqMkz|&>V z#gKAvH9b4P`W7K2J=5JF1X5}kX!_6U?RNZP3nIyPF^&)e;gps(mJMtbsB&c62S%|R z*+B|5jFOsWZrumLwSx7nT+%O3W1T4EEgZU>3Su`%KB#F7lO`Q9QoR8=2rxcYqzi$# z;{cZ7)$eb-yb=udolbX{)R{I7jsXqt}#Uto!YuYB+ByS+|(&!qV9vfbOSc*p44Tr_`|7v)0A*lX8l z*cq1C=j*@n8L0A~6M=bhnwMaZzoNk_QHcKaX|N}JLlQ*(3rG+k@ark?8^2Dezt%lF zsIS-H)V1TQama$YrE#&n`)w%Ee*IaXufT!r8^N_W;D9Zkl$hsRyb=TNe+UL-SB|`E zQP2e@r)X<>P?{E-KyQD+Q{RlK=r;?MUlwgI&$)Yf1vDVmK8IG2Tuq8}r0aWNJIWz^ z#qZCz2;ZElH_GQY_5Izo2!*@-^fgIRU&-6<50LMk?gi1+7@&44@J56-PY!=(McMu# zQ%QivUjuea_GC#n)nk$s3gfKw>{LZFxTgqne)C@L)!MX!u%;LR3om zUFPdev^TKPenx+3ci2YxtjMa9hQKh1lOWPxf=Dh3zyicU^fMD@@PpVrhQXq%IeiQm zJ(j)DeLh?KE5)AhL-25-vV4>0v!!|VwJ510mHfy*yyo_ec(wBb{Hd2a0SsLt(K9?P3zg zLvqDD@;pix8s}#gFZ7`3$p+?dI{4JZ3HdjC1<<;ISEV9Q9NX}LOVG#tS>HQl zcZIHb`mNKeII;Me&*X6f@{zcd8>CwPM5`Of+7mBvmx^m3#i9LszZ^zBpz`8lsh3#q z4d(sAS*GDrb1d%V6`~Z9+H|ENm&5@lcT z$yx5ZYd3PVFB4qgR&RLwm49`P$@18k4NFL=SeiLBYdb8hj&0Y1dBt^Fnx zzr1L6m+0Y1`n?+)9<+JfnR&Hi@(5aj^yz&->;d@UE^;vr3W+ka3IS+#U{1N`|A#etNcj8VMc4f>1P z{^GY&Kk$DBqcNGgj z@?SO4@!;DEg6EiCcJ=5d<$2&uKNDv!jA*vQPrsVIPnUnKAOb91aC)H0?&r^kP+GyN zIlfM^ojP@71ZUE=NyO!{zlq9vgA>cf(lR7&VPIWJ`4@POfCPiJrn5R>l)>D=|P0ubgD$x4zi{#dCPfZ5|)GYCvqzf}XTl9z)v;Qy6>WO7vc{8`?} zHoRH3{$Clu@myL`LTO(q}-aDa@Z6zb}7r@9%Oa{!;o+ z4)>`E@Rq{lT_(G!4$6T0l%$bg%6~8NDgwhKFiKqM|2=&CSn~BviFRj`d%D`La8hy?X_u)e+)*P#dWWll|-39po_6 z+<)>%-QS&Nd+P&QJyd^zkd#z-z^e4_04wbNT@K~}$a`ZH<WK^>h*A~a>L@6^^#4J-y!0O-|J>FKehQ-akDLu4OC+VDFb2>Tw2=4vvGniLwEmMD zRv$|@@SmIaxvdX=17ks!e_x92J@_4~mHv4DWgFPrT^nVW=%*Iw#Rhk&-kJ8JgI#WV z${qBg0Z**}B65H4E>v0GcL4Q%hP?wzo8P~UwH5DEv>dLnN zqIUOltG&8qkt^y&?H^=-c}Y{4ujfUe-o3l=A_&i(uz%6|-Q`AprrGcB&xF8{eW6@C zi)-EI^#8zYR6vWQo}x#;mO?p-^@734D3W*Yl+-Xjmhyj}Ti{1MdVi1^@tJh^So%U> z9IJgS6`c4B5R?AySNM{J2qom91Hb{Q zBX?in*x-K)ROK_)r%zBV9{X{oOlRRnJN2kuKmL zQ1jn+6>lMP{SM}tqxBwH-s|tzi+vqH0$qMt4oH9cKYu)EcmDgG{y&;wK%5-3ctK!~ zLvuE@BAZm{-Px2N?|iYcFe7lmLmwZ*EF9+FNAfC{fB*GD4+n<)vX6TN&E@2I?CMM0 zoM^cG>19&S%wGOD|B>CAJ0Ziu`h7zg&Hmx-Ee^M1Q(& zpvZ1%tU&wyq$AEM95qA{AQ%F>9W3<6Gq8VTsIK!u3`fG7I|Z+v3YztM1=?c;`l$fE zNO)diJX&I&O5h8HX9d<{1@@@`Z`>_Ay1+SAMBbI?{%Hkim$4bK2@t!sT>}vZ0+C{U;YlysVOM@pUwZA+OvVIQF(v1 zx1-f}&P#{*;y~ZU!$7fJ9VYY34OwWuUaoRZSFqm42jqXSo?y799jIrM%GW|SfaP;T zJoubKtp4-C$2{i=_+EeT9iD{(pDSmd&rH_*g|gScWL<&@e*~ueWteK0VJaRvi=TjM z29Jhb1gmukEb0-k$je~0zXa>>Pw{`s*xieBpz@)vCMWVF)l*$N8J%`4#YLL-k0nEP zW4-w7$y=fDziWqz>%1KdAl~%{T~@d|-wyoy&B4qwJz}`Cs)cm^m|G>qCzw5boF>wp z1)SRF=q!$ZwQ`a_Z+BP56wm10F9OU`q(X!fDE#60VVzTYx+1;x!{Q<=`S5>h5htZ! z{P$r|@t{uuD$FwTWqEN3tvIdsSn1(p+QVWPx_G>6SV|QcFTVsC%-yqn+5O^sp0@3f zwe51@rLl?HF_&78|B0qmw2wCJ|QNCMr@gu1^k9@yepDK3DE)bO$KJsehw zJJgSqJvGclv=uo4gcJ3immfq`aY9u(`N6^?f&1o{m0*8w0mKG!jGB~A z`xCif%#S#qOuqbdi*$dka4X=<2!)Qq|G6^_Z|`LGxm65nomJYz58Vg2eR1{&$^WLt zqfv*NGNbOjLNxz-%ymZhK4V22b}T$>P(77&+V={;M9+Ucx|jDLy@dz5cJM%>e#z&_ zJw^26FuV^5&Gfbb#-gYk32p{RIx80I7Q+%=u92xVo3W!U;ZxawL1D|GfL(Qg44cWU0V)3;i@U{$=K# z7<@M7_R!+DVo$GB`rpzB2o|VRF4z0zkCG2>E`kdAD1{#wm;Q68@bBNx1Axb>(;yE! zK*S$Eoh`t@m&~i&0_mCr(4@SLT_84Y;mZkkjb4D1!~BbA%O53MyASU>3b%#MAQJ#5 z_@ckNDU8{3`a9G#_2jG?+}hO(xIaX?aRYk(^r-|#KeH!`hVi|IhyLFKMRB6l7st8} zJ9vkvZ?PwLDFh6lB%#Va?1-Lx{8Rfo)pYEn`0~pW02`L|m~-@#Z?jzzS3j>QLaxIOM(-sAMk9bv@N9p!td=c{lAIUuPH?C>7= zXP`gc+iQ6Q9)Y;eCI7s%mie|lsQMoGT@G}Qzz1M-Krig{+Zmi^GBCAo&keX++mGQy zwH1KOPauCM0`fF~aiQpDv0VoGJD}%6H(&BjarEp+*IJ_4y} z?jjWjiYq4fGNQW*U$2<QDR&AX$<(61d465%5xcHMaAisfvyKVD>3zFgNA=i|S*vj0M1 zJ@|kA@56h$`QG2Bo15RC)@lXRcWUjt_0!tyUZCIsX~N%reYDMUy6aM#|G&9s?QSAR z_B+3#>EV#}#&Mhw9&3|u0)d4cAS?+pcdplGVkaHq#j(9^hmafk{`RY?lDbQ;e%LvC z?wmP|(=C-sQmIrb)dO`7WEUmib1b_{ayEZ+${4ZBU)`dzl1%A`k7;w<&jo)>qQ(-$ zC}(&$odVsbsQ+NIXrH2BI-!tv?)hr2@JHvRvYr} zycv&X!9bo7qz=I7O9Zh4~}#wBhOaUP{5*nM9vA|33^9g+9V>qp zgRdXK=^W(M@c1Bf93VzwfaX%R13)kaDjUlrg#PEbSwgcfW|lDvQ8rulp=mibL+YH{>MXLhlg6qsv`jG3&^KsE7Z z8HJLr%5`Wk8D{xiQi~k1g1w;4hYIql$H`)UGP*=3XUqocH006ytL{7Gwy?e%I9u&j z0U11dp2W&zWX8YUmUKySqobSfr`X&D<;{u8+5+jbXSpA68aF!mp+j4 zv*>{&0zoVaPNo-b22a}Uwi|?|;sqtHr=coSmAZ!*bm5 zVDuA_&73>X7Qcz=)S#XJt6T^E0-d}4k4@+H(O=1yJ1^t~A1Er4Jgvcu>HvG&WF11|w#G+9go>;QyWI(YqxoNN+9 zBoTezp99U4>K{z{BHMrbw!sM)>-8wv{mYw0+(tX1!T5S`lLWuyh6`DNttOdAP_QPH z!QLGNk!YdeD7~$f&K)8IN%H>5@nBgPgDC$4BT2~~yBc|fja&~VizDR#5j@1df8#C< z^4$@0R*`zOZf%7j~d zfYME)TIbXG>%r+oWZy+b)L_HV5R#yP_O{3j>AaL_8ML8xoJMVI{d1wSP-8U32f>H6 z(~4&I+bf=+?MAxOsB&QS0)w1J-yXAvsfbxLI%_ceDPHMJdf`NpSxN0%(MA!(7Ky7 z&pm&q?*^~CS@+B{`%chWdD+8i*y*@V`XERZt`f(=chyckzRRWJI)dL3f_JlaY-PY5 zp?5cHs8B6&N0_d%s#2frwSF>iD@{mN&Qv9(M_uYd&&Ubg?|IW!IL=zRGNxuj&uTWr zH9a+(n$~Pe2r^QQSFfEnmD_=H1tXj%7K?w-$iSG<(u;G;Hqiy7e3CXg}@Kv_Ohs1F z?-5heNU3Zt+yB|Q+}f!)nOS8pG+fMY3TM*ooVL_dS|MQa@pYPhIZD+rJt4Aq2Y7rJ zk{>Kf)16GWQplVwwQFbvAac1vHiLi1*^M;UkJ^r-ZkT#OfTq|`u>a|u=8w6Q(Je%h zEU>4Q(FtHwprq~Rbsmc&XmkScB0HO#4{li>l@oosnVi0Oa0~U*hm+~)K#bGwgIl;8 zK0vz|(80nGM2+-BW3rH(N>JnFC0tuypq0)F{rEzGtIUqTB7#@2AR))t&!2xm_UD$* ziNa?@QN^Sy{O3gG`TFN1EUm`OxT>3NrM0K%YKbWdet-AoT_7e$Z0%_6nhiJjH~&p6 z0m105%q3L^D}b|^AQXY#dXA64;$9w_2ZBmQb8KVY`d2cYL=Ee+^ko;2j5`Is#6=lg zhN`Ha)rummOXU~_j@!i-ecXQqzml|40s_5*@WNzpb{2*1Sj?s1GRJ?f>{AJ=988WD z0bB($h&muG_l`fjhim7fH+^kx*uj2ZWIMxrvj*p7eR3k;HAF-9H> zgV=7DRZ$s8oYk}#8@w($xT~tt)WYvzXM=Lg1k13pu@TSb(>b3C+d!1ihlIWI+7sB} z8~LY_ztm?4lp9Y(OW+&@qvZPzE^Mk_s!V0pENAkh$zxgIwL~WfKOG(&hdkiW*-a;F zUq-c%5rHGylLg(Pq7#1>QS2II(>d*&XvlWWgjFD>2e(Lqt>BY5atR&)28yCH*8$Ob z0x9_>80#hp4u3t-kCbjiC|CzdWh#4D>tY^*m0u{wN8l=LFtEsYQ!|Oy+dwNn)ktnI ztu2v%z_D6e4~elLj%3&(zpPrqOk8&JcI_+}jn0L`t~00ykEMU4g~P5)Okhf2?($7z zE_}r0BP63|97)Rzl+86WF69H>3?Av`!fD}xy}Pcvx}91g4q4{L=(*;QfK>c$pY&r4 zjv>|N&W{kzn;4*NJR`nY8thgw8;=%|5PKc56)EB*SRf!`@I#evh7DhNh>VCBG=q48 zryU3;4y(Uk94vnoBBOh1avx5|+U*3re%CYbP~8+OWrO(1h{~GCs1i<#|xl-r#VCK6gQfe*B6413r+Oi}`=vi58eLcL=kl;$m?*_LF$I z-0N~!0#*lb9ov2#&Ius86>63_llp5*NvWET^wM6N=#_2<=)i$RaZc?`W_XS=DNWR& zpc`U`7w1jgdC*~~g{kqp+m}!N;sUx~1oKQy*~t3mq+n9(Yn3(K1`YgT{}Wn&7i*IX zkFE9&wz+>`C}1j=E}x(oQY1yVN)(dh{wMT| z%_K=CWai=?=9@%86y-_`-XP@4@Q&olt-o%!ww^p|0caPO==yc_h}Ty-85`!-M4M~<8c(?&6?<9 zyt_tl*7`zXDu}yT8T48Xni7xn*EnD!`ljbXknodPr>IIlY`DX8mi5wGoyGF321A;Y!9>TP|Z-bfLpFGNGd3~9w+69E7p;iWgQi=vgMdvLf6`5JA;g7*v zh(VS$o&pW`U4XK1z11Me{PP+pEu?T2K7jt88VDnQ{%;`=^!5QUT7#g+SuPw^Dyp)r zHazi|tALrCprJ9s9X_OsLWZIf5n{NExWtxAbJL#U9W3sja*`rf(q{ zS@uY~@%__9#mWo2au&9?0sxtN(Yz;a zm1mF=CwpzKoC&LBvce`M7EHoMz_YuwRQiMhRaau9JJdYiDD{HYvXvcdz>}w0_~_1t zX}7BNmD`?6S91~XA&=SIszi_5L_EoP=cuypK=s{X#>bCPJ-Wi}^MIZA8LVPWjMnsj zI|xE7+Ge#K>M@m_y3xJo3mjDpfJcv7DRNYPo%ejUCl1xY&GafruEdYURQW8!Aa#NV zw+w3f;`!!mPgH@R)xkjKf*mKSj(CSRf)FkHOrE8a7SuVZ8b$SwIFVsgy){^7daUws zssgW8)brG`loF$`Nxgf4p{94U5y44+Pam3m#^0`G;Ky9VG4(2(F(zMS0@PM3bT}uN z`)1*GY5K`}cFr1GmD>rTz|dov9opYWVY<3%SGzge;ad`8H_71tE3^3)-;}Zl%`d)t zN1Q5)O&Nvz31qld@%CimTzeP7Knh8ZH`>QchG5Mn`eE&?jLSH7)|Eo!@vbI+Zl2oY zAPpL;&L)6zJWK*lGa4^#C09eTm5kcWV0))gmy?L2sWPIB!kw_Bv@IY;1nZk z)ZjLLj*~W=c`YBeU4DsT#LDwsrk3Q(SxB{GkPH__R<0H=!JCle>|y-~0-xr>FfDb-I($6?9aT@$*Pmu<9`X75w=M@sKk zJW7Bx4U9)#@NyEz2t^RjA)apt4mO>~`88Rd!jr#)|JL?F4tWWWSMWH1$7^`JfydwA z@fIHM;PH2O{0fiv@c00akMKBz$0vCF10J8@aRiTJczl7!Z}9jX9{&Y@k3Zn?-)l_^ zp#gjt!s8SkXYh#OaSo5K@VJ1-2p<1}$2WM4;c*F%2|T9on8D-U@R-9RfyV+KSMc}_ zk861RfX59y{>On(8$N8oV;dfi;IRXb$MARpkEif>29LkOV*?&7c>D>E|Aj{cj|M#M z!{aaT=)j}7##@vLcuy~XARX%24}E^wI@g?@1mC@wr=eL)*>^l=(Rt)&CUeS=vYMqP z?C89BruJh^3hYv=knVPs5VcyR@Zxee6f}A{7+YU8-Hi;lWc804TMTwXNVECymmh=f zkEc(bS!I}rVtyh8oNU18&EE4(8VqFzlC5G&+Pb!u-$EZB9vpUmfF2{MoQE8HchGPI82$jEF^6$57>ivt zKBG{Uo7=B@HVEBP4f9ae0b#VCm z$D>#K?_c9zn35NMy!_+S{?QTp8N5BF1DQ~)ad zGb11jfN;u!9LSIeM%V)teFpq+jWl*D%{Gou*MJjSkk1PsZ@VGWkei@50000t0000r z0000n0001gzgnO#3P3+{gT^^DA&)G`|0;m|*bNzp!i4DMg$Z%<)K<7V+B?4X4f=7tWo3aY}IFl%3FwYQ6E(;CuT+bR1Zqb^+r z4_|#bIzIehH9GM05Z5M)bWM3X++}h3>O4#3@<{l9t~DP~#CZssOvhdPm6;9Cs18L{ z#_#ftZP^Va)B)Pe!6%v%M@+b_I8#*`jb>nGLhJQ`(E_d)@pvZAT4qv;x8k+2hr#xB zL9eajBfQ5Dd|V^XN?p%KXb%a+n!$beS2B9qH=(&my{?rbk^=9ki+P86q)azrl(2fB z6{ygE6}`OZllDUEoQ7Rw6|AWMkd|5IdEM3qC?%a;u*&H_J5$?Tw@ZueTQ746Gzu2R zk+06uDQ19vERjr6G7^_=HA}DZ%`y|Qz|7QRP7HN6;3l*%VTlh?<{0JxlXv@=a?nV{ ze(-&ijE1A}XmKNC-WcA`>2eWnVr7iWhHp%NG-|U3M;iG3mbV~AN+(e5JiO#$8YF>4 zC|6Y*tytMl2(!$+*rr*A`q<8ZqE)}oG+D-7r%Bs7)Mg-4yB35_=9ZF`Jvyt9nzX0l zR8qwYwyZ~HmWHw}RfsNAiR25rlP;fFs+hv9t-(j#b=s@DtJJ&ahFdM374oqm%Pl$3nMjN-@$ENNyQ&OYfC8?Xm~NOX3Dks%4u5ekjkf zwKRqIXrq*yGR0v9^9gYN}BlTK;qbGgPOX#SMh(swNquXGd91bai<89gvhyi_z zZ#n@fN1BxWf^uhfFvSaGjuf-Z3N_S^;Ab$ox*W!H@k4FwL8>V+a$?EMhd2tP^v}?c z&3o9Ts;JXo_Ew1Mw`sSiVox*yxgD6ZKi!v|4#ui1MC4h-mriy{aCUP{AsjgJQOd7oMJ|Sqdor*M!z7}DGCzS9uwc`nR2OvYQ&H;-V{T2G6lQFxo zNYOtP{lh3(R0qT8FX4}?mdtY z6hLjm2pm@6FW1=+ietPa^!5{lKI4lhXMI${k-ZtFTTHCx|H=5>*;INSL=pn&BH$pf z&kP>B#$7FI68_mwSYhl7KOjnj{$MkZ_r@%_=#)Gt+`ek2H(tqg0pvP=*`&5!ED~?X zr0jMIQ%PZQ7}7-XOyycGOPrAhep`FFm@ZIDl)tTXp@A5ljpouKRSsl9%p|?UxsIm$ z29)&(0tdjqU9*frAHQn3YFHs@p$p2dtSH{V&IXH%Y^MPnA~z;=?d@oErq>go*%#2@ zE;!0BE_~)Ot_I;h7uRrq6m#VV;ch)Tk1T?Mk^^_p37cibPafO?Wu;;;a5mDDq8g2E z(N_SZLJ@k3$a(OwS~g-2A9^gJz3@}l2fKJ`zf#wZsC1PYSL0IIzYG}5G1r1-X*oED z*oKO(6f-)VUe3fy&W;=w;a?zoQ*3@Z&(?qzKjIt`UY*51{FEktiuKr<>|yaf2s!7> zQoLKRcmxD{Fq=Y@@}bU}1Cd2ZF1b)-_N^iyuvUi*FZ$bJ{&6`NP2Q^QtLN%vc7Jz1spvsEg$Rb{hM-!n#Z0!Di7NO`^2_YGI8)yl`T=_z4O zk&NOZ&cEXB8F-kmWNWpA%<%{tkA=BQ&^C;X9=ezY_s~NaH zw!(%E8GCs^ai%lE$U*^O!)zJQ%}0iOuiZ!ec>BlGA)G1sr!DnqI}1t8hO|P&vE|~~ z!Cyl9>Xb%gM{>*^MK^u53G@-Q~Q6KOhLw_KtOAj>6}&J$YsTGV4gM z6!{8tW}P4m*7Z!V*|@hBQ#^LXlmky-qL&OMIAG;A97Iuocr*GDpGDhN<>1>(sGn&u zGYfihxZ%SPH7fhKe2zgeQ05t9_|nMrW_icBEyX#1t&~P#66`i|$JeSZ<;#O$<&bi| zn1xls%BYAmb^2J}blyC&l1Gne)ed&hZOcI2868G**7O;sFFAwSHo;v^;LNUb&tY3* znt};wyWen2|GZ^<-qt^F8=oKPpC9#|yj#khk-+8obCe6$#UESn2Z(v_$2R=&41NzE zxnYohK2*zy?Ai-hi|fITaSUg|lPihlsZkv5VZ+e9A-S}Q9My(n+kb1VbH%Y`H zH8cgqYzk%d&Nwv~P8EPt@8Q)4z|YKiXOKX$8HYw7?}c=pPh7k43{nUK^6T0#^;8>u zUBamz4$I!XOt~wBHtd6YE)#Ox`+{=?ptJ9PK;$kVUDLAPoSrV?#RkOl8(fBBp;_Qm zN2FX4ZD}N*7Dviq;t2va><%f;0&I4Qld>bHZfweBiBr z47-0$c-Y^o$zn9dKnh~?WTd0S2-IdxqVq6XglDy#*gQMB+i^RPx+lBtod7VCG#HAf z%k)_WKLIjqEq*M*zIpn}kFdBUihn!EpPJ~A2{G%kx`xx4VCvVC!FRkm%oALQH>0nR zUoBJYi+|p|-fFM&`(UUDszLa-b(tK04Zg>R^FzT$p=slO*jWZKB^-4(FeQGNcetD4 zUvifShV$ul0(aaDLqTbfkP5ul=Qx;wI0a6F0ggrR<@5U>8U)EKJ_U2mt2v~j8NjwU zf{h0XPJ$`zz@rI}qH1I<5lr%O3Q;h$JqDWiGKU>gz;01o4q_SNZ|q!y58x|*EFjRq z^cB*@Lx)I-Epqz^f+<6g;IiZZk7BAJ@Wa~>(FN=b`~dV-x3k$6W!1fj#J#J1%M_x! zI4QiXecT`kK?xpq23110=%C&7)x~IhM%g?#q=Qj1gQXF6YSki6+REKSb)ZUSWYhnaks4h47X6@3H)AGv#HS-&ZUEy!!O&xK5@W0;uBx3X$4 zZ>4V>-i%a{IZW7H9YAr@tpl~b#T~f7QY{I$OH`^CLKt6q7xwjkNCc9II89~1WkFi)SuGo)C*c#+!=Ug>?8$dGVqa#fkC$AT z5Kt=7gRFjtCs%}L;)V@~>GAeE7psJ7r?SP#sK%b$~L*vTotsp2_%Y=m~ll%vo=E^4fv#15AMypO1|!ErzQH!+ z?*eN}hqa_0&&2Q~)Z^qmxRrmW;6A8VtYDSu9?69q#zjFYMh0Y9JxvbHW0pz_B4BJ~ zdZ{Ji4vVdzXhjS%I?d-AQkiu!X3T;dV%d)3{VXmfIr=rZT33pNH5XeR0v8FfpN-1N`!7@&y^0SMKz5GFjn1TFjXwCkM7VmkbzoZa%OrAYTxh;$omN) zUZnH1=^Idcsq51n$@ZJdL8B~6hzGlQJQMPJ=*sFSW^6DXgNoL1`{BmM#G+fN%lD&D zY$?;L(+fP5hj6x`t+D~8s+X`qf!r@mRkL#bF;a-T!n5dqo0&{G>)QKm)GKZ1vT3!a z7sY;AWk9ZG`EZDnOwnM}?Qptujt9=+Fr;sm^4D+K$pQe^SPg|467v*8OChf0A`r_# zKzB#gqEd-h0AM^*o*GDe?i*3ABplgLRajtf8|vaFtu=JoB8BwXAPh%QtH?7X6@L zHn_|Zdmn!lpx;X0V10SjkVsI%J|D&7Gcl2W{y9dd8yn;;+{h=#yjzV6mO$>Gyh8uJ zppHrbcbf^@C|pgH*|SMT8VC0z6mAqGbvC#6(yY>d!Ox%f3XD#z3R|wYX%%ujr+2W? z4kJNR57quj*ym?SW!tan^x9lP+1%9q z5In_y{2g$~2)-IG%cOMW3Q!>hq92H!_o^%pR4GoZtQXe)tP+?kDU=sbo(Qc3l1vTg z1Y~+ima*ppM=%6I7iA7~7Fd2irkddIJi!oD5oce_!1gu7Egm;zY7eAJV1sxyIg8In5dP`sPl6?_O9Hfv z);G5-x~w@SC5>10vUk9TJC(?JF7u5YWsLYwOh5^`MM(O#6mh&k@z=Abz}(R`A_~4z z%8ac?#d#HLbZG^;T9LNyh`#Iqw4PAc6==;RsQG7M`)Okpa;_^ERf^41F_4HBWg*jl zk!90Y9Bsjj*ki`Qa0Tn(Wt`y-T$Lnl4I|6q!W-3vg^(-?#8I77c!Il_m@P4zOT~ri zY7uw*b0(n}S&6-2q*xTG)QlyyL?|grv|`8j^@T4|-EzqOkrw~S6yc3C5r3_nyZHxp zL#H*I-BR$kOtYuGHuYxwqkbahUv%PsW*=~%YYsB_82Jx@%HmLz$enbj$$~6N%pF7ESFJY~q!B^dqrfUfoC@pu>Q zI^zvg-;j}gpBvKaD!B^`y082sTuG4R1i-k$&*z&o1AF2Z7-{U?6F(rG+TQ;V0WsFY zI7hby0RR90|NsC0p+OLWK!!j8hCl+QKm*`|5I~0zKmmskKmxZAKm+jKvk*WKpv<~) AR{#J2 delta 159313 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�fs|+YwA5OHvgmSwXP- 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®YasY&5& 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

    - @@ -511,7 +510,7 @@
    blur_linear
    peaking
    -
    +
    + +
    gradient
    +
    Slot settings
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Matched Presets +
      + +
    • If enabled, default to 1280x960 for NTSC 60 and 1280x1024 for PAL 50 (does not apply for 720p / 1080p presets).
    • +
    +
    + toggle_off +
    + Full Height + +
      +
    • Some presets default to not using the entire vertical output resolution, leaving some lines black.
    • +
    • With Full Height enabled, these presets will instead scale to fill more of the screen height.
    • +
    • (This currently only affects 1920 x 1080)
    • +
    +
    + toggle_off +
    + Output Frame Rate: Force PAL 50Hz to 60Hz + +
      +
    • If your TV does not support 50Hz sources (displaying unknown format, no matter the preset), try this option.
    • +
    • The frame rate will not be as smooth. Reboot required.
    • +
    +
    + toggle_off +
    + Active FrameTime Lock + +
      +
    • This option keeps the input and output timings aligned, fixing the horizontal tear line that can appear sometimes.
    • +
    • Two methods are available. Try switching methods if your display goes blank or shifts vertically.
    • +
    +
    FrameTime Lock + toggle_off +
    Switch Lock Method + swap_horiz +
    + Deinterlace Method + +
      +
    • Gbscontrol detects interlaced content and automatically toggles deinterlacing.
    • +
    • Bob Method: essentially no deinterlacing, no added lag but flickers, can be combined with scanlines
    • +
    • Motion Adaptive: removes flicker and shows some artefacts in moving details
    • +
    • If possible, configure the source for progressive output. Otherwise, using Motion Adaptive is recommended.
    • +
    +
    Motion Adaptive + toggle_off +
    Bob + toggle_off +
    +
    @@ -874,7 +966,7 @@
    - +
    sd_card
    Backup [intended for same device]
    diff --git a/public/src/index.js b/public/src/index.js deleted file mode 100644 index e36c9139..00000000 --- a/public/src/index.js +++ /dev/null @@ -1,1553 +0,0 @@ -/* -* DEVELOPER's MEMO: -* 1. WebUI icons: https://fonts.google.com/icons -* -*/ -/** - * Must be aligned with slots.h -> SlotMeta structure - * - * @type {StructDescriptors} - */ -const Structs = { - slots: [ - { name: "name", type: "string", size: 25 }, - { name: "slot", type: "byte", size: 1 }, - { name: "resolutionID", type: "string", size: 1 }, - { name: "scanlines", type: "byte", size: 1 }, - { name: "scanlinesStrength", type: "byte", size: 1 }, - { name: "wantVdsLineFilter", type: "byte", size: 1 }, - { name: "wantStepResponse", type: "byte", size: 1 }, - { name: "wantPeaking", type: "byte", size: 1 }, - ], -}; -/** - * Description placeholder - * - * @type {{ pos: number; parseStructArray(buff: ArrayBuffer, structsDescriptors: StructDescriptors, struct: string): any; getValue(buff: {}, structItem: { type: "string" | "byte"; size: number; }): any; getSize(structsDescriptors: StructDescriptors, struct: string): any; }} - */ -const StructParser = { - pos: 0, - parseStructArray(buff, structsDescriptors, struct) { - const currentStruct = structsDescriptors[struct]; - this.pos = 0; - buff = new Uint8Array(buff); - if (currentStruct) { - const structSize = StructParser.getSize(structsDescriptors, struct); - return [...Array(buff.byteLength / structSize)].map(() => { - return currentStruct.reduce((acc, structItem) => { - acc[structItem.name] = this.getValue(buff, structItem); - return acc; - }, {}); - }); - } - return null; - }, - getValue(buff, structItem) { - switch (structItem.type) { - case "byte": - return buff[this.pos++]; - case "string": - const currentPos = this.pos; - this.pos += structItem.size; - return [...Array(structItem.size)] - .map(() => " ") - .map((_char, index) => { - if (buff[currentPos + index] > 31) { - return String.fromCharCode(buff[currentPos + index]); - } - return ""; - }) - .join("") - .trim(); - } - }, - getSize(structsDescriptors, struct) { - const currentStruct = structsDescriptors[struct]; - return currentStruct.reduce((acc, prop) => { - acc += prop.size; - return acc; - }, 0); - }, -}; -/* GBSControl Global Object*/ -const GBSControl = { - buttonMapping: { - 'a': "button240p", - 'c': "button960p", - 'd': "button960p", - 'e': "button1024p", - 'f': "button1024p", - 'g': "button720p", - 'h': "button720p", - 'i': "button480p", - 'j': "button480p", - 'k': "button1080p", - 'l': "button1080p", - 'm': "button15kHz", - 'n': "button15kHz", - 'p': "button576p", - 'q': "buttonSourcePassThrough", - 's': "buttonSourcePassThrough", - 'u': "buttonSourcePassThrough", // PresetBypassRGBHV - // 'w': "buttonLoadCustomPreset", - }, - controlKeysMobileMode: "move", - controlKeysMobile: { - move: { - type: "loadDoc", - left: "7", - up: "*", - right: "6", - down: "/", - }, - scale: { - type: "loadDoc", - left: "h", - up: "4", - right: "z", - down: "5", - }, - borders: { - type: "loadUser", - left: "B", - up: "C", - right: "A", - down: "D", - }, - }, - activeResolution: "", - dataQueued: 0, - isWsActive: false, - maxSlots: 72, - queuedText: "", - scanSSIDDone: false, - serverIP: "", - structs: null, - timeOutWs: 0, - ui: { - backupButton: null, - backupInput: null, - customSlotFilters: null, - developerSwitch: null, - loader: null, - outputClear: null, - presetButtonList: null, - progressBackup: null, - progressRestore: null, - slotButtonList: null, - slotContainer: null, - terminal: null, - toggleConsole: null, - toggleList: null, - toggleSwichList: null, - webSocketConnectionWarning: null, - wifiConnect: null, - wifiConnectButton: null, - wifiList: null, - wifiListTable: null, - wifiPasswordInput: null, - wifiSSDInput: null, - wifiApButton: null, - wifiStaButton: null, - wifiStaSSID: null, - alert: null, - alertAck: null, - alertAct: null, - alertContent: null, - prompt: null, - promptOk: null, - promptCancel: null, - promptContent: null, - promptInput: null, - }, - updateTerminalTimer: 0, - webSocketServerUrl: "", - wifi: { - mode: "ap", - ssid: "", - }, - ws: null, - wsCheckTimer: 0, - wsConnectCounter: 0, - wsNoSuccessConnectingCounter: 0, - wsTimeout: 0, -}; -/** websocket services */ -const checkWebSocketServer = () => { - if (!GBSControl.isWsActive) { - if (GBSControl.ws) { - /* - 0 CONNECTING - 1 OPEN - 2 CLOSING - 3 CLOSED - */ - switch (GBSControl.ws.readyState) { - case 1: - case 2: - GBSControl.ws.close(); - break; - case 3: - GBSControl.ws = null; - break; - } - } - if (!GBSControl.ws) { - createWebSocket(); - } - } -}; -/** - * Description placeholder - */ -const timeOutWs = () => { - console.log("timeOutWs"); - if (GBSControl.ws) { - GBSControl.ws.close(); - } - GBSControl.isWsActive = false; - displayWifiWarning(true); -}; -/** - * Description placeholder - */ -const createWebSocket = () => { - if (GBSControl.ws && checkReadyState()) { - return; - } - GBSControl.wsNoSuccessConnectingCounter = 0; - GBSControl.ws = new WebSocket(GBSControl.webSocketServerUrl, ["arduino"]); - GBSControl.ws.onopen = () => { - // console.log("ws onopen"); - displayWifiWarning(false); - GBSControl.wsConnectCounter++; - clearTimeout(GBSControl.wsTimeout); - GBSControl.wsTimeout = window.setTimeout(timeOutWs, 6000); - GBSControl.isWsActive = true; - GBSControl.wsNoSuccessConnectingCounter = 0; - }; - GBSControl.ws.onclose = () => { - // console.log("ws.onclose"); - clearTimeout(GBSControl.wsTimeout); - GBSControl.isWsActive = false; - }; - GBSControl.ws.onmessage = (message) => { - clearTimeout(GBSControl.wsTimeout); - GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700); - GBSControl.isWsActive = true; - const [messageDataAt0, // always # - messageDataAt1, // selected slot ID (int) - messageDataAt2, // selected resolution () - messageDataAt3, // adcAutoGain & scanlines & vdsLineFilter & wantPeaking & PalForce60 & wantOutputComponent (binary) - messageDataAt4, // matchPresetSource & enableFrameTimeLock & deintMode & wantTap6 & wantStepResponse & wantFullHeight (binary) - messageDataAt5, // enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator (binary) - // developer tab - messageDataAt6, // printInfos, invertSync, oversampling, ADC Filter - // system tab - messageDataAt7 // enableOTA - ] = message.data; - // console.log(message.data); - if (messageDataAt0 != "#") { - GBSControl.queuedText += message.data; - GBSControl.dataQueued += message.data.length; - if (GBSControl.dataQueued >= 70000) { - GBSControl.ui.terminal.value = ""; - GBSControl.dataQueued = 0; - } - } - else { - // ! current/selected slot - const slotId = "slot-" + messageDataAt1; - const activeSlotButton = document.querySelector(`[gbs-element-ref="${slotId}"]`); - // ! curent/selected resolution - const resID = GBSControl.buttonMapping[messageDataAt2]; - const resEl = document.querySelector(`[gbs-element-ref="${resID}"]`); - const activePresetButton = resEl - ? resEl.getAttribute("gbs-element-ref") - : "none"; - GBSControl.ui.presetButtonList.forEach(toggleButtonActive(activePresetButton)); - if (activeSlotButton) { - GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); - } - // settings tab - if (messageDataAt3 && messageDataAt4 && messageDataAt5) { - const optionByte0 = messageDataAt3.charCodeAt(0); - const optionByte1 = messageDataAt4.charCodeAt(0); - const optionByte2 = messageDataAt5.charCodeAt(0); - const optionButtonList = [ - ...nodelistToArray(GBSControl.ui.toggleList), - ...nodelistToArray(GBSControl.ui.toggleSwichList), - ]; - const toggleMethod = (button, mode) => { - if (button.tagName === "TD") { - button.innerText = mode ? "toggle_on" : "toggle_off"; - } - button = button.tagName !== "TD" ? button : button.parentElement; - if (mode) { - button.setAttribute("active", ""); - } - else { - button.removeAttribute("active"); - } - }; - optionButtonList.forEach((button) => { - const toggleData = button.getAttribute("gbs-toggle") || - button.getAttribute("gbs-toggle-switch"); - if (toggleData !== null) { - switch (toggleData) { - case "adcAutoGain": - toggleMethod(button, (optionByte0 & 0x01) == 0x01); - break; - case "scanlines": - toggleMethod(button, (optionByte0 & 0x02) == 0x02); - break; - case "vdsLineFilter": - toggleMethod(button, (optionByte0 & 0x04) == 0x04); - break; - case "peaking": - toggleMethod(button, (optionByte0 & 0x08) == 0x08); - break; - case "palForce60": - toggleMethod(button, (optionByte0 & 0x10) == 0x10); - break; - case "wantOutputComponent": - toggleMethod(button, (optionByte0 & 0x20) == 0x20); - break; - /** 1 */ - case "matched": - toggleMethod(button, (optionByte1 & 0x01) == 0x01); - break; - case "frameTimeLock": - toggleMethod(button, (optionByte1 & 0x02) == 0x02); - break; - case "motionAdaptive": - toggleMethod(button, (optionByte1 & 0x04) == 0x04); - break; - case "bob": - toggleMethod(button, (optionByte1 & 0x04) != 0x04); - break; - // case "tap6": - // toggleMethod(button, (optionByte1 & 0x08) != 0x04); - // break; - case "step": - toggleMethod(button, (optionByte1 & 0x10) == 0x10); - break; - case "fullHeight": - toggleMethod(button, (optionByte1 & 0x20) == 0x20); - break; - /** 2 */ - case "enableCalibrationADC": - toggleMethod(button, (optionByte2 & 0x01) == 0x01); - break; - case "preferScalingRgbhv": - toggleMethod(button, (optionByte2 & 0x02) == 0x02); - break; - case "disableExternalClockGenerator": - toggleMethod(button, (optionByte2 & 0x04) == 0x04); - break; - } - } - }); - } - // developer tab - if (messageDataAt6) { - const optionByte6 = messageDataAt6.charCodeAt(0); - const printInfoButton = document.querySelector(`button[gbs-message="i"][gbs-message-type="action"]`); - const invertSync = document.querySelector(`button[gbs-message="8"][gbs-message-type="action"]`); - const oversampling = document.querySelector(`button[gbs-message="o"][gbs-message-type="action"]`); - const adcFilter = document.querySelector(`button[gbs-message="F"][gbs-message-type="action"]`); - if ((optionByte6 & 0x01) == 0x01) - printInfoButton.setAttribute("active", ""); - else - printInfoButton.removeAttribute("active"); - if ((optionByte6 & 0x02) == 0x02) - invertSync.setAttribute("active", ""); - else - invertSync.removeAttribute("active"); - if ((optionByte6 & 0x04) == 0x04) - oversampling.setAttribute("active", ""); - else - oversampling.removeAttribute("active"); - if ((optionByte6 & 0x08) == 0x08) - adcFilter.setAttribute("active", ""); - else - adcFilter.removeAttribute("active"); - } - // system tab - if (messageDataAt6) { - const optionByte7 = messageDataAt7.charCodeAt(0); - const enableOTAButton = document.querySelector(`button[gbs-message="c"][gbs-message-type="action"]`); - if ((optionByte7 & 0x01) == 0x01) - enableOTAButton.setAttribute("active", ""); - else - enableOTAButton.removeAttribute("active"); - } - } - }; -}; -/** - * Description placeholder - * - * @returns {boolean} - */ -const checkReadyState = () => { - if (GBSControl.ws.readyState == 2) { - GBSControl.wsNoSuccessConnectingCounter++; - if (GBSControl.wsNoSuccessConnectingCounter >= 7) { - console.log("ws still closing, force close"); - GBSControl.ws = null; - GBSControl.wsNoSuccessConnectingCounter = 0; - /* fall through */ - createWebSocket(); - return false; - } - else { - return true; - } - } - else if (GBSControl.ws.readyState == 0) { - GBSControl.wsNoSuccessConnectingCounter++; - if (GBSControl.wsNoSuccessConnectingCounter >= 14) { - console.log("ws still connecting, retry"); - GBSControl.ws.close(); - GBSControl.wsNoSuccessConnectingCounter = 0; - } - return true; - } - else { - return true; - } -}; -/** - * Description placeholder - */ -const createIntervalChecks = () => { - GBSControl.wsCheckTimer = window.setInterval(checkWebSocketServer, 500); - GBSControl.updateTerminalTimer = window.setInterval(updateTerminal, 50); -}; -/* API services */ -/** - * Description placeholder - * - * @param {string} link - * @returns {*} - */ -const loadDoc = (link) => { - return fetch(`http://${GBSControl.serverIP}/sc?${link}&nocache=${new Date().getTime()}`); -}; -/** - * user command handler - * - * @param {string} link - * @returns {*} - */ -const loadUser = (link) => { - if (link == "a" || link == "1") { - GBSControl.isWsActive = false; - GBSControl.ui.terminal.value += "\nRestart\n"; - GBSControl.ui.terminal.scrollTop = GBSControl.ui.terminal.scrollHeight; - } - return fetch(`http://${GBSControl.serverIP}/uc?${link}&nocache=${new Date().getTime()}`); -}; -/** SLOT management */ -/** - * Remove slot handler - */ -const removePreset = () => { - const currentSlot = document.querySelector('[gbs-role="slot"][active]'); - if (!currentSlot) { - return; - } - const currentIndex = currentSlot.getAttribute("gbs-message"); - const currentName = currentSlot.getAttribute("gbs-name"); - if (currentName && currentName.trim() !== "Empty") { - gbsAlert(`

    Are you sure to remove slot: ${currentName}?

    This action also removes all related presets.

    `, '
    done
    Yes
    ', '
    close
    No
    ').then(() => { - return fetch(`http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}`).then(() => { - console.log("slot removed, reloadng slots..."); - fetchSlotNames().then((success) => { - if (success) { - updateSlotNames(); - } - else { - fetchSlotNamesErrorRetry(); - } - }); - }); - }).catch(() => { - }); - } - ; -}; -/** - * - * @returns - */ -const savePreset = () => { - const currentSlot = document.querySelector('[gbs-role="slot"][active]'); - if (!currentSlot) { - return; - } - const key = currentSlot.getAttribute("gbs-element-ref"); - const currentIndex = currentSlot.getAttribute("gbs-message"); - gbsPrompt("Assign a slot name", GBSControl.structs.slots[currentIndex].name || key) - .then((currentName) => { - if (currentName && currentName.trim() !== "Empty") { - currentSlot.setAttribute("gbs-name", currentName); - fetch(`http://${GBSControl.serverIP}/slot/save?index=${currentIndex}&name=${currentName.substring(0, 24)}&${+new Date()}`).then(() => { - loadUser("4").then(() => { - window.setTimeout(() => { - fetchSlotNames().then((success) => { - if (success) { - updateSlotNames(); - } - }); - }, 500); - }); - }); - } - }) - .catch(() => { }); -}; -/** - * Description placeholder - */ -// const loadPreset = () => { -// loadUser("3").then(() => { -// if (GBSStorage.read("customSlotFilters") === true) { -// window.setTimeout(() => { -// fetch(`http://${GBSControl.serverIP}/gbs/restore-filters?${+new Date()}`); -// }, 250); -// } -// }); -// }; -/** - * Description placeholder - * - * @returns {*} - */ -const getSlotsHTML = () => { - // prettier-ignore - // return [ - // 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - // 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' - // ].map((chr, idx) => { - // // gbs-message="${chr}" - // return ``; - // }).join(''); - // TODO: 'i' max. rely on SLOTS_TOTAL which is ambigous - let str = ``; - for (let i = 0; i != 72; i++) { - str += ``; - } - return str; -}; -/** - * Description placeholder - * - * @param {string} slot - */ -const setSlot = (slot) => { - fetch(`http://${GBSControl.serverIP}/slot/set?index=${slot}&${+new Date()}`); -}; -/** - * Description placeholder - */ -const updateSlotNames = () => { - for (let i = 0; i < GBSControl.maxSlots; i++) { - const el = document.querySelector(`[gbs-message="${i}"][gbs-role="slot"]`); - el.setAttribute("gbs-name", GBSControl.structs.slots[i].name); - el.setAttribute("gbs-meta", getSlotPresetName(GBSControl.structs.slots[i].resolutionID)); - } -}; -/** - * Description placeholder - * - * @returns {*} - */ -const fetchSlotNames = () => { - return fetch(`http://${GBSControl.serverIP}/bin/slots.bin?${+new Date()}`) - .then((response) => response.arrayBuffer()) - .then((arrayBuffer) => { - if (arrayBuffer.byteLength === - StructParser.getSize(Structs, "slots") * GBSControl.maxSlots) { - GBSControl.structs = { - slots: StructParser.parseStructArray(arrayBuffer, Structs, "slots"), - }; - return true; - } - return false; - }); -}; -/** - * Must be aligned with options.h -> OutputResolution - * - * @param {string} resolutionID - * @returns {("960p" | "1024p" | "720p" | "480p" | "1080p" | "DOWNSCALE" | "576p" | "BYPASS" | "BYPASS HD" | "BYPASS RGBHV" | "240p" | "NONE")} - */ -const getSlotPresetName = (resolutionID) => { - switch (resolutionID) { - case 'c': - case 'd': - // case 0x011: - return "960p"; - case 'e': - case 'f': - // case 0x012: - return "1024p"; - case 'g': - case 'h': - // case 0x013: - return "720p"; - case 'i': - case 'j': - // case 0x015: - return "480p"; - case 'k': - case 'l': - return "1080p"; - case 'm': - case 'n': - // case 0x016: - return "DOWNSCALE"; - case 'p': - return "576p"; - case 'q': - return "BYPASS"; - case 's': // bypass 1 - return "BYPASS HD"; - case 'u': // bypass 2 - return "BYPASS RGBHV"; - // case 12: - // return "CUSTOM"; - case 'a': - return "240p"; - default: - return "NONE"; - } -}; -/** - * Description placeholder - */ -const fetchSlotNamesErrorRetry = () => { - window.setTimeout(fetchSlotNamesAndInit, 1000); -}; -/** - * Description placeholder - */ -const fetchSlotNamesAndInit = () => { - fetchSlotNames() - .then((success) => { - if (!success) { - fetchSlotNamesErrorRetry(); - return; - } - initUIElements(); - wifiGetStatus().then(() => { - initUI(); - updateSlotNames(); - createWebSocket(); - createIntervalChecks(); - window.setTimeout(hideLoading, 1000); - }); - }, fetchSlotNamesErrorRetry) - .catch(fetchSlotNamesErrorRetry); -}; -/** Promises */ -const serial = (funcs) => funcs.reduce((promise, func) => promise.then((result) => func().then(Array.prototype.concat.bind(result))), Promise.resolve([])); -/** helpers */ -const toggleHelp = () => { - let help = GBSStorage.read("help") || false; - GBSStorage.write("help", !help); - updateHelp(!help); -}; -/** - * Description placeholder - */ -const toggleDeveloperMode = () => { - const developerMode = GBSStorage.read("developerMode") || false; - GBSStorage.write("developerMode", !developerMode); - updateDeveloperMode(!developerMode); -}; -/** - * Description placeholder - */ -const toggleCustomSlotFilters = () => { - const customSlotFilters = GBSStorage.read("customSlotFilters"); - GBSStorage.write("customSlotFilters", !customSlotFilters); - updateCustomSlotFilters(!customSlotFilters); -}; -/** - * Description placeholder - * - * @param {boolean} help - */ -const updateHelp = (help) => { - if (help) { - document.body.classList.remove("gbs-help-hide"); - } - else { - document.body.classList.add("gbs-help-hide"); - } -}; -/** - * Toggle console visibility (see corresponding button) - * - * @param {boolean} developerMode - */ -const updateConsoleVisibility = (developerMode) => { - // const developerMode = GBSStorage.read("developerMode") as boolean; - if (developerMode) { - const consoleStatus = GBSStorage.read("consoleVisible"); - if (consoleStatus !== true) { - GBSStorage.write("consoleVisible", true); - GBSControl.ui.toggleConsole.setAttribute("active", ""); - document.body.classList.remove("gbs-output-hide"); - } - else { - GBSStorage.write("consoleVisible", false); - GBSControl.ui.toggleConsole.removeAttribute("active"); - document.body.classList.add("gbs-output-hide"); - } - } -}; -/** - * Description placeholder - * - * @param {boolean} developerMode - */ -const updateDeveloperMode = (developerMode) => { - const el = document.querySelector('[gbs-section="developer"]'); - if (developerMode) { - GBSStorage.write("consoleVisible", true); - el.removeAttribute("hidden"); - GBSControl.ui.developerSwitch.setAttribute("active", ""); - document.body.classList.remove("gbs-output-hide"); - } - else { - el.setAttribute("hidden", ""); - GBSControl.ui.developerSwitch.removeAttribute("active"); - document.body.classList.add("gbs-output-hide"); - } - GBSControl.ui.developerSwitch.querySelector(".gbs-icon").innerText = developerMode ? "toggle_on" : "toggle_off"; -}; -/** - * Description placeholder - * - * @param {boolean} [customFilters=GBSStorage.read("customSlotFilters") === true] - */ -const updateCustomSlotFilters = (customFilters = GBSStorage.read("customSlotFilters") === true) => { - if (customFilters) { - GBSControl.ui.customSlotFilters.setAttribute("active", ""); - } - else { - GBSControl.ui.customSlotFilters.removeAttribute("active"); - } - GBSControl.ui.customSlotFilters.querySelector(".gbs-icon").innerText = customFilters ? "toggle_on" : "toggle_off"; -}; -/** - * Description placeholder - * - * @type {({ lsObject: {}; write(key: string, value: any): void; read(key: string): string | number | boolean; })} - */ -const GBSStorage = { - lsObject: {}, - write(key, value) { - GBSStorage.lsObject = GBSStorage.lsObject || {}; - GBSStorage.lsObject[key] = value; - localStorage.setItem("GBSControlSlotNames", JSON.stringify(GBSStorage.lsObject)); - }, - read(key) { - GBSStorage.lsObject = JSON.parse(localStorage.getItem("GBSControlSlotNames") || "{}"); - return GBSStorage.lsObject[key]; - }, -}; -/** - * Description placeholder - * - * @template Element - * @param {(| HTMLCollectionOf - * | NodeListOf)} nodelist - * @returns {Element[]} - */ -const nodelistToArray = (nodelist) => { - return Array.prototype.slice.call(nodelist); -}; -/** - * Description placeholder - * - * @param {string} id - * @returns {(button: HTMLElement, _index: any, _array: any) => void} - */ -const toggleButtonActive = (id) => (button, _index, _array) => { - button.removeAttribute("active"); - if (button.getAttribute("gbs-element-ref") === id) { - button.setAttribute("active", ""); - } -}; -/** - * Description placeholder - * - * @param {boolean} mode - */ -const displayWifiWarning = (mode) => { - GBSControl.ui.webSocketConnectionWarning.style.display = mode - ? "block" - : "none"; -}; -/** - * Description placeholder - */ -const updateTerminal = () => { - if (GBSControl.queuedText.length > 0) { - requestAnimationFrame(() => { - GBSControl.ui.terminal.value += GBSControl.queuedText; - GBSControl.ui.terminal.scrollTop = GBSControl.ui.terminal.scrollHeight; - GBSControl.queuedText = ""; - }); - } -}; -/** - * Description placeholder - */ -const updateViewPort = () => { - document.documentElement.style.setProperty("--viewport-height", window.innerHeight + "px"); -}; -/** - * Description placeholder - */ -const hideLoading = () => { - GBSControl.ui.loader.setAttribute("style", "display:none"); -}; -/** - * Description placeholder - * - * @param {Response} response - * @returns {Response} - */ -const checkFetchResponseStatus = (response) => { - if (!response.ok) { - throw new Error(`HTTP ${response.status} - ${response.statusText}`); - } - return response; -}; -/** - * Description placeholder - * - * @param {File} file - */ -// const readLocalFile = (file: File) => { -// const reader = new FileReader(); -// reader.addEventListener("load", (event) => { -// doRestore(reader.result as ArrayBuffer); -// }); -// reader.readAsArrayBuffer(file); -// }; -/** backup / restore */ -const doBackup = () => { - window.location.href = `http://${GBSControl.serverIP}/data/backup?ts=${new Date().getTime()}`; - // let backupFiles: string[]; - // let done = 0; - // let total = 0; - // fetch(`http://${GBSControl.serverIP}/data/dir`) - // .then((r) => r.json()) - // .then((files: string[]) => { - // backupFiles = files; - // total = files.length; - // const funcs = files.map((path: string) => () => { - // return fetch(`http://${GBSControl.serverIP}/data/download?file=${path}&${+new Date()}`).then( - // (response) => { - // GBSControl.ui.progressBackup.setAttribute( - // "gbs-progress", - // `${done}/${total}` - // ); - // done++; - // return checkFetchResponseStatus(response) && response.arrayBuffer(); - // } - // ); - // }); - // return serial(funcs); - // }) - // .then((files: ArrayBuffer[]) => { - // console.log("after download backup complete"); - // const headerDescriptor = files.reduce((acc, f, index) => { - // acc[backupFiles[index]] = f.byteLength; - // return acc; - // }, {}); - // const backupFilesJSON = JSON.stringify(headerDescriptor); - // const backupFilesJSONSize = backupFilesJSON.length; - // const mainHeader = [ - // (backupFilesJSONSize >> 24) & 255, // size - // (backupFilesJSONSize >> 16) & 255, // size - // (backupFilesJSONSize >> 8) & 255, // size - // (backupFilesJSONSize >> 0) & 255, - // ]; - // const outputArray: number[] = [ - // ...mainHeader, - // ...backupFilesJSON.split("").map((c) => c.charCodeAt(0)), - // ...files.reduce((acc, f, index) => { - // acc = acc.concat(Array.from(new Uint8Array(f))); - // return acc; - // }, []), - // ]; - // downloadBlob( - // new Blob([new Uint8Array(outputArray)]), - // `gbs-control.backup-${+new Date()}.bin` - // ); - // GBSControl.ui.progressBackup.setAttribute("gbs-progress", ``); - // }); -}; -/** - * Restore SLOTS from backup - * - * @param {ArrayBuffer} file - */ -// const doRestore = (file: ArrayBuffer, f: File) => { -const doRestore = (f) => { - const { backupInput } = GBSControl.ui; - // const fileBuffer = new Uint8Array(file); - // const headerCheck = fileBuffer.slice(4, 6); - const bkpTs = f.name.substring(f.name.lastIndexOf('-') + 1, f.name.lastIndexOf('.')); - const backupDate = new Date(parseInt(bkpTs)); - // if (headerCheck[0] !== 0x7b || headerCheck[1] !== 0x22) { - backupInput.setAttribute("disabled", ""); - const formData = new FormData(); - formData.append("gbs-backup.bin", f, f.name); - const setAlertBody = () => { - const fsize = f.size / 1024; - return '

    Backup File:

    Backup date: ' - + backupDate.toLocaleString() - + '

    Size: ' + fsize.toFixed(2) + ' kB

    '; - }; - gbsAlert(setAlertBody(), '
    close
    Reject
    ', '
    done
    Restore
    ').then(() => { - backupInput.removeAttribute("disabled"); - }, () => { - return fetch(`http://${GBSControl.serverIP}/data/restore`, { - method: "POST", - body: formData - }).then((response) => { - // backupInput.removeAttribute("disabled"); - window.setTimeout(() => { - window.location.reload(); - }, 2000); - return response; - }); - }) - .catch(() => { - backupInput.removeAttribute("disabled"); - }); - // return; - // } - // const b0 = fileBuffer[0], - // b1 = fileBuffer[1], - // b2 = fileBuffer[2], - // b3 = fileBuffer[3]; - // const headerSize = (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - // const headerString = Array.from(fileBuffer.slice(4, headerSize + 4)) - // .map((c) => String.fromCharCode(c)) - // .join(""); - // const headerObject = JSON.parse(headerString); - // const files = Object.keys(headerObject); - // let pos = headerSize + 4; - // let total = files.length; - // let done = 0; - // const funcs = files.map((fileName) => async () => { - // const fileContents = fileBuffer.slice(pos, pos + headerObject[fileName]); - // const formData = new FormData(); - // formData.append( - // "file", - // new Blob([fileContents], { type: "application/octet-stream" }), - // fileName.substr(1) - // ); - // return await fetch(`http://${GBSControl.serverIP}/data/restore`, { - // method: "POST", - // body: formData, - // }).then((response) => { - // GBSControl.ui.progressRestore.setAttribute( - // "gbs-progress", - // `${done}/${total}` - // ); - // done++; - // pos += headerObject[fileName]; - // return response; - // }); - // }); - // serial(funcs).then(() => { - // // serial(funcs).then(() => { - // GBSControl.ui.progressRestore.setAttribute("gbs-progress", ``); - // loadUser("a").then(() => { - // gbsAlert( - // "Restarting GBSControl.\nPlease wait until wifi reconnects then click OK" - // ) - // .then(() => { - // window.location.reload(); - // }) - // .catch(() => { }); - // }); - // }); -}; -/** - * Description placeholder - * - * @param {Blob} blob - * @param {string} [name="file.txt"] - */ -// const downloadBlob = (blob: Blob, name = "file.txt") => { -// let wnav: any = window.navigator; -// // IE10+ -// if (wnav && wnav.msSaveOrOpenBlob) { -// wnav.msSaveOrOpenBlob(blob, name); -// return; -// } -// /// normal browsers: -// // Convert your blob into a Blob URL (a special url that points to an object in the browser's memory) -// const blobUrl = URL.createObjectURL(blob); -// // Create a link element -// const link = document.createElement("a"); -// // Set link's href to point to the Blob URL -// link.href = blobUrl; -// link.download = name; -// // Append link to the body -// document.body.appendChild(link); -// // Dispatch click event on the link -// // This is necessary as link.click() does not work on the latest firefox -// link.dispatchEvent( -// new MouseEvent("click", { -// bubbles: true, -// cancelable: true, -// view: window, -// }) -// ); -// window.URL.revokeObjectURL(blobUrl); -// // Remove link from body -// document.body.removeChild(link); -// }; -/** WIFI management */ -const wifiGetStatus = () => { - return fetch(`http://${GBSControl.serverIP}/wifi/status?${+new Date()}`) - .then((r) => r.json()) - .then((wifiStatus) => { - GBSControl.wifi = wifiStatus; - if (GBSControl.wifi.mode === "ap") { - GBSControl.ui.wifiApButton.setAttribute("active", ""); - GBSControl.ui.wifiApButton.classList.add("gbs-button__secondary"); - GBSControl.ui.wifiStaButton.removeAttribute("active", ""); - GBSControl.ui.wifiStaButton.classList.remove("gbs-button__secondary"); - GBSControl.ui.wifiStaSSID.innerHTML = "STA | Scan Network"; - } - else { - GBSControl.ui.wifiApButton.removeAttribute("active", ""); - GBSControl.ui.wifiApButton.classList.remove("gbs-button__secondary"); - GBSControl.ui.wifiStaButton.setAttribute("active", ""); - GBSControl.ui.wifiStaButton.classList.add("gbs-button__secondary"); - GBSControl.ui.wifiStaSSID.innerHTML = `${GBSControl.wifi.ssid}`; - } - }); -}; -/** - * Does connect to selected WiFi network - */ -const wifiConnect = () => { - const ssid = GBSControl.ui.wifiSSDInput.value; - const password = GBSControl.ui.wifiPasswordInput.value; - if (!password.length) { - GBSControl.ui.wifiPasswordInput.classList.add("gbs-wifi__input--error"); - return; - } - const formData = new FormData(); - formData.append("n", ssid); - formData.append("p", password); - fetch(`http://${GBSControl.serverIP}/wifi/connect`, { - method: "POST", - body: formData, - }).then(() => { - gbsAlert(`GBSControl will restart and will connect to ${ssid}. Please wait few seconds then press OK`).then(() => { - window.location.href = "http://gbscontrol.local/"; - }).catch(() => { }); - }); -}; -/** - * Query WiFi networks - */ -const wifiScanSSID = () => { - GBSControl.ui.wifiStaButton.setAttribute("disabled", ""); - GBSControl.ui.wifiListTable.innerHTML = ""; - if (!GBSControl.scanSSIDDone) { - fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { - method: 'POST' - }).then(() => { - GBSControl.scanSSIDDone = true; - window.setTimeout(wifiScanSSID, 3000); - }); - return; - } - fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { - method: 'POST' - }) - .then((e) => e.text()) - .then((result) => { - GBSControl.scanSSIDDone = false; - return result.length - ? result - .split("\n") - .map((line) => line.split(",")) - .map(([strength, encripted, ssid]) => { - return { strength, encripted, ssid }; - }) - : []; - }) - .then((ssids) => { - return ssids.reduce((acc, ssid) => { - return `${acc} - wifi - ${ssid.ssid} - ${ssid.encripted ? "lock" : "lock_open"} - `; - }, ""); - }) - .then((html) => { - GBSControl.ui.wifiStaButton.removeAttribute("disabled"); - if (html.length) { - GBSControl.ui.wifiListTable.innerHTML = html; - GBSControl.ui.wifiList.removeAttribute("hidden"); - GBSControl.ui.wifiConnect.setAttribute("hidden", ""); - } - }); -}; -/** - * Description placeholder - * - * @param {Event} event - */ -const wifiSelectSSID = (event) => { - GBSControl.ui - .wifiSSDInput.value = event.target.parentElement.getAttribute("gbs-ssid"); - GBSControl.ui.wifiPasswordInput.classList.remove("gbs-wifi__input--error"); - GBSControl.ui.wifiList.setAttribute("hidden", ""); - GBSControl.ui.wifiConnect.removeAttribute("hidden"); -}; -/** - * Description placeholder - * - * @returns {*} - */ -const wifiSetAPMode = () => { - if (GBSControl.wifi.mode === "ap") { - return; - } - // const formData = new FormData(); - // formData.append("n", "dummy"); - return fetch(`http://${GBSControl.serverIP}/wifi/ap`, { - method: "POST", - // body: formData, - }).then((response) => { - gbsAlert("Switching to AP mode. Please connect to gbscontrol SSID and then click OK").then(() => { - window.location.href = "http://192.168.4.1"; - }).catch(() => { }); - return response; - }); -}; -/** button click management */ -const controlClick = (control) => () => { - const controlKey = control.getAttribute("gbs-control-key"); - const target = GBSControl.controlKeysMobile[GBSControl.controlKeysMobileMode]; - switch (target.type) { - case "loadDoc": - loadDoc(target[controlKey]); - break; - case "loadUser": - loadUser(target[controlKey]); - break; - } -}; -/** - * Description placeholder - * - * @param {HTMLButtonElement} control - * @returns {() => void} - */ -const controlMouseDown = (control) => () => { - clearInterval(control["__interval"]); - const click = controlClick(control); - click(); - control["__interval"] = window.setInterval(click, 300); -}; -/** - * Description placeholder - * - * @param {HTMLButtonElement} control - * @returns {() => void} - */ -const controlMouseUp = (control) => () => { - clearInterval(control["__interval"]); -}; -/** inits */ -const initMenuButtons = () => { - const menuButtons = nodelistToArray(document.querySelector(".gbs-menu").querySelectorAll("button")); - const sections = nodelistToArray(document.querySelectorAll("section")); - const scroll = document.querySelector(".gbs-scroll"); - menuButtons.forEach((button) => button.addEventListener("click", () => { - const section = button.getAttribute("gbs-section"); - sections.forEach((section) => section.setAttribute("hidden", "")); - document - .querySelector(`section[name="${section}"]`) - .removeAttribute("hidden"); - menuButtons.forEach((btn) => btn.removeAttribute("active")); - button.setAttribute("active", ""); - scroll.scrollTo(0, 1); - })); -}; -/** - * Description placeholder - */ -const initGBSButtons = () => { - const actions = { - user: loadUser, - action: loadDoc, - setSlot, - }; - const buttons = nodelistToArray(document.querySelectorAll("[gbs-click]")); - buttons.forEach((button) => { - const clickMode = button.getAttribute("gbs-click"); - const message = button.getAttribute("gbs-message"); - const messageType = button.getAttribute("gbs-message-type"); - const action = actions[messageType]; - if (clickMode === "normal") { - button.addEventListener("click", () => { - action(message); - }); - } - if (clickMode === "repeat") { - const callback = () => { - action(message); - }; - button.addEventListener(!("ontouchstart" in window) ? "mousedown" : "touchstart", () => { - callback(); - clearInterval(button["__interval"]); - button["__interval"] = window.setInterval(callback, 300); - }); - button.addEventListener(!("ontouchstart" in window) ? "mouseup" : "touchend", () => { - clearInterval(button["__interval"]); - }); - } - }); -}; -/** - * Description placeholder - */ -const initClearButton = () => { - GBSControl.ui.outputClear.addEventListener("click", () => { - GBSControl.ui.terminal.value = ""; - }); -}; -/** - * Description placeholder - */ -const initControlMobileKeys = () => { - const controls = document.querySelectorAll("[gbs-control-target]"); - const controlsKeys = document.querySelectorAll("[gbs-control-key]"); - controls.forEach((control) => { - control.addEventListener("click", () => { - GBSControl.controlKeysMobileMode = control.getAttribute("gbs-control-target"); - controls.forEach((crtl) => { - crtl.removeAttribute("active"); - }); - control.setAttribute("active", ""); - }); - }); - controlsKeys.forEach((control) => { - control.addEventListener(!("ontouchstart" in window) ? "mousedown" : "touchstart", controlMouseDown(control)); - control.addEventListener(!("ontouchstart" in window) ? "mouseup" : "touchend", controlMouseUp(control)); - }); -}; -/** - * Description placeholder - */ -const initLegendHelpers = () => { - nodelistToArray(document.querySelectorAll(".gbs-fieldset__legend--help")).forEach((e) => { - e.addEventListener("click", toggleHelp); - }); -}; -/** - * Description placeholder - */ -const initUnloadListener = () => { - window.addEventListener("unload", () => { - clearInterval(GBSControl.wsCheckTimer); - if (GBSControl.ws) { - if (GBSControl.ws.readyState == 0 || GBSControl.ws.readyState == 1) { - GBSControl.ws.close(); - } - } - }); -}; -/** - * Description placeholder - */ -const initSlotButtons = () => { - GBSControl.ui.slotContainer.innerHTML = getSlotsHTML(); - GBSControl.ui.slotButtonList = nodelistToArray(document.querySelectorAll('[gbs-role="slot"]')); -}; -/** - * Description placeholder - */ -const initUIElements = () => { - GBSControl.ui = { - terminal: document.getElementById("outputTextArea"), - webSocketConnectionWarning: document.getElementById("websocketWarning"), - presetButtonList: nodelistToArray(document.querySelectorAll("[gbs-role='preset']")), - slotButtonList: nodelistToArray(document.querySelectorAll('[gbs-role="slot"]')), - toggleConsole: document.querySelector("[gbs-output-toggle]"), - toggleList: document.querySelectorAll("[gbs-toggle]"), - toggleSwichList: document.querySelectorAll("[gbs-toggle-switch]"), - wifiList: document.querySelector("[gbs-wifi-list]"), - wifiListTable: document.querySelector(".gbs-wifi__list"), - wifiConnect: document.querySelector(".gsb-wifi__connect"), - wifiConnectButton: document.querySelector("[gbs-wifi-connect-button]"), - wifiSSDInput: document.querySelector('[gbs-input="ssid"]'), - wifiPasswordInput: document.querySelector('[gbs-input="password"]'), - wifiApButton: document.querySelector("[gbs-wifi-ap]"), - wifiStaButton: document.querySelector("[gbs-wifi-station]"), - wifiStaSSID: document.querySelector("[gbs-wifi-station-ssid]"), - loader: document.querySelector(".gbs-loader"), - progressBackup: document.querySelector("[gbs-progress-backup]"), - progressRestore: document.querySelector("[gbs-progress-restore]"), - outputClear: document.querySelector("[gbs-output-clear]"), - slotContainer: document.querySelector("[gbs-slot-html]"), - backupButton: document.querySelector(".gbs-backup-button"), - backupInput: document.querySelector(".gbs-backup-input"), - developerSwitch: document.querySelector("[gbs-dev-switch]"), - customSlotFilters: document.querySelector("[gbs-slot-custom-filters]"), - alert: document.querySelector('section[name="alert"]'), - alertAck: document.querySelector("[gbs-alert-ack]"), - alertAct: document.querySelector("[gbs-alert-act]"), - alertContent: document.querySelector("[gbs-alert-content]"), - prompt: document.querySelector('section[name="prompt"]'), - promptOk: document.querySelector("[gbs-prompt-ok]"), - promptCancel: document.querySelector("[gbs-prompt-cancel]"), - promptContent: document.querySelector("[gbs-prompt-content]"), - promptInput: document.querySelector('[gbs-input="prompt-input"]'), - }; -}; -/** - * Description placeholder - */ -const initGeneralListeners = () => { - window.addEventListener("resize", () => { - updateViewPort(); - }); - GBSControl.ui.backupInput.addEventListener("change", (event) => { - const fileList = event.target["files"]; - doRestore(fileList[0]); - // readLocalFile(fileList[0]); - GBSControl.ui.backupInput.value = ""; - }); - GBSControl.ui.backupButton.addEventListener("click", doBackup); - GBSControl.ui.wifiListTable.addEventListener("click", wifiSelectSSID); - GBSControl.ui.wifiConnectButton.addEventListener("click", wifiConnect); - GBSControl.ui.wifiApButton.addEventListener("click", wifiSetAPMode); - GBSControl.ui.wifiStaButton.addEventListener("click", wifiScanSSID); - GBSControl.ui.developerSwitch.addEventListener("click", toggleDeveloperMode); - GBSControl.ui.customSlotFilters.addEventListener("click", toggleCustomSlotFilters); - GBSControl.ui.alertAck.addEventListener("click", () => { - GBSControl.ui.alert.setAttribute("hidden", ""); - gbsAlertPromise.resolve(); - }); - GBSControl.ui.promptOk.addEventListener("click", () => { - GBSControl.ui.prompt.setAttribute("hidden", ""); - const value = GBSControl.ui.promptInput.value; - if (value !== undefined || value.length > 0) { - gbsPromptPromise.resolve(GBSControl.ui.promptInput.value); - } - else { - gbsPromptPromise.reject(); - } - }); - GBSControl.ui.promptCancel.addEventListener("click", () => { - GBSControl.ui.prompt.setAttribute("hidden", ""); - gbsPromptPromise.reject(); - }); - GBSControl.ui.promptInput.addEventListener("keydown", (event) => { - if (event.keyCode === 13) { - GBSControl.ui.prompt.setAttribute("hidden", ""); - const value = GBSControl.ui.promptInput.value; - if (value !== undefined || value.length > 0) { - gbsPromptPromise.resolve(GBSControl.ui.promptInput.value); - } - else { - gbsPromptPromise.reject(); - } - } - if (event.keyCode === 27) { - gbsPromptPromise.reject(); - } - }); -}; -/** - * Description placeholder - */ -const initDeveloperMode = () => { - const devMode = GBSStorage.read("developerMode"); - if (devMode === undefined) { - GBSStorage.write("developerMode", false); - updateDeveloperMode(false); - } - else { - updateDeveloperMode(devMode); - } - // toggle console visibility button - GBSControl.ui.toggleConsole.addEventListener("click", () => { - updateConsoleVisibility(devMode); - }); -}; -/** - * Description placeholder - */ -const initHelp = () => { - let help = GBSStorage.read("help"); - if (help === undefined) { - help = false; - GBSStorage.write("help", help); - } - updateHelp(help); -}; -/** - * Description placeholder - * - * @type {{ resolve: any; reject: any; }} - */ -const gbsAlertPromise = { - resolve: null, - reject: null, -}; -/** - * Description placeholder - * - * @param {*} event - */ -const alertKeyListener = (event) => { - if (event.keyCode === 13) { - gbsAlertPromise.resolve(); - } - if (event.keyCode === 27) { - gbsAlertPromise.reject(); - } -}; -const alertActEventListener = (e) => { - gbsAlertPromise.reject(); -}; -/** - * Description placeholder - * - * @param {string} text - * @returns {*} - */ -const gbsAlert = (text, ackText = "", actText = "") => { - GBSControl.ui.alertContent.insertAdjacentHTML('afterbegin', text); - GBSControl.ui.alert.removeAttribute("hidden"); - document.addEventListener("keyup", alertKeyListener); - if (ackText !== "") { - GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', ackText); - } - else - GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', '
    done
    Ok
    '); - if (actText !== "") { - GBSControl.ui.alertAct.insertAdjacentHTML('afterbegin', actText); - GBSControl.ui.alertAct.removeAttribute("disabled"); - GBSControl.ui.alertAct.addEventListener("click", alertActEventListener); - } - return new Promise((resolve, reject) => { - const gbsAlertClean = () => { - document.removeEventListener("keyup", alertKeyListener); - GBSControl.ui.alertAct.removeEventListener("click", alertActEventListener); - GBSControl.ui.alertAct.setAttribute("disabled", ""); - GBSControl.ui.alertAck.textContent = ""; - GBSControl.ui.alertAct.textContent = ""; - GBSControl.ui.alertContent.textContent = ""; - GBSControl.ui.alert.setAttribute("hidden", ""); - }; - gbsAlertPromise.resolve = (e) => { - gbsAlertClean(); - return resolve(e); - }; - gbsAlertPromise.reject = () => { - gbsAlertClean(); - return reject(); - }; - }); -}; -/** - * Description placeholder - * - * @type {{ resolve: any; reject: any; }} - */ -const gbsPromptPromise = { - resolve: null, - reject: null, -}; -/** - * Description placeholder - * - * @param {string} text - * @param {string} [defaultValue=""] - * @returns {*} - */ -const gbsPrompt = (text, defaultValue = "") => { - GBSControl.ui.promptContent.textContent = text; - GBSControl.ui.prompt.removeAttribute("hidden"); - GBSControl.ui.promptInput.value = defaultValue; - return new Promise((resolve, reject) => { - gbsPromptPromise.resolve = resolve; - gbsPromptPromise.reject = reject; - GBSControl.ui.promptInput.focus(); - }); -}; -/** - * Description placeholder - */ -const initUI = () => { - updateCustomSlotFilters(); - initGeneralListeners(); - updateViewPort(); - initSlotButtons(); - initLegendHelpers(); - initMenuButtons(); - initGBSButtons(); - initClearButton(); - initControlMobileKeys(); - initUnloadListener(); - initDeveloperMode(); - initHelp(); -}; -/** - * Description placeholder - */ -const main = () => { - GBSControl.serverIP = location.hostname; - GBSControl.webSocketServerUrl = `ws://${GBSControl.serverIP}:81/`; - document - .querySelector(".gbs-loader img") - .setAttribute("src", document.head - .querySelector('[rel="apple-touch-icon"]') - .getAttribute("href")); - fetchSlotNamesAndInit(); -}; -main(); diff --git a/public/src/index.ts b/public/src/index.ts index 48ab4bf8..b1098da3 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -1,8 +1,8 @@ /* -* DEVELOPER's MEMO: -* 1. WebUI icons: https://fonts.google.com/icons -* -*/ + * DEVELOPER MEMO: + * 1. WebUI icons: https://fonts.google.com/icons + * + */ /** * Description placeholder @@ -54,11 +54,21 @@ const Structs: StructDescriptors = { { name: "name", type: "string", size: 25 }, { name: "slot", type: "byte", size: 1 }, { name: "resolutionID", type: "string", size: 1 }, + { name: "scanlines", type: "byte", size: 1 }, { name: "scanlinesStrength", type: "byte", size: 1 }, - { name: "wantVdsLineFilter", type: "byte", size: 1 }, - { name: "wantStepResponse", type: "byte", size: 1 }, - { name: "wantPeaking", type: "byte", size: 1 }, + { name: "vdsLineFilter", type: "byte", size: 1 }, + { name: "stepResponse", type: "byte", size: 1 }, + { name: "peaking", type: "byte", size: 1 }, + { name: "adcAutoGain", type: "byte", size: 1 }, + { name: "frameTimeLock", type: "byte", size: 1 }, + + { name: "frameTimeLockMethod", type: "byte", size: 1 }, + { name: "motionAdaptive", type: "byte", size: 1 }, + { name: "bob", type: "byte", size: 1 }, + { name: "fullHeight", type: "byte", size: 1 }, + { name: "matchPreset", type: "byte", size: 1 }, + { name: "palForce60", type: "byte", size: 1 }, ], }; @@ -92,7 +102,10 @@ const StructParser = { return null; }, - getValue(buff: any[], structItem: { type: "byte" | "string"; size: number }) { + getValue( + buff: any[], + structItem: { type: "byte" | "string"; size: number } + ) { switch (structItem.type) { case "byte": return buff[this.pos++]; @@ -105,7 +118,9 @@ const StructParser = { .map(() => " ") .map((_char, index) => { if (buff[currentPos + index] > 31) { - return String.fromCharCode(buff[currentPos + index]); + return String.fromCharCode( + buff[currentPos + index] + ); } return ""; }) @@ -125,23 +140,23 @@ const StructParser = { /* GBSControl Global Object*/ const GBSControl = { buttonMapping: { - 'a': "button240p", - 'c': "button960p", - 'd': "button960p", // 50Hz - 'e': "button1024p", - 'f': "button1024p", // 50Hz - 'g': "button720p", - 'h': "button720p", // 50Hz - 'i': "button480p", - 'j': "button480p", // 50Hz - 'k': "button1080p", - 'l': "button1080p", // 50Hz - 'm': "button15kHz", - 'n': "button15kHz", // 50Hz - 'p': "button576p", // 50Hz - 'q': "buttonSourcePassThrough", - 's': "buttonSourcePassThrough", // PresetHdBypass - 'u': "buttonSourcePassThrough", // PresetBypassRGBHV + a: "button240p", + c: "button960p", + d: "button960p", // 50Hz + e: "button1024p", + f: "button1024p", // 50Hz + g: "button720p", + h: "button720p", // 50Hz + i: "button480p", + j: "button480p", // 50Hz + k: "button1080p", + l: "button1080p", // 50Hz + m: "button15kHz", + n: "button15kHz", // 50Hz + p: "button576p", // 50Hz + q: "buttonSourcePassThrough", + s: "buttonSourcePassThrough", // PresetHdBypass + u: "buttonSourcePassThrough", // PresetBypassRGBHV // 'w': "buttonLoadCustomPreset", }, controlKeysMobileMode: "move", @@ -171,7 +186,7 @@ const GBSControl = { activeResolution: "", dataQueued: 0, isWsActive: false, - maxSlots: 72, + maxSlots: 50, queuedText: "", scanSSIDDone: false, serverIP: "", @@ -180,7 +195,7 @@ const GBSControl = { ui: { backupButton: null, backupInput: null, - customSlotFilters: null, + // customSlotFilters: null, developerSwitch: null, loader: null, outputClear: null, @@ -212,6 +227,7 @@ const GBSControl = { promptCancel: null, promptContent: null, promptInput: null, + removeSlotButton: null, }, updateTerminalTimer: 0, webSocketServerUrl: "", @@ -268,6 +284,214 @@ const timeOutWs = () => { /** * Description placeholder + * + * @template Element + * @param {(| HTMLCollectionOf + * | NodeListOf)} nodelist + * @returns {Element[]} + */ +const nodelistToArray = ( + nodelist: + | HTMLCollectionOf + | NodeListOf +): Element[] => { + return Array.prototype.slice.call(nodelist); +}; + +/** + * Description placeholder + * + * @param {string} id + * @returns {(button: HTMLElement, _index: any, _array: any) => void} + */ +const toggleButtonActive = + (id: string) => (button: HTMLElement, _index: any, _array: any) => { + button.removeAttribute("active"); + + if (button.getAttribute("gbs-element-ref") === id) { + button.setAttribute("active", ""); + } + }; + +/** + * Description placeholder + * + * @type {{ resolve: any; reject: any; }} + */ +const gbsAlertPromise = { + resolve: null, + reject: null, +}; + +/** + * Description placeholder + * + * @param {*} event + */ +const alertKeyListener = (event: any) => { + if (event.keyCode === 13) { + gbsAlertPromise.resolve(); + } + if (event.keyCode === 27) { + gbsAlertPromise.reject(); + } +}; + +const alertActEventListener = (e: any) => { + gbsAlertPromise.reject(); +}; + +/** + * Description placeholder + * + * @param {string} text + * @returns {*} + */ +const gbsAlert = (text: string, ackText: string = "", actText: string = "") => { + GBSControl.ui.alertContent.insertAdjacentHTML("afterbegin", text); + GBSControl.ui.alert.removeAttribute("hidden"); + document.addEventListener("keyup", alertKeyListener); + if (ackText !== "") { + GBSControl.ui.alertAck.insertAdjacentHTML("afterbegin", ackText); + } else + GBSControl.ui.alertAck.insertAdjacentHTML( + "afterbegin", + '
    done
    Ok
    ' + ); + + if (actText !== "") { + GBSControl.ui.alertAct.insertAdjacentHTML("afterbegin", actText); + GBSControl.ui.alertAct.removeAttribute("disabled"); + GBSControl.ui.alertAct.addEventListener("click", alertActEventListener); + } + return new Promise((resolve, reject) => { + const gbsAlertClean = () => { + document.removeEventListener("keyup", alertKeyListener); + GBSControl.ui.alertAct.removeEventListener( + "click", + alertActEventListener + ); + GBSControl.ui.alertAct.setAttribute("disabled", ""); + GBSControl.ui.alertAck.textContent = ""; + GBSControl.ui.alertAct.textContent = ""; + GBSControl.ui.alertContent.textContent = ""; + GBSControl.ui.alert.setAttribute("hidden", ""); + }; + gbsAlertPromise.resolve = (e) => { + gbsAlertClean(); + return resolve(e); + }; + gbsAlertPromise.reject = () => { + gbsAlertClean(); + return reject(); + }; + }); +}; + +/** + * Description placeholder + * + * @type {{ resolve: any; reject: any; }} + */ +const gbsPromptPromise = { + resolve: null, + reject: null, +}; + +/** + * Description placeholder + * + * @param {string} text + * @param {string} [defaultValue=""] + * @returns {*} + */ +const gbsPrompt = (text: string, defaultValue = "") => { + GBSControl.ui.promptContent.textContent = text; + GBSControl.ui.prompt.removeAttribute("hidden"); + GBSControl.ui.promptInput.value = defaultValue; + + return new Promise((resolve, reject) => { + gbsPromptPromise.resolve = resolve; + gbsPromptPromise.reject = reject; + GBSControl.ui.promptInput.focus(); + }); +}; + +/** + * Description placeholder + * + * @param {boolean} mode + */ +const displayWifiWarning = (mode: boolean) => { + GBSControl.ui.webSocketConnectionWarning.style.display = mode + ? "block" + : "none"; +}; + +/** + * Flip a toggle switch + * + * @param {(HTMLTableCellElement | HTMLElement)} button + * @param {boolean} mode + */ +const toggleButtonCheck = ( + button: HTMLTableCellElement | HTMLElement, + mode: boolean +) => { + if (button.tagName === "TD") { + button.innerText = mode ? "toggle_on" : "toggle_off"; + } + button = button.tagName !== "TD" ? button : button.parentElement; + if (mode) { + button.setAttribute("active", ""); + } else { + button.removeAttribute("active"); + } +}; + + +/** + * Description placeholder + * + * @param {HTMLElement} button this is a slot button HTMLElement + */ +const removeSlotButtonCheck = (button: Element) => { + if(button.hasAttribute("active")) { + const currentName = button.getAttribute("gbs-name"); + if (currentName && currentName.trim() !== "Empty") { + GBSControl.ui.removeSlotButton.removeAttribute("disabled") + } else { + GBSControl.ui.removeSlotButton.setAttribute("disabled", "") + } + } +}; + +/** + * Description placeholder + */ +const updateTerminal = () => { + if (GBSControl.queuedText.length > 0) { + requestAnimationFrame(() => { + GBSControl.ui.terminal.value += GBSControl.queuedText; + GBSControl.ui.terminal.scrollTop = + GBSControl.ui.terminal.scrollHeight; + GBSControl.queuedText = ""; + }); + } +}; + +/** + * Description placeholder + */ +const updateViewPort = () => { + document.documentElement.style.setProperty( + "--viewport-height", + window.innerHeight + "px" + ); +}; + +/** + * Handle webSocket response */ const createWebSocket = () => { if (GBSControl.ws && checkReadyState()) { @@ -296,28 +520,35 @@ const createWebSocket = () => { GBSControl.isWsActive = false; }; - - GBSControl.ws.onmessage = (message: any) => { + GBSControl.ws.onmessage = async (message: any) => { clearTimeout(GBSControl.wsTimeout); GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700); GBSControl.isWsActive = true; - + // message data is blob + let buf = null; + try { + buf = await message.data.arrayBuffer(); + } catch (err) { + // must not exit here since we're filtering out + // terminal data and system state data with '#' + } + // into array of DEC values + const bufArr = Array.from(new Uint8Array(buf)); const [ - messageDataAt0, // always # - messageDataAt1, // selected slot ID (int) - messageDataAt2, // selected resolution () - messageDataAt3, // adcAutoGain & scanlines & vdsLineFilter & wantPeaking & PalForce60 & wantOutputComponent (binary) - messageDataAt4, // matchPresetSource & enableFrameTimeLock & deintMode & wantTap6 & wantStepResponse & wantFullHeight (binary) - messageDataAt5, // enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator (binary) + optionByte0, // always # + optionByte1, // current slot ID (int) + optionByte2, // current resolution () + // system preferences (preference file values) + optionByte3, // wantScanlines & wantVdsLineFilter & wantStepResponse & wantPeaking & enableAutoGain & enableFrameTimeLock + optionByte4, // deintMode & wantTap6 & wantFullHeight & matchPresetSource & PalForce60 + optionByte5, // wantOutputComponent & enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator // developer tab - messageDataAt6, // printInfos, invertSync, oversampling, ADC Filter + optionByte6, // printInfos, invertSync, oversampling, ADC Filter // system tab - messageDataAt7 // enableOTA - ] = message.data; - -// console.log(message.data); + optionByte7, // enableOTA + ] = bufArr; - if (messageDataAt0 != "#") { + if (optionByte0 != "#".charCodeAt(0)) { GBSControl.queuedText += message.data; GBSControl.dataQueued += message.data.length; @@ -325,149 +556,178 @@ const createWebSocket = () => { GBSControl.ui.terminal.value = ""; GBSControl.dataQueued = 0; } - } else { - // ! current/selected slot - const slotId = "slot-" + messageDataAt1; - const activeSlotButton = document.querySelector( - `[gbs-element-ref="${slotId}"]` - ); - // ! curent/selected resolution - const resID = GBSControl.buttonMapping[messageDataAt2]; - const resEl = document.querySelector( - `[gbs-element-ref="${resID}"]` - ); - const activePresetButton = resEl - ? resEl.getAttribute("gbs-element-ref") - : "none"; - GBSControl.ui.presetButtonList.forEach( - toggleButtonActive(activePresetButton) - ); - - if (activeSlotButton) { - GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); - } - // settings tab - if (messageDataAt3 && messageDataAt4 && messageDataAt5) { - const optionByte0 = messageDataAt3.charCodeAt(0); - const optionByte1 = messageDataAt4.charCodeAt(0); - const optionByte2 = messageDataAt5.charCodeAt(0); - const optionButtonList = [ - ...nodelistToArray(GBSControl.ui.toggleList), - ...nodelistToArray(GBSControl.ui.toggleSwichList), - ]; - - const toggleMethod = ( - button: HTMLTableCellElement | HTMLElement, - mode: boolean - ) => { - if (button.tagName === "TD") { - button.innerText = mode ? "toggle_on" : "toggle_off"; - } - button = button.tagName !== "TD" ? button : button.parentElement; - if (mode) { - button.setAttribute("active", ""); - } else { - button.removeAttribute("active"); - } - }; - - optionButtonList.forEach((button) => { - const toggleData = - button.getAttribute("gbs-toggle") || - button.getAttribute("gbs-toggle-switch"); - - if (toggleData !== null) { - switch (toggleData) { - case "adcAutoGain": - toggleMethod(button, (optionByte0 & 0x01) == 0x01); - break; - case "scanlines": - toggleMethod(button, (optionByte0 & 0x02) == 0x02); - break; - case "vdsLineFilter": - toggleMethod(button, (optionByte0 & 0x04) == 0x04); - break; - case "peaking": - toggleMethod(button, (optionByte0 & 0x08) == 0x08); - break; - case "palForce60": - toggleMethod(button, (optionByte0 & 0x10) == 0x10); - break; - case "wantOutputComponent": - toggleMethod(button, (optionByte0 & 0x20) == 0x20); - break; - /** 1 */ - - case "matched": - toggleMethod(button, (optionByte1 & 0x01) == 0x01); - break; - case "frameTimeLock": - toggleMethod(button, (optionByte1 & 0x02) == 0x02); - break; - case "motionAdaptive": - toggleMethod(button, (optionByte1 & 0x04) == 0x04); - break; - case "bob": - toggleMethod(button, (optionByte1 & 0x04) != 0x04); - break; - // case "tap6": - // toggleMethod(button, (optionByte1 & 0x08) != 0x04); - // break; - case "step": - toggleMethod(button, (optionByte1 & 0x10) == 0x10); - break; - case "fullHeight": - toggleMethod(button, (optionByte1 & 0x20) == 0x20); - break; - /** 2 */ - case "enableCalibrationADC": - toggleMethod(button, (optionByte2 & 0x01) == 0x01); - break; - case "preferScalingRgbhv": - toggleMethod(button, (optionByte2 & 0x02) == 0x02); - break; - case "disableExternalClockGenerator": - toggleMethod(button, (optionByte2 & 0x04) == 0x04); - break; - } - } - }); - } - // developer tab - if(messageDataAt6) { - const optionByte6 = messageDataAt6.charCodeAt(0); - const printInfoButton = document.querySelector(`button[gbs-message="i"][gbs-message-type="action"]`); - const invertSync = document.querySelector(`button[gbs-message="8"][gbs-message-type="action"]`); - const oversampling = document.querySelector(`button[gbs-message="o"][gbs-message-type="action"]`); - const adcFilter = document.querySelector(`button[gbs-message="F"][gbs-message-type="action"]`); - if((optionByte6 & 0x01) == 0x01) - printInfoButton.setAttribute("active", ""); - else - printInfoButton.removeAttribute("active"); - if((optionByte6 & 0x02) == 0x02) - invertSync.setAttribute("active", ""); - else - invertSync.removeAttribute("active"); - if((optionByte6 & 0x04) == 0x04) - oversampling.setAttribute("active", ""); - else - oversampling.removeAttribute("active"); - if((optionByte6 & 0x08) == 0x08) - adcFilter.setAttribute("active", ""); - else - adcFilter.removeAttribute("active"); + return; + } - } - // system tab - if(messageDataAt6) { - const optionByte7 = messageDataAt7.charCodeAt(0); - const enableOTAButton = document.querySelector(`button[gbs-message="c"][gbs-message-type="action"]`); - if((optionByte7 & 0x01) == 0x01) - enableOTAButton.setAttribute("active", ""); - else - enableOTAButton.removeAttribute("active"); - } + // current slot + const slotId = `slot-${String.fromCharCode(optionByte1)}`; + const activeSlotButton = document.querySelector( + `[gbs-element-ref="${slotId}"]` + ); + if (activeSlotButton) { + GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)); + // control slot remove button + removeSlotButtonCheck(activeSlotButton); } + // curent resolution + const resID = GBSControl.buttonMapping[String.fromCharCode(optionByte2)]; + const resEl = document.querySelector( + `[gbs-element-ref="${resID}"]` + ); + const activePresetButton = resEl + ? resEl.getAttribute("gbs-element-ref") + : "none"; + GBSControl.ui.presetButtonList.forEach( + toggleButtonActive(activePresetButton) + ); + // settings tab & system preferences + const optionButtonList = [ + ...nodelistToArray(GBSControl.ui.toggleList), + ...nodelistToArray( + GBSControl.ui.toggleSwichList + ), + ]; + + optionButtonList.forEach((button) => { + const toggleData = + button.getAttribute("gbs-toggle") || + button.getAttribute("gbs-toggle-switch"); + + if (toggleData !== null) { + switch (toggleData) { + /** 0: settings */ + // case "scanlinesStrength": + /** 1 */ + case "scanlines": + toggleButtonCheck( + button, + (optionByte3 & 0x01) == 0x01 + ); + break; + case "vdsLineFilter": + toggleButtonCheck( + button, + (optionByte3 & 0x02) == 0x02 + ); + break; + case "stepResponse": + toggleButtonCheck( + button, + (optionByte3 & 0x04) == 0x04 + ); + break; + case "peaking": + toggleButtonCheck( + button, + (optionByte3 & 0x08) == 0x08 + ); + break; + case "adcAutoGain": + toggleButtonCheck( + button, + (optionByte3 & 0x10) == 0x10 + ); + break; + case "frameTimeLock": + toggleButtonCheck( + button, + (optionByte3 & 0x20) == 0x20 + ); + break; + /** 2 */ + // case "fameTimeLockMethod": + /** 3 */ + case "motionAdaptive": + toggleButtonCheck( + button, + (optionByte4 & 0x01) == 0x01 + ); + break; + case "bob": + toggleButtonCheck( + button, + (optionByte4 & 0x02) == 0x02 + ); + break; + case "fullHeight": + toggleButtonCheck( + button, + (optionByte4 & 0x04) == 0x04 + ); + break; + case "matchPreset": + toggleButtonCheck( + button, + (optionByte4 & 0x08) == 0x08 + ); + break; + case "palForce60": + toggleButtonCheck( + button, + (optionByte4 & 0x10) == 0x10 + ); + break; + /** 4: system preferences tab */ + case "wantOutputComponent": + toggleButtonCheck( + button, + (optionByte5 & 0x01) == 0x01 + ); + break; + case "enableCalibrationADC": + toggleButtonCheck( + button, + (optionByte5 & 0x02) == 0x02 + ); + break; + case "preferScalingRgbhv": + toggleButtonCheck( + button, + (optionByte5 & 0x04) == 0x04 + ); + break; + case "disableExternalClockGenerator": + toggleButtonCheck( + button, + (optionByte5 & 0x08) == 0x08 + ); + break; + } + } + }); + // developer tab + const printInfoButton = document.querySelector( + `button[gbs-message="i"][gbs-message-type="action"]` + ); + const invertSync = document.querySelector( + `button[gbs-message="8"][gbs-message-type="action"]` + ); + const oversampling = document.querySelector( + `button[gbs-message="o"][gbs-message-type="action"]` + ); + const adcFilter = document.querySelector( + `button[gbs-message="F"][gbs-message-type="action"]` + ); + if ((optionByte6 & 0x01) == 0x01) + printInfoButton.setAttribute("active", ""); + else printInfoButton.removeAttribute("active"); + if ((optionByte6 & 0x02) == 0x02) + invertSync.setAttribute("active", ""); + else invertSync.removeAttribute("active"); + if ((optionByte6 & 0x04) == 0x04) + oversampling.setAttribute("active", ""); + else oversampling.removeAttribute("active"); + if ((optionByte6 & 0x08) == 0x08) + adcFilter.setAttribute("active", ""); + else adcFilter.removeAttribute("active"); + + // system tab + const enableOTAButton = document.querySelector( + `button[gbs-message="c"][gbs-message-type="action"]` + ); + if ((optionByte7 & 0x01) == 0x01) + enableOTAButton.setAttribute("active", ""); + else enableOTAButton.removeAttribute("active"); }; }; @@ -544,32 +804,290 @@ const loadUser = (link: string) => { ); }; -/** SLOT management */ +/** WIFI management */ +const wifiGetStatus = () => { + return fetch(`http://${GBSControl.serverIP}/wifi/status?${+new Date()}`) + .then((r) => r.json()) + .then((wifiStatus: { mode: string; ssid: string }) => { + GBSControl.wifi = wifiStatus; + if (GBSControl.wifi.mode === "ap") { + GBSControl.ui.wifiApButton.setAttribute("active", ""); + GBSControl.ui.wifiApButton.classList.add( + "gbs-button__secondary" + ); + GBSControl.ui.wifiStaButton.removeAttribute("active", ""); + GBSControl.ui.wifiStaButton.classList.remove( + "gbs-button__secondary" + ); + GBSControl.ui.wifiStaSSID.innerHTML = "STA | Scan Network"; + } else { + GBSControl.ui.wifiApButton.removeAttribute("active", ""); + GBSControl.ui.wifiApButton.classList.remove( + "gbs-button__secondary" + ); + GBSControl.ui.wifiStaButton.setAttribute("active", ""); + GBSControl.ui.wifiStaButton.classList.add( + "gbs-button__secondary" + ); + GBSControl.ui.wifiStaSSID.innerHTML = `${GBSControl.wifi.ssid}`; + } + }); +}; /** - * Remove slot handler + * Does connect to selected WiFi network */ -const removePreset = () => { - const currentSlot = document.querySelector('[gbs-role="slot"][active]'); +const wifiConnect = () => { + const ssid = GBSControl.ui.wifiSSDInput.value; + const password = GBSControl.ui.wifiPasswordInput.value; - if (!currentSlot) { + if (!password.length) { + GBSControl.ui.wifiPasswordInput.classList.add("gbs-wifi__input--error"); return; } - const currentIndex = currentSlot.getAttribute("gbs-message"); - const currentName = currentSlot.getAttribute("gbs-name"); - if (currentName && currentName.trim() !== "Empty") { + const formData = new FormData(); + formData.append("n", ssid); + formData.append("p", password); + + fetch(`http://${GBSControl.serverIP}/wifi/connect`, { + method: "POST", + body: formData, + }).then(() => { gbsAlert( - `

    Are you sure to remove slot: ${currentName}?

    This action also removes all related presets.

    `, - '
    done
    Yes
    ', - '
    close
    No
    ' - ).then( - () => { - return fetch( - `http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}` - ).then(() => { - console.log("slot removed, reloadng slots..."); - fetchSlotNames().then((success: boolean) => { + `GBSControl will restart and will connect to ${ssid}. Please wait few seconds then press OK` + ) + .then(() => { + window.location.href = "http://gbscontrol.local/"; + }) + .catch(() => {}); + }); +}; + +/** + * Query WiFi networks + */ +const wifiScanSSID = () => { + GBSControl.ui.wifiStaButton.setAttribute("disabled", ""); + GBSControl.ui.wifiListTable.innerHTML = ""; + + if (!GBSControl.scanSSIDDone) { + fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { + method: "POST", + }).then(() => { + GBSControl.scanSSIDDone = true; + window.setTimeout(wifiScanSSID, 3000); + }); + return; + } + + fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { + method: "POST", + }) + .then((e) => e.text()) + .then((result) => { + GBSControl.scanSSIDDone = false; + return result.length + ? result + .split("\n") + .map((line) => line.split(",")) + .map(([strength, encripted, ssid]) => { + return { strength, encripted, ssid }; + }) + : []; + }) + .then((ssids) => { + return ssids.reduce((acc, ssid) => { + return `${acc} + wifi + ${ssid.ssid} + ${ssid.encripted ? "lock" : "lock_open"} + `; + }, ""); + }) + .then((html) => { + GBSControl.ui.wifiStaButton.removeAttribute("disabled"); + + if (html.length) { + GBSControl.ui.wifiListTable.innerHTML = html; + GBSControl.ui.wifiList.removeAttribute("hidden"); + GBSControl.ui.wifiConnect.setAttribute("hidden", ""); + } + }); +}; + +/** + * Description placeholder + * + * @param {Event} event + */ +const wifiSelectSSID = (event: Event) => { + (GBSControl.ui.wifiSSDInput as HTMLInputElement).value = ( + event.target as HTMLElement + ).parentElement.getAttribute("gbs-ssid"); + GBSControl.ui.wifiPasswordInput.classList.remove("gbs-wifi__input--error"); + GBSControl.ui.wifiList.setAttribute("hidden", ""); + GBSControl.ui.wifiConnect.removeAttribute("hidden"); +}; + +/** + * Description placeholder + * + * @returns {*} + */ +const wifiSetAPMode = () => { + if (GBSControl.wifi.mode === "ap") { + return; + } + + // const formData = new FormData(); + // formData.append("n", "dummy"); + + return fetch(`http://${GBSControl.serverIP}/wifi/ap`, { + method: "POST", + // body: formData, + }).then((response) => { + gbsAlert( + "Switching to AP mode. Please connect to gbscontrol SSID and then click OK" + ) + .then(() => { + window.location.href = "http://192.168.4.1"; + }) + .catch(() => {}); + return response; + }); +}; + +/** SLOT management */ + +/** + * Description placeholder + */ +const fetchSlotNamesErrorRetry = () => { + window.setTimeout(fetchSlotNamesAndInit, 1000); +}; + +/** + * Description placeholder + */ +const initUIElements = () => { + GBSControl.ui = { + terminal: document.getElementById("outputTextArea"), + webSocketConnectionWarning: document.getElementById("websocketWarning"), + presetButtonList: nodelistToArray( + document.querySelectorAll("[gbs-role='preset']") + ) as HTMLElement[], + slotButtonList: nodelistToArray( + document.querySelectorAll('[gbs-role="slot"]') + ) as HTMLElement[], + toggleConsole: document.querySelector("[gbs-output-toggle]"), + toggleList: document.querySelectorAll("[gbs-toggle]"), + toggleSwichList: document.querySelectorAll("[gbs-toggle-switch]"), + wifiList: document.querySelector("[gbs-wifi-list]"), + wifiListTable: document.querySelector(".gbs-wifi__list"), + wifiConnect: document.querySelector(".gsb-wifi__connect"), + wifiConnectButton: document.querySelector("[gbs-wifi-connect-button]"), + wifiSSDInput: document.querySelector('[gbs-input="ssid"]'), + wifiPasswordInput: document.querySelector('[gbs-input="password"]'), + wifiApButton: document.querySelector("[gbs-wifi-ap]"), + wifiStaButton: document.querySelector("[gbs-wifi-station]"), + wifiStaSSID: document.querySelector("[gbs-wifi-station-ssid]"), + loader: document.querySelector(".gbs-loader"), + progressBackup: document.querySelector("[gbs-progress-backup]"), + progressRestore: document.querySelector("[gbs-progress-restore]"), + outputClear: document.querySelector("[gbs-output-clear]"), + slotContainer: document.querySelector("[gbs-slot-html]"), + backupButton: document.querySelector(".gbs-backup-button"), + backupInput: document.querySelector(".gbs-backup-input"), + developerSwitch: document.querySelector("[gbs-dev-switch]"), + // customSlotFilters: document.querySelector("[gbs-slot-custom-filters]"), + alert: document.querySelector('section[name="alert"]'), + alertAck: document.querySelector("[gbs-alert-ack]"), + alertAct: document.querySelector("[gbs-alert-act]"), + alertContent: document.querySelector("[gbs-alert-content]"), + prompt: document.querySelector('section[name="prompt"]'), + promptOk: document.querySelector("[gbs-prompt-ok]"), + promptCancel: document.querySelector("[gbs-prompt-cancel]"), + promptContent: document.querySelector("[gbs-prompt-content]"), + promptInput: document.querySelector('[gbs-input="prompt-input"]'), + removeSlotButton: document.querySelector('[gbs-element-ref="buttonRemoveCustomPreset"]'), + }; +}; + +/** + * Description placeholder + */ +const fetchSlotNamesAndInit = () => { + fetchSlotNames() + .then((success) => { + if (!success) { + fetchSlotNamesErrorRetry(); + return; + } + initUIElements(); + wifiGetStatus().then(() => { + initUI(); + updateSlotNames(); + createWebSocket(); + createIntervalChecks(); + window.setTimeout(hideLoading, 1000); + }); + }, fetchSlotNamesErrorRetry) + .catch(fetchSlotNamesErrorRetry); +}; + +/** + * Description placeholder + * + * @returns {*} + */ +const fetchSlotNames = () => { + return fetch(`http://${GBSControl.serverIP}/bin/slots.bin?${+new Date()}`) + .then((response) => response.arrayBuffer()) + .then((arrayBuffer: ArrayBuffer) => { + if ( + arrayBuffer.byteLength === + StructParser.getSize(Structs, "slots") * GBSControl.maxSlots + ) { + GBSControl.structs = { + slots: StructParser.parseStructArray( + arrayBuffer, + Structs, + "slots" + ), + }; + return true; + } + return false; + }); +}; + +/** + * Remove slot handler + */ +const removePreset = () => { + const currentSlot = document.querySelector('[gbs-role="slot"][active]'); + + if (!currentSlot) { + return; + } + + const currentIndex = currentSlot.getAttribute("gbs-message"); + const currentName = currentSlot.getAttribute("gbs-name"); + if (currentName && currentName.trim() !== "Empty") { + gbsAlert( + `

    Are you sure to remove slot: ${currentName}?

    This action also removes all related presets.

    `, + '
    done
    Yes
    ', + '
    close
    No
    ' + ) + .then(() => { + return fetch( + `http://${GBSControl.serverIP}/slot/remove?index=${currentIndex}&${+new Date()}` + ).then(() => { + console.log("slot removed, reloadng slots..."); + fetchSlotNames().then((success: boolean) => { if (success) { updateSlotNames(); } else { @@ -577,11 +1095,9 @@ const removePreset = () => { } }); }); - } - ).catch(() => { - - }); - }; + }) + .catch(() => {}); + } }; /** @@ -610,19 +1126,19 @@ const savePreset = () => { 24 )}&${+new Date()}` ).then(() => { - loadUser("4").then(() => { - window.setTimeout(() => { - fetchSlotNames().then((success: boolean) => { - if (success) { - updateSlotNames(); - } - }); - }, 500); - }); + // loadUser("4").then(() => { + window.setTimeout(() => { + fetchSlotNames().then((success: boolean) => { + if (success) { + updateSlotNames(); + } + }); + }, 500); + // }); }); } }) - .catch(() => { }); + .catch(() => {}); }; /** @@ -645,28 +1161,28 @@ const savePreset = () => { */ const getSlotsHTML = () => { // prettier-ignore -// return [ -// 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', -// 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -// '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' -// ].map((chr, idx) => { - -// // gbs-message="${chr}" -// return ``; - -// }).join(''); + // return [ + // 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + // 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', '_', '~', '(', ')', '!', '*', ':', ',' + // ].map((chr, idx) => { + + // // gbs-message="${chr}" + // return ``; + + // }).join(''); // TODO: 'i' max. rely on SLOTS_TOTAL which is ambigous let str = ``; - for(let i = 0; i != 72; i++) { + for (let i = 0; i != GBSControl.maxSlots; i++) { str += ``; + >`; } return str; }; @@ -686,8 +1202,10 @@ const getSlotsHTML = () => { * * @param {string} slot */ -const setSlot = (slot: string) => { - fetch(`http://${GBSControl.serverIP}/slot/set?index=${slot}&${+new Date()}`); +const setSlot = (slot: string, el: HTMLElement) => { + fetch( + `http://${GBSControl.serverIP}/slot/set?index=${slot}&${+new Date()}` + ); }; /** @@ -695,7 +1213,9 @@ const setSlot = (slot: string) => { */ const updateSlotNames = () => { for (let i = 0; i < GBSControl.maxSlots; i++) { - const el = document.querySelector(`[gbs-message="${i}"][gbs-role="slot"]`); + const el = document.querySelector( + `[gbs-message="${i}"][gbs-role="slot"]` + ); el.setAttribute("gbs-name", GBSControl.structs.slots[i].name); el.setAttribute( @@ -705,29 +1225,6 @@ const updateSlotNames = () => { } }; -/** - * Description placeholder - * - * @returns {*} - */ -const fetchSlotNames = () => { - return fetch(`http://${GBSControl.serverIP}/bin/slots.bin?${+new Date()}`) - .then((response) => response.arrayBuffer()) - .then((arrayBuffer: ArrayBuffer) => { - if ( - arrayBuffer.byteLength === - StructParser.getSize(Structs, "slots") * GBSControl.maxSlots - ) { - GBSControl.structs = { - slots: StructParser.parseStructArray(arrayBuffer, Structs, "slots"), - }; - return true; - } - return false; - }); -}; - - /** * Must be aligned with options.h -> OutputResolution * @@ -736,75 +1233,46 @@ const fetchSlotNames = () => { */ const getSlotPresetName = (resolutionID: string) => { switch (resolutionID) { - case 'c': - case 'd': - // case 0x011: + case "c": + case "d": + // case 0x011: return "960p"; - case 'e': - case 'f': - // case 0x012: + case "e": + case "f": + // case 0x012: return "1024p"; - case 'g': - case 'h': - // case 0x013: + case "g": + case "h": + // case 0x013: return "720p"; - case 'i': - case 'j': - // case 0x015: + case "i": + case "j": + // case 0x015: return "480p"; - case 'k': - case 'l': + case "k": + case "l": return "1080p"; - case 'm': - case 'n': - // case 0x016: + case "m": + case "n": + // case 0x016: return "DOWNSCALE"; - case 'p': + case "p": return "576p"; - case 'q': + case "q": return "BYPASS"; - case 's': // bypass 1 + case "s": // bypass 1 return "BYPASS HD"; - case 'u': // bypass 2 + case "u": // bypass 2 return "BYPASS RGBHV"; // case 12: // return "CUSTOM"; - case 'a': + case "a": return "240p"; default: return "NONE"; } }; -/** - * Description placeholder - */ -const fetchSlotNamesErrorRetry = () => { - window.setTimeout(fetchSlotNamesAndInit, 1000); -}; - -/** - * Description placeholder - */ -const fetchSlotNamesAndInit = () => { - fetchSlotNames() - .then((success) => { - if (!success) { - fetchSlotNamesErrorRetry(); - return; - } - initUIElements(); - wifiGetStatus().then(() => { - initUI(); - updateSlotNames(); - createWebSocket(); - createIntervalChecks(); - window.setTimeout(hideLoading, 1000); - }); - }, fetchSlotNamesErrorRetry) - .catch(fetchSlotNamesErrorRetry); -}; - /** Promises */ const serial = (funcs: (() => Promise)[]) => funcs.reduce( @@ -837,11 +1305,11 @@ const toggleDeveloperMode = () => { /** * Description placeholder */ -const toggleCustomSlotFilters = () => { - const customSlotFilters = GBSStorage.read("customSlotFilters"); - GBSStorage.write("customSlotFilters", !customSlotFilters); - updateCustomSlotFilters(!customSlotFilters); -}; +// const toggleCustomSlotFilters = () => { +// const customSlotFilters = GBSStorage.read("customSlotFilters"); +// GBSStorage.write("customSlotFilters", !customSlotFilters); +// updateCustomSlotFilters(!customSlotFilters); +// }; /** * Description placeholder @@ -883,7 +1351,9 @@ const updateConsoleVisibility = (developerMode: boolean) => { * @param {boolean} developerMode */ const updateDeveloperMode = (developerMode: boolean) => { - const el = document.querySelector('[gbs-section="developer"]') as HTMLElement; + const el = document.querySelector( + '[gbs-section="developer"]' + ) as HTMLElement; if (developerMode) { GBSStorage.write("consoleVisible", true); el.removeAttribute("hidden"); @@ -895,9 +1365,8 @@ const updateDeveloperMode = (developerMode: boolean) => { document.body.classList.add("gbs-output-hide"); } - GBSControl.ui.developerSwitch.querySelector( - ".gbs-icon" - ).innerText = developerMode ? "toggle_on" : "toggle_off"; + GBSControl.ui.developerSwitch.querySelector(".gbs-icon").innerText = + developerMode ? "toggle_on" : "toggle_off"; }; /** @@ -905,19 +1374,19 @@ const updateDeveloperMode = (developerMode: boolean) => { * * @param {boolean} [customFilters=GBSStorage.read("customSlotFilters") === true] */ -const updateCustomSlotFilters = ( - customFilters: boolean = GBSStorage.read("customSlotFilters") === true -) => { - if (customFilters) { - GBSControl.ui.customSlotFilters.setAttribute("active", ""); - } else { - GBSControl.ui.customSlotFilters.removeAttribute("active"); - } +// const updateCustomSlotFilters = ( +// customFilters: boolean = GBSStorage.read("customSlotFilters") === true +// ) => { +// if (customFilters) { +// GBSControl.ui.customSlotFilters.setAttribute("active", ""); +// } else { +// GBSControl.ui.customSlotFilters.removeAttribute("active"); +// } - GBSControl.ui.customSlotFilters.querySelector( - ".gbs-icon" - ).innerText = customFilters ? "toggle_on" : "toggle_off"; -}; +// GBSControl.ui.customSlotFilters.querySelector( +// ".gbs-icon" +// ).innerText = customFilters ? "toggle_on" : "toggle_off"; +// }; /** * Description placeholder @@ -934,80 +1403,12 @@ const GBSStorage = { JSON.stringify(GBSStorage.lsObject) ); }, - read(key: string): string | number | boolean { - GBSStorage.lsObject = JSON.parse( - localStorage.getItem("GBSControlSlotNames") || "{}" - ); - return GBSStorage.lsObject[key]; - }, -}; - -/** - * Description placeholder - * - * @template Element - * @param {(| HTMLCollectionOf - * | NodeListOf)} nodelist - * @returns {Element[]} - */ -const nodelistToArray = ( - nodelist: - | HTMLCollectionOf - | NodeListOf -): Element[] => { - return Array.prototype.slice.call(nodelist); -}; - -/** - * Description placeholder - * - * @param {string} id - * @returns {(button: HTMLElement, _index: any, _array: any) => void} - */ -const toggleButtonActive = (id: string) => ( - button: HTMLElement, - _index: any, - _array: any -) => { - button.removeAttribute("active"); - - if (button.getAttribute("gbs-element-ref") === id) { - button.setAttribute("active", ""); - } -}; - -/** - * Description placeholder - * - * @param {boolean} mode - */ -const displayWifiWarning = (mode: boolean) => { - GBSControl.ui.webSocketConnectionWarning.style.display = mode - ? "block" - : "none"; -}; - -/** - * Description placeholder - */ -const updateTerminal = () => { - if (GBSControl.queuedText.length > 0) { - requestAnimationFrame(() => { - GBSControl.ui.terminal.value += GBSControl.queuedText; - GBSControl.ui.terminal.scrollTop = GBSControl.ui.terminal.scrollHeight; - GBSControl.queuedText = ""; - }); - } -}; - -/** - * Description placeholder - */ -const updateViewPort = () => { - document.documentElement.style.setProperty( - "--viewport-height", - window.innerHeight + "px" - ); + read(key: string): string | number | boolean { + GBSStorage.lsObject = JSON.parse( + localStorage.getItem("GBSControlSlotNames") || "{}" + ); + return GBSStorage.lsObject[key]; + }, }; /** @@ -1115,7 +1516,10 @@ const doRestore = (f: File) => { // const fileBuffer = new Uint8Array(file); // const headerCheck = fileBuffer.slice(4, 6); - const bkpTs = f.name.substring(f.name.lastIndexOf('-') + 1, f.name.lastIndexOf('.')); + const bkpTs = f.name.substring( + f.name.lastIndexOf("-") + 1, + f.name.lastIndexOf(".") + ); const backupDate = new Date(parseInt(bkpTs)); // if (headerCheck[0] !== 0x7b || headerCheck[1] !== 0x22) { @@ -1124,22 +1528,27 @@ const doRestore = (f: File) => { formData.append("gbs-backup.bin", f, f.name); const setAlertBody = () => { const fsize = f.size / 1024; - return '

    Backup File:

    Backup date: ' - + backupDate.toLocaleString() - + '

    Size: ' + fsize.toFixed(2)+' kB

    '; + return ( + "

    Backup File:

    Backup date: " + + backupDate.toLocaleString() + + "

    Size: " + + fsize.toFixed(2) + + " kB

    " + ); }; gbsAlert( setAlertBody() as string, '
    close
    Reject
    ', '
    done
    Restore
    ' - ).then( + ) + .then( () => { backupInput.removeAttribute("disabled"); }, () => { return fetch(`http://${GBSControl.serverIP}/data/restore`, { method: "POST", - body: formData + body: formData, }).then((response) => { // backupInput.removeAttribute("disabled"); window.setTimeout(() => { @@ -1247,154 +1656,11 @@ const doRestore = (f: File) => { // document.body.removeChild(link); // }; -/** WIFI management */ -const wifiGetStatus = () => { - return fetch(`http://${GBSControl.serverIP}/wifi/status?${+new Date()}`) - .then((r) => r.json()) - .then((wifiStatus: { mode: string; ssid: string }) => { - GBSControl.wifi = wifiStatus; - if (GBSControl.wifi.mode === "ap") { - GBSControl.ui.wifiApButton.setAttribute("active", ""); - GBSControl.ui.wifiApButton.classList.add("gbs-button__secondary"); - GBSControl.ui.wifiStaButton.removeAttribute("active", ""); - GBSControl.ui.wifiStaButton.classList.remove("gbs-button__secondary"); - GBSControl.ui.wifiStaSSID.innerHTML = "STA | Scan Network"; - } else { - GBSControl.ui.wifiApButton.removeAttribute("active", ""); - GBSControl.ui.wifiApButton.classList.remove("gbs-button__secondary"); - GBSControl.ui.wifiStaButton.setAttribute("active", ""); - GBSControl.ui.wifiStaButton.classList.add("gbs-button__secondary"); - GBSControl.ui.wifiStaSSID.innerHTML = `${GBSControl.wifi.ssid}`; - } - }); -}; - -/** - * Does connect to selected WiFi network - */ -const wifiConnect = () => { - const ssid = GBSControl.ui.wifiSSDInput.value; - const password = GBSControl.ui.wifiPasswordInput.value; - - if (!password.length) { - GBSControl.ui.wifiPasswordInput.classList.add("gbs-wifi__input--error"); - return; - } - - const formData = new FormData(); - formData.append("n", ssid); - formData.append("p", password); - - fetch(`http://${GBSControl.serverIP}/wifi/connect`, { - method: "POST", - body: formData, - }).then(() => { - gbsAlert( - `GBSControl will restart and will connect to ${ssid}. Please wait few seconds then press OK` - ).then(() => { - window.location.href = "http://gbscontrol.local/"; - }).catch(() => { }); - }); -}; - -/** - * Query WiFi networks - */ -const wifiScanSSID = () => { - GBSControl.ui.wifiStaButton.setAttribute("disabled", ""); - GBSControl.ui.wifiListTable.innerHTML = ""; - - if (!GBSControl.scanSSIDDone) { - fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { - method: 'POST' - }).then(() => { - GBSControl.scanSSIDDone = true; - window.setTimeout(wifiScanSSID, 3000); - }); - return; - } - - fetch(`http://${GBSControl.serverIP}/wifi/list?${+new Date()}`, { - method: 'POST' - }) - .then((e) => e.text()) - .then((result) => { - GBSControl.scanSSIDDone = false; - return result.length - ? result - .split("\n") - .map((line) => line.split(",")) - .map(([strength, encripted, ssid]) => { - return { strength, encripted, ssid }; - }) - : []; - }) - .then((ssids) => { - return ssids.reduce((acc, ssid) => { - return `${acc} - wifi - ${ssid.ssid} - ${ssid.encripted ? "lock" : "lock_open"} - `; - }, ""); - }) - .then((html) => { - GBSControl.ui.wifiStaButton.removeAttribute("disabled"); - - if (html.length) { - GBSControl.ui.wifiListTable.innerHTML = html; - GBSControl.ui.wifiList.removeAttribute("hidden"); - GBSControl.ui.wifiConnect.setAttribute("hidden", ""); - } - }); -}; - -/** - * Description placeholder - * - * @param {Event} event - */ -const wifiSelectSSID = (event: Event) => { - (GBSControl.ui - .wifiSSDInput as HTMLInputElement).value = (event.target as HTMLElement).parentElement.getAttribute( - "gbs-ssid" - ); - GBSControl.ui.wifiPasswordInput.classList.remove("gbs-wifi__input--error"); - GBSControl.ui.wifiList.setAttribute("hidden", ""); - GBSControl.ui.wifiConnect.removeAttribute("hidden"); -}; - -/** - * Description placeholder - * - * @returns {*} - */ -const wifiSetAPMode = () => { - if (GBSControl.wifi.mode === "ap") { - return; - } - - // const formData = new FormData(); - // formData.append("n", "dummy"); - - return fetch(`http://${GBSControl.serverIP}/wifi/ap`, { - method: "POST", - // body: formData, - }).then((response) => { - gbsAlert( - "Switching to AP mode. Please connect to gbscontrol SSID and then click OK" - ).then(() => { - window.location.href = "http://192.168.4.1"; - }).catch(() => { }); - return response; - }); -}; - /** button click management */ const controlClick = (control: HTMLButtonElement) => () => { const controlKey = control.getAttribute("gbs-control-key"); - const target = GBSControl.controlKeysMobile[GBSControl.controlKeysMobileMode]; + const target = + GBSControl.controlKeysMobile[GBSControl.controlKeysMobileMode]; switch (target.type) { case "loadDoc": @@ -1478,7 +1744,7 @@ const initGBSButtons = () => { if (clickMode === "normal") { button.addEventListener("click", () => { - action(message); + action(message, button); }); } @@ -1523,9 +1789,8 @@ const initControlMobileKeys = () => { controls.forEach((control) => { control.addEventListener("click", () => { - GBSControl.controlKeysMobileMode = control.getAttribute( - "gbs-control-target" - ); + GBSControl.controlKeysMobileMode = + control.getAttribute("gbs-control-target"); controls.forEach((crtl) => { crtl.removeAttribute("active"); }); @@ -1563,7 +1828,10 @@ const initUnloadListener = () => { window.addEventListener("unload", () => { clearInterval(GBSControl.wsCheckTimer); if (GBSControl.ws) { - if (GBSControl.ws.readyState == 0 || GBSControl.ws.readyState == 1) { + if ( + GBSControl.ws.readyState == 0 || + GBSControl.ws.readyState == 1 + ) { GBSControl.ws.close(); } } @@ -1580,52 +1848,6 @@ const initSlotButtons = () => { ) as HTMLElement[]; }; -/** - * Description placeholder - */ -const initUIElements = () => { - GBSControl.ui = { - terminal: document.getElementById("outputTextArea"), - webSocketConnectionWarning: document.getElementById("websocketWarning"), - presetButtonList: nodelistToArray( - document.querySelectorAll("[gbs-role='preset']") - ) as HTMLElement[], - slotButtonList: nodelistToArray( - document.querySelectorAll('[gbs-role="slot"]') - ) as HTMLElement[], - toggleConsole: document.querySelector("[gbs-output-toggle]"), - toggleList: document.querySelectorAll("[gbs-toggle]"), - toggleSwichList: document.querySelectorAll("[gbs-toggle-switch]"), - wifiList: document.querySelector("[gbs-wifi-list]"), - wifiListTable: document.querySelector(".gbs-wifi__list"), - wifiConnect: document.querySelector(".gsb-wifi__connect"), - wifiConnectButton: document.querySelector("[gbs-wifi-connect-button]"), - wifiSSDInput: document.querySelector('[gbs-input="ssid"]'), - wifiPasswordInput: document.querySelector('[gbs-input="password"]'), - wifiApButton: document.querySelector("[gbs-wifi-ap]"), - wifiStaButton: document.querySelector("[gbs-wifi-station]"), - wifiStaSSID: document.querySelector("[gbs-wifi-station-ssid]"), - loader: document.querySelector(".gbs-loader"), - progressBackup: document.querySelector("[gbs-progress-backup]"), - progressRestore: document.querySelector("[gbs-progress-restore]"), - outputClear: document.querySelector("[gbs-output-clear]"), - slotContainer: document.querySelector("[gbs-slot-html]"), - backupButton: document.querySelector(".gbs-backup-button"), - backupInput: document.querySelector(".gbs-backup-input"), - developerSwitch: document.querySelector("[gbs-dev-switch]"), - customSlotFilters: document.querySelector("[gbs-slot-custom-filters]"), - alert: document.querySelector('section[name="alert"]'), - alertAck: document.querySelector("[gbs-alert-ack]"), - alertAct: document.querySelector("[gbs-alert-act]"), - alertContent: document.querySelector("[gbs-alert-content]"), - prompt: document.querySelector('section[name="prompt"]'), - promptOk: document.querySelector("[gbs-prompt-ok]"), - promptCancel: document.querySelector("[gbs-prompt-cancel]"), - promptContent: document.querySelector("[gbs-prompt-content]"), - promptInput: document.querySelector('[gbs-input="prompt-input"]'), - }; -}; - /** * Description placeholder */ @@ -1646,11 +1868,17 @@ const initGeneralListeners = () => { GBSControl.ui.wifiConnectButton.addEventListener("click", wifiConnect); GBSControl.ui.wifiApButton.addEventListener("click", wifiSetAPMode); GBSControl.ui.wifiStaButton.addEventListener("click", wifiScanSSID); - GBSControl.ui.developerSwitch.addEventListener("click", toggleDeveloperMode); - GBSControl.ui.customSlotFilters.addEventListener( + GBSControl.ui.developerSwitch.addEventListener( "click", - toggleCustomSlotFilters + toggleDeveloperMode ); + // GBSControl.ui.customSlotFilters.addEventListener( + // "click", + // toggleCustomSlotFilters + // ); + GBSControl.ui.removeSlotButton.addEventListener("click", () => { + removePreset(); + }); GBSControl.ui.alertAck.addEventListener("click", () => { GBSControl.ui.alert.setAttribute("hidden", ""); @@ -1717,109 +1945,11 @@ const initHelp = () => { updateHelp(help); }; -/** - * Description placeholder - * - * @type {{ resolve: any; reject: any; }} - */ -const gbsAlertPromise = { - resolve: null, - reject: null, -}; - -/** - * Description placeholder - * - * @param {*} event - */ -const alertKeyListener = (event: any) => { - if (event.keyCode === 13) { - gbsAlertPromise.resolve(); - } - if (event.keyCode === 27) { - gbsAlertPromise.reject(); - } -}; - -const alertActEventListener = (e: any) => { - gbsAlertPromise.reject(); -}; - -/** - * Description placeholder - * - * @param {string} text - * @returns {*} - */ -const gbsAlert = (text: string, ackText: string = "", actText :string = "") => { - GBSControl.ui.alertContent.insertAdjacentHTML('afterbegin', text); - GBSControl.ui.alert.removeAttribute("hidden"); - document.addEventListener("keyup", alertKeyListener); - if(ackText !== "") { - GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', ackText); - } else - GBSControl.ui.alertAck.insertAdjacentHTML('afterbegin', '
    done
    Ok
    '); - - if(actText !== "") { - GBSControl.ui.alertAct.insertAdjacentHTML('afterbegin', actText); - GBSControl.ui.alertAct.removeAttribute("disabled"); - GBSControl.ui.alertAct.addEventListener("click", alertActEventListener); - } - return new Promise((resolve, reject) => { - const gbsAlertClean = () => { - document.removeEventListener("keyup", alertKeyListener); - GBSControl.ui.alertAct.removeEventListener("click", alertActEventListener); - GBSControl.ui.alertAct.setAttribute("disabled", ""); - GBSControl.ui.alertAck.textContent = ""; - GBSControl.ui.alertAct.textContent = ""; - GBSControl.ui.alertContent.textContent = ""; - GBSControl.ui.alert.setAttribute("hidden", ""); - }; - gbsAlertPromise.resolve = (e) => { - gbsAlertClean(); - return resolve(e); - }; - gbsAlertPromise.reject = () => { - gbsAlertClean(); - return reject(); - }; - }); -}; - -/** - * Description placeholder - * - * @type {{ resolve: any; reject: any; }} - */ -const gbsPromptPromise = { - resolve: null, - reject: null, -}; - -/** - * Description placeholder - * - * @param {string} text - * @param {string} [defaultValue=""] - * @returns {*} - */ -const gbsPrompt = (text: string, defaultValue = "") => { - GBSControl.ui.promptContent.textContent = text; - GBSControl.ui.prompt.removeAttribute("hidden"); - GBSControl.ui.promptInput.value = defaultValue; - - return new Promise((resolve, reject) => { - gbsPromptPromise.resolve = resolve; - gbsPromptPromise.reject = reject; - GBSControl.ui.promptInput.focus(); - }); -}; - /** * Description placeholder */ const initUI = () => { - updateCustomSlotFilters(); + // updateCustomSlotFilters(); initGeneralListeners(); updateViewPort(); initSlotButtons(); diff --git a/public/src/style.css b/public/src/style.css index 6063adcf..9d57b6c0 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -1,21 +1,21 @@ /** variables */ :root { - --color-black: black; - --color-cod-gray-light: #181818; - --color-cod-gray: #101010; - --color-mine-shaft-light: #303030; - --color-mine-shaft: #202020; - --color-primary-rgba: 0, 192, 251; - --color-primary: #00c0fb; - --color-scorpion: #808080; - --color-secondary-rgba: 234, 182, 56; - --color-secondary: #eab638; - --color-silver-chalice: #aaa; - --color-warning: red; - --color-white: white; - --viewport-height: 100%; - - /*GBC + --color-black: black; + --color-cod-gray-light: #181818; + --color-cod-gray: #101010; + --color-mine-shaft-light: #303030; + --color-mine-shaft: #202020; + --color-primary-rgba: 0, 192, 251; + --color-primary: #00c0fb; + --color-scorpion: #808080; + --color-secondary-rgba: 234, 182, 56; + --color-secondary: #eab638; + --color-silver-chalice: #aaa; + --color-warning: red; + --color-white: white; + --viewport-height: 100%; + + /*GBC --color-black: black; --color-cod-gray-light: #181818; --color-cod-gray: #101010; @@ -34,650 +34,671 @@ /* latin */ @font-face { - font-family: "Oswald"; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(data:font/woff2;base64,${oswald}) format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; + font-family: "Oswald"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url('data:font/woff2;base64,${oswald}') format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } /* fallback */ +/* + See: https://github.com/jossef/material-design-icons-iconfont/ + Ex: https://jossef.github.io/material-design-icons-iconfont/ +*/ @font-face { - font-family: "Material Icons"; - font-style: normal; - font-weight: 400; - src: url(data:font/woff2;base64,${material}) format("woff2"); + font-family: "Material Icons"; + font-style: normal; + font-weight: 400; + font-display: block; + src: local('Material Icons'), local('MaterialIcons-Regular'), url('data:font/woff2;base64,${material}') format("woff2"); } html, body { - height: 100%; - touch-action: manipulation; - width: 100%; + height: 100%; + touch-action: manipulation; + width: 100%; } body { - background-color: var(--color-cod-gray); - font-family: "Oswald", sans-serif; - height: 100%; - margin: 0; - overflow: hidden; - padding: 0; - width: 100%; + background-color: var(--color-cod-gray); + font-family: "Oswald", sans-serif; + height: 100%; + margin: 0; + overflow: hidden; + padding: 0; + width: 100%; } * { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } /** main container */ .gbs-container { - background-color: var(--color-mine-shaft); - display: inline-block; - height: 100%; - margin-left: auto; - margin-right: auto; - max-width: 414px; - overflow: hidden; - position: relative; - width: 100%; + background-color: var(--color-mine-shaft); + display: inline-block; + height: 100%; + margin-left: auto; + margin-right: auto; + max-width: 414px; + overflow: hidden; + position: relative; + width: 100%; } /** main screen scrollable area */ .gbs-scroll { - height: calc(100% - 54px); - margin-bottom: 148px; - overflow-x: hidden; - overflow-y: auto; + height: calc(100% - 54px); + margin-bottom: 148px; + overflow-x: hidden; + overflow-y: auto; } .gbs-scroll::-webkit-scrollbar { - width: 2px; + width: 2px; } .gbs-scroll::-webkit-scrollbar-track { - background: transparent; + background: transparent; } .gbs-scroll::-webkit-scrollbar-thumb { - background-color: var(--color-primary); - border-radius: 20px; + background-color: var(--color-primary); + border-radius: 20px; } /* buttons */ .gbs-button { - appearance: none; - background-color: var(--color-mine-shaft-light); - border-radius: 4px; - border: 1px dashed rgba(var(--color-primary-rgba), 0.2); - color: rgba(var(--color-primary-rgba), 0.6); - cursor: pointer; - flex-grow: 1; - font-family: inherit; - font-size: 14px; - font-weight: 300; - margin: 2px; - outline: 0; - overflow: hidden; - padding: 4px 8px; - position: relative; - text-align: right; - text-overflow: ellipsis; - transition: all 0.2s linear; - user-select: none; - white-space: nowrap; + appearance: none; + background-color: var(--color-mine-shaft-light); + border-radius: 4px; + border: 1px dashed rgba(var(--color-primary-rgba), 0.2); + color: rgba(var(--color-primary-rgba), 0.6); + cursor: pointer; + flex-grow: 1; + font-family: inherit; + font-size: 14px; + font-weight: 300; + margin: 2px; + outline: 0; + overflow: hidden; + padding: 4px 8px; + position: relative; + text-align: right; + text-overflow: ellipsis; + transition: all 0.2s linear; + user-select: none; + white-space: nowrap; } .gbs-button[disabled] { - opacity: 0.3; - pointer-events: none; + opacity: 0.3; + pointer-events: none; } .gbs-button[active] { - border: 1px solid var(--color-primary); - box-shadow: inset 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2), - 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2); - color: var(--color-primary); + border: 1px solid var(--color-primary); + box-shadow: inset 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2), + 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2); + color: var(--color-primary); } .gbs-button__secondary { - border: 1px dashed rgba(var(--color-secondary-rgba), 0.3); - color: rgba(var(--color-secondary-rgba), 0.7); + border: 1px dashed rgba(var(--color-secondary-rgba), 0.3); + color: rgba(var(--color-secondary-rgba), 0.7); } .gbs-button__secondary[active] { - background-color: rgba(var(--color-secondary-rgba), 0.7); - border: 1px solid rgba(var(--color-secondary-rgba), 0.3); - box-shadow: inset 0 0 6px 4px rgba(var(--color-secondary-rgba), 0.2), - 0 0 6px 8px rgba(var(--color-secondary-rgba), 0.2); - color: var(--color-black); - transform: scale(0.98); + background-color: rgba(var(--color-secondary-rgba), 0.7); + border: 1px solid rgba(var(--color-secondary-rgba), 0.3); + box-shadow: inset 0 0 6px 4px rgba(var(--color-secondary-rgba), 0.2), + 0 0 6px 8px rgba(var(--color-secondary-rgba), 0.2); + color: var(--color-black); + transform: scale(0.98); } .gbs-button__menu { - margin: 2px; - width: 100%; - text-align: center; + margin: 2px; + width: 100%; + text-align: center; } .gbs-button__preset { - flex-grow: 1; - font-size: 12px; - height: 44px; - line-height: 12px; - margin: 1px; - padding: 4px; - text-align: right; - vertical-align: top; - white-space: initial; + flex-grow: 1; + font-size: 12px; + height: 44px; + line-height: 12px; + margin: 1px; + padding: 4px; + text-align: right; + vertical-align: top; + white-space: initial; } .gbs-button__slot { - flex-grow: 1; - line-height: 16px; - margin: 4px; - min-height: 56px; - padding: 8px; - text-align: right; - width: 132px; + flex-grow: 1; + line-height: 16px; + margin: 4px; + min-height: 56px; + padding: 8px; + text-align: right; + width: 132px; } .gbs-button__slot::before { - color: var(--color-secondary); - content: attr(gbs-name); - font-size: 16px; - white-space: normal; + color: var(--color-secondary); + content: attr(gbs-name); + font-size: 16px; + white-space: normal; } .gbs-button__slot::after { - color: var(--color-primary); - content: attr(gbs-meta); - display: block; - font-size: 10px; - line-height: 14px; - white-space: pre; + color: var(--color-primary); + content: attr(gbs-meta); + display: block; + font-size: 10px; + line-height: 14px; + white-space: pre; } .gbs-button__resolution { - flex-grow: 1; - font-size: 14px; - height: 52px; - line-height: 14px; - margin: 1px; - min-width: 40px; - padding: 4px; - text-align: center; - vertical-align: top; - white-space: initial; + flex-grow: 1; + font-size: 14px; + height: 52px; + line-height: 14px; + margin: 1px; + min-width: 40px; + padding: 4px; + text-align: center; + vertical-align: top; + white-space: initial; } .gbs-button__resolution--center { - text-align: center; + text-align: center; } .gbs-button__resolution--pass-through { - font-size: 10px; - line-height: 10px; - position: relative; - top: -4px; + font-size: 10px; + line-height: 10px; + position: relative; + top: -4px; } .gbs-button__control { - flex-grow: 1; - height: 68px; - margin: 2px; - padding: 6px; - text-align: right; - vertical-align: top; - white-space: initial; - width: 84px; + flex-grow: 1; + height: 68px; + margin: 2px; + padding: 6px; + text-align: right; + vertical-align: top; + white-space: initial; + width: 84px; } .gbs-button__control-action { - flex-grow: 1; - height: 56px; - line-height: 1; - margin: 4px; - text-align: right; + flex-grow: 1; + height: 56px; + line-height: 1; + margin: 4px; + text-align: right; } /* menu */ .gbs-menu { - background-color: var(--color-cod-gray-light); - border-top: 1px solid #282828; - bottom: 0; - box-sizing: border-box; - color: var(--color-primary); - display: flex; - height: 54px; - padding: 8px; - position: absolute; - text-align: center; - width: 100%; + background-color: var(--color-cod-gray-light); + border-top: 1px solid #282828; + bottom: 0; + box-sizing: border-box; + color: var(--color-primary); + display: flex; + height: 54px; + padding: 8px; + position: absolute; + text-align: center; + width: 100%; } .gbs-menu__logo { - display: none; - margin: auto; - margin-right: 8px; - width: 200%; + display: none; + margin: auto; + margin-right: 8px; + width: 200%; } /* fieldset */ .gbs-fieldset { - border-radius: 4px; - border: 1px solid rgba(var(--color-primary-rgba), 0.1); - box-sizing: border-box; - color: var(--color-primary); - font-size: 15px; - margin: 8px; - padding: 8px; - position: relative; + border-radius: 4px; + border: 1px solid rgba(var(--color-primary-rgba), 0.1); + box-sizing: border-box; + color: var(--color-primary); + font-size: 15px; + margin: 8px; + padding: 8px; + position: relative; } .gbs-fieldset__legend { - display: inline-block !important; - font-size: 16px; - position: relative; - text-align: left; - vertical-align: top; + display: inline-block !important; + font-size: 16px; + position: relative; + text-align: left; + vertical-align: top; } .gbs-fieldset__legend--help::after { - color: var(--color-secondary); - content: "help_center"; - cursor: pointer; - font-family: "Material Icons"; - font-size: 24px; - position: relative; - top: 8px; + color: var(--color-secondary); + content: "help_center"; + cursor: pointer; + font-family: "Material Icons"; + font-size: 24px; + position: relative; + top: 8px; } .gbs-show-help .gbs-fieldset__legend::after { - color: var(--color-scorpion); + color: var(--color-scorpion); } .gbs-fieldset__legend div { - display: inline-block; - vertical-align: middle; + display: inline-block; + vertical-align: middle; } /** table */ .gbs-preferences { - width: 100%; + width: 100%; } .gbs-preferences td { - color: var(--color-silver-chalice); - text-align: left; + color: var(--color-silver-chalice); + text-align: left; } .gbs-preferences td[toggle-switch], .gbs-preferences td.gbs-icon { - cursor: pointer; + cursor: pointer; } .gbs-preferences tr[active] td { - color: var(--color-primary); + color: var(--color-primary); } .gbs-preferences tr td.gbs-preferences__child { - color: var(--color-secondary); + color: var(--color-secondary); } .gbs-preferences tr[active] td.gbs-preferences__child { - color: var(--color-secondary); + color: var(--color-secondary); } .gbs-preferences td em { - color: var(--color-silver-chalice); - display: block; - display: none; - font-size: 12px; - font-style: normal; - line-height: 16px; - margin-bottom: 16px; - margin-top: 4px; + color: var(--color-silver-chalice); + display: block; + display: none; + font-size: 12px; + font-style: normal; + line-height: 16px; + margin-bottom: 16px; + margin-top: 4px; } .gbs-preferences .gbs-icon { - font-size: 32px; + font-size: 32px; } /* sections */ .gbs-scroll { - /* self */ - display: flex; - flex-direction: column; + /* self */ + display: flex; + flex-direction: column; } -.gbs-scroll > section[name="presets"] { - flex-grow: 1; - /* self */ - display: flex; - flex-direction: column; - padding: 8px; - gap: 8px; + +.gbs-scroll>section[name="presets"] { + flex-grow: 1; + /* self */ + display: flex; + flex-direction: column; + padding: 8px; + gap: 8px; } -.gbs-scroll > section[name="presets"] > fieldset { - margin: 0; + +.gbs-scroll>section[name="presets"]>fieldset { + margin: 0; } /* .gbs-resolution { display: flex; } */ -.gbs-scroll > section[name="presets"] > fieldset.presets { - flex-grow: 1; - /* self */ - display: flex; - flex-direction: column; +.gbs-scroll>section[name="presets"]>fieldset.presets { + flex-grow: 1; + /* self */ + display: flex; + flex-direction: column; } -.gbs-scroll > section[name="presets"] > fieldset.presets > .gbs-presets { - flex-grow: 1; - /* self */ - border-radius: 8px; - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin-bottom: 16px; - overflow-y: scroll; - overflow: hidden; + +.gbs-scroll>section[name="presets"]>fieldset.presets>.gbs-presets { + flex-grow: 1; + /* self */ + border-radius: 8px; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin-bottom: 16px; + overflow-y: scroll; + overflow: hidden; } .gbs-controls__desktop { - display: none; + display: none; } .gbs-output-hide .gbs-output { - display: none; + display: none; } .gbs-output { - position: relative; + position: relative; } .gbs-output__textarea { - appearance: none; - background-color: var(--color-black); - border-radius: 8px; - border: none; - box-sizing: border-box; - color: var(--color-white); - flex-grow: 1; - height: 400px; - outline: 0; - padding: 16px; - resize: none; - scrollbar-color: var(--color-primary) var(--color-black); - scrollbar-width: thin; + appearance: none; + background-color: var(--color-black); + border-radius: 8px; + border: none; + box-sizing: border-box; + color: var(--color-white); + flex-grow: 1; + height: 400px; + outline: 0; + padding: 16px; + resize: none; + scrollbar-color: var(--color-primary) var(--color-black); + scrollbar-width: thin; } .gbs-output__textarea::-webkit-scrollbar { - border-radius: 20px; - width: 20px; + border-radius: 20px; + width: 20px; } .gbs-output__textarea::-webkit-scrollbar-track { - background-color: var(--color-black); - border-radius: 20px; + background-color: var(--color-black); + border-radius: 20px; } .gbs-output__textarea::-webkit-scrollbar-thumb { - background-color: var(--color-primary); - border-radius: 20px; - border: 7px solid var(--color-black); + background-color: var(--color-primary); + border-radius: 20px; + border: 7px solid var(--color-black); } .gbs-loader { - align-items: center; - background-color: var(--color-mine-shaft); - display: flex; - height: 100%; - justify-content: center; - left: 0; - position: fixed; - top: 0; - width: 100%; + align-items: center; + background-color: var(--color-mine-shaft); + display: flex; + height: 100%; + justify-content: center; + left: 0; + position: fixed; + top: 0; + width: 100%; } .gbs-loader img { - border-radius: 16px; - box-shadow: 0 0 64px 4px var(--color-primary); - width: 160px; + border-radius: 16px; + box-shadow: 0 0 64px 4px var(--color-primary); + width: 160px; } .gbs-loader, body { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='152' height='152'%3E%3Cpath fill='%2300c0fb' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E"); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='152' height='152'%3E%3Cpath fill='%2300c0fb' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E"); } .gbs-wifi__list { - text-align: left; + text-align: left; } .gbs-wifi__list tr { - height: 38px; - line-height: 38px; + height: 38px; + line-height: 38px; } .gbs-wifi__list td { - line-height: 18px; - vertical-align: top; + line-height: 18px; + vertical-align: top; } -.gbs-wifi__list .gbs-icon ~ td { - width: 100%; +.gbs-wifi__list .gbs-icon~td { + width: 100%; } -.gbs-wifi__list td ~ td ~ td { - color: var(--color-secondary); +.gbs-wifi__list td~td~td { + color: var(--color-secondary); } .gbs-wifi__input { - flex-grow: 1; - height: 38px; + flex-grow: 1; + height: 38px; } .gbs-wifi__input--error { - animation: gbs-border-blinker 0.5s linear infinite; + animation: gbs-border-blinker 0.5s linear infinite; } input { - -webkit-user-select: initial !important; - user-select: initial !important; + -webkit-user-select: initial !important; + user-select: initial !important; } .gbs-wifi-warning { - animation: gbs-blinker 0.5s linear infinite; - color: var(--color-warning); - position: absolute; - right: 18px; - top: 10px; - z-index: 1; + animation: gbs-blinker 0.5s linear infinite; + color: var(--color-warning); + position: absolute; + right: 18px; + top: 10px; + z-index: 1; } /* modals */ section[name="prompt"], section[name="alert"] { - background-color: rgba(0, 0, 0, 0.96); - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; + background-color: rgba(0, 0, 0, 0.96); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } .gbs-modal__message { - text-align: right; - margin-top: 16px; - margin-bottom: 32px; + text-align: right; + margin-top: 16px; + margin-bottom: 32px; } /* HELPERS */ [hidden] { - display: none !important; + display: none !important; } [gbs-progress]::before { - content: attr(gbs-progress); + content: attr(gbs-progress); } .gbs-backup-input { - cursor: pointer; - height: 100%; - left: 0; - opacity: 0; - position: absolute; - top: 0; - width: 100%; + cursor: pointer; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; } -.gbs-button[gbs-name="Empty"] ~ .gbs-button[gbs-name="Empty"] { - display: none; +.gbs-button[gbs-name="Empty"]~.gbs-button[gbs-name="Empty"] { + display: none; } .gbs-help { - color: var(--color-scorpion); - display: flex; - flex-direction: column; - font-size: 14px; - line-height: 18px; - margin: 8px 0 16px 0; - padding-left: 28px; - text-align: left; - white-space: pre-line; + color: var(--color-scorpion); + display: flex; + flex-direction: column; + font-size: 14px; + line-height: 18px; + margin: 8px 0 16px 0; + padding-left: 28px; + text-align: left; + white-space: pre-line; } .gbs-help-hide .gbs-help { - display: none; + display: none; } .gbs-icon { - -webkit-font-feature-settings: "liga"; - -webkit-font-smoothing: antialiased; - direction: ltr; - display: inline-block; - font-family: "Material Icons"; - font-size: 24px; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-height: 1; - text-transform: none; - white-space: nowrap; - word-wrap: normal; + -webkit-font-feature-settings: "liga"; + -webkit-font-smoothing: antialiased; + direction: ltr; + display: inline-block; + font-family: "Material Icons"; + font-size: 24px; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-height: 1; + text-transform: none; + white-space: nowrap; + word-wrap: normal; + text-rendering: optimizeLegibility; + position: relative; +} + +.gbs-icon:before { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + opacity: .3; +} + +.gbs-icon:after { + opacity: 1; } .gbs-flex { - display: flex; + display: flex; } .gbs-margin__bottom--8 { - margin-bottom: 8px; + margin-bottom: 8px; } .gbs-margin__bottom--16 { - margin-bottom: 16px; + margin-bottom: 16px; } .gbs-padding__left-16 { - padding-left: 16px; + padding-left: 16px; } .gbs-padding__hor-16 { - padding-left: 16px; - padding-right: 16px; + padding-left: 16px; + padding-right: 16px; } @media (min-width: 415px) { - .gbs-button:hover { - border: 1px solid var(--color-primary); - box-shadow: inset 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2), - 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2); - color: var(--color-primary); - } - - .gbs-button__secondary:hover { - background-color: rgba(var(--color-secondary-rgba), 0.7); - border: 1px solid rgba(var(--color-secondary-rgba), 0.3); - box-shadow: inset 0 0 6px 4px rgba(var(--color-secondary-rgba), 0.2), - 0 0 6px 8px rgba(var(--color-secondary-rgba), 0.2); - color: var(--color-black); - transform: scale(0.98); - } - - .gbs-button__control { - height: 60px; - } - - .gbs-menu { - border-bottom: 1px solid rgba(var(--color-primary-rgba), 0.4); - bottom: initial; - padding-left: 8px; - padding-right: 8px; - position: relative; - top: 0; - } - - .gbs-menu__logo { - display: inline-block; - } - - .gbs-controls { - display: none; - } - - .gbs-controls__desktop { - display: block; - } - - .gbs-output { - background-color: var(--color-mine-shaft-light); - height: 100vh; - left: 414px; - position: fixed; - top: 0px; - width: calc(100vw - 414px); - z-index: 1; - } - - .gbs-output__textarea { - height: calc(100vh - 114px); - } - - .gbs-output-hide .gbs-container { - border-radius: 16px; - box-shadow: 0 0 64px 4px rgba(var(--color-primary-rgba), 0.4); - display: block; - height: calc(100vh - 64px); - margin-top: 32px; - } - - .gbs-fieldset-output { - height: calc(100vh - 16px); - } + .gbs-button:hover { + border: 1px solid var(--color-primary); + box-shadow: inset 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2), + 0 0 6px 4px rgba(var(--color-primary-rgba), 0.2); + color: var(--color-primary); + } + + .gbs-button__secondary:hover { + background-color: rgba(var(--color-secondary-rgba), 0.7); + border: 1px solid rgba(var(--color-secondary-rgba), 0.3); + box-shadow: inset 0 0 6px 4px rgba(var(--color-secondary-rgba), 0.2), + 0 0 6px 8px rgba(var(--color-secondary-rgba), 0.2); + color: var(--color-black); + transform: scale(0.98); + } + + .gbs-button__control { + height: 60px; + } + + .gbs-menu { + border-bottom: 1px solid rgba(var(--color-primary-rgba), 0.4); + bottom: initial; + padding-left: 8px; + padding-right: 8px; + position: relative; + top: 0; + } + + .gbs-menu__logo { + display: inline-block; + } + + .gbs-controls { + display: none; + } + + .gbs-controls__desktop { + display: block; + } + + .gbs-output { + background-color: var(--color-mine-shaft-light); + height: 100vh; + left: 414px; + position: fixed; + top: 0px; + width: calc(100vw - 414px); + z-index: 1; + } + + .gbs-output__textarea { + height: calc(100vh - 114px); + } + + .gbs-output-hide .gbs-container { + border-radius: 16px; + box-shadow: 0 0 64px 4px rgba(var(--color-primary-rgba), 0.4); + display: block; + height: calc(100vh - 64px); + margin-top: 32px; + } + + .gbs-fieldset-output { + height: calc(100vh - 16px); + } } @keyframes gbs-border-blinker { - 50% { - border: 1px solid var(--color-warning); - } + 50% { + border: 1px solid var(--color-warning); + } } @keyframes gbs-blinker { - 50% { - opacity: 0; - } -} + 50% { + opacity: 0; + } +} \ No newline at end of file diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index aabdb266..2d966926 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -117,11 +117,13 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL display->drawString(OLED_MENU_WIDTH / 2, 16, item->str); display->drawXbm((OLED_MENU_WIDTH - TEXT_LOADED_WIDTH) / 2, OLED_MENU_HEIGHT / 2, IMAGE_ITEM(TEXT_LOADED)); display->display(); - uopt->presetSlot = 'A' + item->tag; // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:, + // uopt->presetSlot = 'A' + item->tag; // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()!*:, + uopt->presetSlot = item->tag; + // now we're free to load new slot data + if(!slotLoad(uopt->presetSlot)) { + _DBGN(F("unable to read /slots.bin")); + } // uopt->presetPreference = OutputResolution::OutputCustomized; - - // @sk: rely on chance that it's already set before manually - // rto->resolutionID = OutputCustom; // saveUserPrefs(); if (rto->videoStandardInput == 14) { // vga upscale path: let synwatcher handle it @@ -139,7 +141,7 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL } /** - * @brief hardware menu for profile/presets management + * @brief hardware menu for slot management * * @param manager * @param item @@ -151,10 +153,11 @@ bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL int curNumSlot = 0; SlotMetaArray slotsObject; manager->clearSubItems(item); - fs::File slotsBinaryFileRead = LittleFS.open(FPSTR(slotsFile), "r"); - if (slotsBinaryFileRead) { - slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFileRead.close(); + if(slotGetData(slotsObject) != -1) { + // fs::File slotsBinaryFileRead = LittleFS.open(FPSTR(slotsFile), "r"); + // if (slotsBinaryFileRead) { + // slotsBinaryFileRead.read((byte *)&slotsObject, sizeof(slotsObject)); + // slotsBinaryFileRead.close(); String slot_name = String(emptySlotName); for (int i = 0; i < SLOTS_TOTAL; ++i) { const SlotMeta &slot = slotsObject.slot[i]; @@ -165,7 +168,7 @@ bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL if (curNumSlot >= OLED_MENU_MAX_SUBITEMS_NUM) { break; } - manager->registerItem(item, slot.slot, slot.name, presetSelectionMenuHandler); + manager->registerItem(item, i/* slot.slot */, slot.name, presetSelectionMenuHandler); } } // show notice for user to go to webUI @@ -194,8 +197,9 @@ bool resetMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, // not precise if (millis() - oledMenuFreezeStartTime >= oledMenuFreezeTimeoutInMS) { manager->unfreeze(); - ESP.reset(); - return false; + // ESP.reset(); + // return false; + resetInMSec(1000); } return false; } diff --git a/src/main.cpp b/src/main.cpp index a8fb4dba..dbb45bc6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Thursday, 30th May 2024 12:59:29 pm # +# Last Modified: Saturday, 1st June 2024 5:31:23 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -64,6 +64,27 @@ struct adcOptions *adco = &adcopts; char serialCommand = '@'; // Serial / Web Server commands char userCommand = '@'; // Serial / Web Server commands unsigned long lastVsyncLock = millis(); +unsigned long resetCountdown = 0; + +/** + * @brief Schedule the device reset + * + * @param millis + */ +void resetInMSec(unsigned long ms) { + if(ms != 0) + resetCountdown = ms + millis(); + if(resetCountdown == 0) + return; + if(millis() >= resetCountdown) { + server.stop(); + webSocket.close(); + LittleFS.end(); + _WSN(F("restarting...")); + delay(100); + ESP.reset(); + } +} /** * @brief @@ -235,73 +256,62 @@ void setup() // uopt->presetPreference = Output960P; // fresh data ? uopt->presetSlot = lowByte(f.read()); - uopt->enableFrameTimeLock = (uint8_t)(f.read() - '0'); - if (uopt->enableFrameTimeLock > 1) - uopt->enableFrameTimeLock = 0; - - uopt->frameTimeLockMethod = (uint8_t)(f.read() - '0'); - if (uopt->frameTimeLockMethod > 1) - uopt->frameTimeLockMethod = 0; - - uopt->enableAutoGain = (uint8_t)(f.read() - '0'); - if (uopt->enableAutoGain > 1) - uopt->enableAutoGain = 0; - - uopt->wantScanlines = (uint8_t)(f.read() - '0'); - if (uopt->wantScanlines > 1) - uopt->wantScanlines = 0; - - uopt->wantOutputComponent = (uint8_t)(f.read() - '0'); - if (uopt->wantOutputComponent > 1) - uopt->wantOutputComponent = 0; - - uopt->deintMode = (uint8_t)(f.read() - '0'); - if (uopt->deintMode > 2) - uopt->deintMode = 0; - - uopt->wantVdsLineFilter = (uint8_t)(f.read() - '0'); - if (uopt->wantVdsLineFilter > 1) - uopt->wantVdsLineFilter = 0; - - uopt->wantPeaking = (uint8_t)(f.read() - '0'); - if (uopt->wantPeaking > 1) - uopt->wantPeaking = 1; - - uopt->preferScalingRgbhv = (uint8_t)(f.read() - '0'); - if (uopt->preferScalingRgbhv > 1) - uopt->preferScalingRgbhv = 1; - - uopt->wantTap6 = (uint8_t)(f.read() - '0'); - if (uopt->wantTap6 > 1) - uopt->wantTap6 = 1; - - uopt->PalForce60 = (uint8_t)(f.read() - '0'); - if (uopt->PalForce60 > 1) - uopt->PalForce60 = 0; - - uopt->matchPresetSource = (uint8_t)(f.read() - '0'); // #14 - if (uopt->matchPresetSource > 1) - uopt->matchPresetSource = 1; - - uopt->wantStepResponse = (uint8_t)(f.read() - '0'); // #15 - if (uopt->wantStepResponse > 1) - uopt->wantStepResponse = 1; - - uopt->wantFullHeight = (uint8_t)(f.read() - '0'); // #16 - if (uopt->wantFullHeight > 1) - uopt->wantFullHeight = 1; - - uopt->enableCalibrationADC = (uint8_t)(f.read() - '0'); // #17 - if (uopt->enableCalibrationADC > 1) - uopt->enableCalibrationADC = 1; - - uopt->scanlineStrength = (uint8_t)(f.read() - '0'); // #18 - if (uopt->scanlineStrength > 0x60) - uopt->enableCalibrationADC = 0x30; - - uopt->disableExternalClockGenerator = (uint8_t)(f.read() - '0'); // #19 - if (uopt->disableExternalClockGenerator > 1) - uopt->disableExternalClockGenerator = 0; + uopt->wantOutputComponent = f.read(); + // if (uopt->wantOutputComponent > 1) + // uopt->wantOutputComponent = 0; + + uopt->preferScalingRgbhv = f.read(); + // if (uopt->preferScalingRgbhv > 1) + // uopt->preferScalingRgbhv = 1; + + uopt->enableCalibrationADC = f.read(); // #17 + // if (uopt->enableCalibrationADC > 1) + // uopt->enableCalibrationADC = 1; + + uopt->disableExternalClockGenerator = f.read(); // #19 + // if (uopt->disableExternalClockGenerator > 1) + // uopt->disableExternalClockGenerator = 0; + + // @sk: the commented options were merged with/moved to slots + // uopt->enableFrameTimeLock = (uint8_t)(f.read() - '0'); + // if (uopt->enableFrameTimeLock > 1) + // uopt->enableFrameTimeLock = 0; + // uopt->frameTimeLockMethod = (uint8_t)(f.read() - '0'); + // if (uopt->frameTimeLockMethod > 1) + // uopt->frameTimeLockMethod = 0; + // uopt->enableAutoGain = (uint8_t)(f.read() - '0'); + // if (uopt->enableAutoGain > 1) + // uopt->enableAutoGain = 0; + // uopt->wantPeaking = (uint8_t)(f.read() - '0'); + // if (uopt->wantPeaking > 1) + // uopt->wantPeaking = 1; + // uopt->wantScanlines = (uint8_t)(f.read() - '0'); + // if (uopt->wantScanlines > 1) + // uopt->wantScanlines = 0; + // uopt->deintMode = (uint8_t)(f.read() - '0'); + // if (uopt->deintMode > 2) + // uopt->deintMode = 0; + // uopt->wantVdsLineFilter = (uint8_t)(f.read() - '0'); + // if (uopt->wantVdsLineFilter > 1) + // uopt->wantVdsLineFilter = 0; + // uopt->wantTap6 = (uint8_t)(f.read() - '0'); + // if (uopt->wantTap6 > 1) + // uopt->wantTap6 = 1; + // uopt->PalForce60 = (uint8_t)(f.read() - '0'); + // if (uopt->PalForce60 > 1) + // uopt->PalForce60 = 0; + // uopt->matchPresetSource = (uint8_t)(f.read() - '0'); // #14 + // if (uopt->matchPresetSource > 1) + // uopt->matchPresetSource = 1; + // uopt->wantStepResponse = (uint8_t)(f.read() - '0'); // #15 + // if (uopt->wantStepResponse > 1) + // uopt->wantStepResponse = 1; + // uopt->wantFullHeight = (uint8_t)(f.read() - '0'); // #16 + // if (uopt->wantFullHeight > 1) + // uopt->wantFullHeight = 1; + // uopt->scanlineStrength = (uint8_t)(f.read() - '0'); // #18 + // if (uopt->scanlineStrength > 0x60) + // uopt->enableCalibrationADC = 0x30; f.close(); } @@ -388,6 +398,8 @@ void setup() zeroAll(); setResetParameters(); prepareSyncProcessor(); + // preferencesv2.txt data loaded, load current slot + slotLoad(uopt->presetSlot); uint8_t productId = GBS::CHIP_ID_PRODUCT::read(); uint8_t revisionId = GBS::CHIP_ID_REVISION::read(); @@ -443,13 +455,10 @@ void loop() menuLoop(); wifiLoop(0); // WiFi + OTA + WS + MDNS, checks for server enabled + started - // Serial takes precedence handleSerialCommand(); - yield(); // handle user commands handleUserCommand(); - yield(); // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false @@ -486,7 +495,6 @@ void loop() } lastVsyncLock = millis(); } - if (rto->syncWatcherEnabled && rto->boardHasPower) { if ((millis() - lastTimeInterruptClear) > 3000) { GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD @@ -494,12 +502,10 @@ void loop() lastTimeInterruptClear = millis(); } } - // information mode if (rto->printInfos == true) { printInfo(); } - // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; // if (testbus >= 0x0FFD){ // _WSN(testbus,HEX); @@ -538,7 +544,6 @@ void loop() } } } - // init frame sync + besthtotal routine if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { if (rto->continousStableCounter >= 10 && rto->coastPositionIsSet && @@ -552,7 +557,6 @@ void loop() } } } - // update clamp + coast positions after preset change // do it quickly if ((rto->videoStandardInput <= 14 && rto->videoStandardInput != 0) && rto->syncWatcherEnabled && !rto->coastPositionIsSet) { @@ -569,7 +573,6 @@ void loop() } } } - // don't exclude modes 13 / 14 / 15 (rgbhv bypass) if ((rto->videoStandardInput != 0) && (rto->continousStableCounter >= 4) && !rto->clampPositionIsSet && rto->syncWatcherEnabled) { @@ -580,7 +583,6 @@ void loop() } } } - // later stage post preset adjustments if ((rto->applyPresetDoneStage == 1) && ((rto->continousStableCounter > 35 && rto->continousStableCounter < 45) || // this @@ -625,12 +627,10 @@ void loop() externalClockGenSyncInOutRate(); rto->applyPresetDoneStage = 0; // timeout } - if (rto->applyPresetDoneStage == 10) { rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutModeHdBypass(false); } - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { if (checkBoardPower()) { @@ -653,7 +653,6 @@ void loop() } } } - // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues if ((rto->noSyncCounter == 61 || rto->noSyncCounter == 62) && rto->boardHasPower) { @@ -667,7 +666,6 @@ void loop() rto->noSyncCounter = 63; // avoid checking twice } } - // power good now? // added syncWatcherEnabled check to enable passive mode // (passive mode = watching OFW without interrupting) if (!rto->boardHasPower && rto->syncWatcherEnabled) { // then check if power has come on @@ -692,7 +690,6 @@ void loop() } } } - #ifdef HAVE_PINGER_LIBRARY // periodic pings for debugging WiFi issues if (WiFi.status() == WL_CONNECTED) { @@ -714,4 +711,6 @@ void loop() if (rto->allowUpdatesOTA) { ArduinoOTA.handle(); } + // handle reset routine + resetInMSec(); } diff --git a/src/menu.cpp b/src/menu.cpp index 83a6903f..4f229ce5 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Wednesday, 29th May 2024 5:12:46 pm # +# Last Modified: Saturday, 1st June 2024 4:39:37 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -383,6 +383,7 @@ void settingsMenuOLED() if (oled_menuItem == 2) { if (oled_pointer_count == 0 && oled_selectOption == 2) { oled_subsetFrame = 3; + uopt->presetSlot = 0; // uopt->presetSlot = 'A'; // uopt->presetPreference = OutputCustomized; rto->resolutionID = OutputCustom; @@ -599,11 +600,9 @@ void settingsMenuOLED() display.drawString(0, 30, "Please Wait..."); display.display(); } - webSocket.close(); - delay(60); - ESP.reset(); - oled_selectOption = 0; - oled_subsetFrame = 0; + resetInMSec(1000); + // oled_selectOption = 0; + // oled_subsetFrame = 0; } if (oled_pointer_count == 1 && oled_selectOption == 2) { @@ -614,13 +613,14 @@ void settingsMenuOLED() display.drawString(0, 30, "Please Wait..."); display.display(); } - webSocket.close(); + // webSocket.close(); loadDefaultUserOptions(); saveUserPrefs(); - delay(60); - ESP.reset(); - oled_selectOption = 1; - oled_subsetFrame = 1; + // delay(60); + // ESP.reset(); + resetInMSec(1000); + // oled_selectOption = 1; + // oled_subsetFrame = 1; } if (oled_pointer_count == 3 && oled_selectOption == 2) { diff --git a/src/options.h b/src/options.h index 73450c3b..2d70d1d5 100644 --- a/src/options.h +++ b/src/options.h @@ -36,7 +36,7 @@ #define PIN_SWITCH 0 // D3 = GPIO0 pulled HIGH, else boot fail (middle push button for encoder) #define MENU_WIDTH 131 #define MENU_HEIGHT 19 -#define SLOTS_TOTAL 72 // max number of slots +#define SLOTS_TOTAL 50 // max number of slots (UI: GBSControl.maxSlots) #define OSD_TIMEOUT 8000 #define AUTO_GAIN_INIT 0x48 #define THIS_DEVICE_MASTER @@ -231,32 +231,34 @@ extern struct runTimeOptions *rto; extern struct userOptions *uopt; extern struct adcOptions *adco; -const char preset_ntsc[] PROGMEM = "/preset_ntsc."; -const char preset_pal[] PROGMEM = "/preset_pal."; -const char preset_ntsc_480p[] PROGMEM = "/preset_ntsc_480p."; -const char preset_pal_576p[] PROGMEM = "/preset_pal_576p."; -const char preset_ntsc_720p[] PROGMEM = "/preset_ntsc_720p."; -const char preset_ntsc_1080p[] PROGMEM = "/preset_ntsc_1080p."; -const char preset_medium_res[] PROGMEM = "/preset_medium_res."; -const char preset_vga_upscale[] PROGMEM = "/preset_vga_upscale."; -const char preset_unknown[] PROGMEM = "/preset_unknown."; +// const char preset_ntsc[] PROGMEM = "/preset_ntsc."; +// const char preset_pal[] PROGMEM = "/preset_pal."; +// const char preset_ntsc_480p[] PROGMEM = "/preset_ntsc_480p."; +// const char preset_pal_576p[] PROGMEM = "/preset_pal_576p."; +// const char preset_ntsc_720p[] PROGMEM = "/preset_ntsc_720p."; +// const char preset_ntsc_1080p[] PROGMEM = "/preset_ntsc_1080p."; +// const char preset_medium_res[] PROGMEM = "/preset_medium_res."; +// const char preset_vga_upscale[] PROGMEM = "/preset_vga_upscale."; +// const char preset_unknown[] PROGMEM = "/preset_unknown."; -const char * const preset_names[] PROGMEM = { - preset_unknown, - preset_ntsc, - preset_pal, - preset_ntsc_480p, - preset_pal_576p, - preset_ntsc_720p, - preset_ntsc_1080p, - preset_medium_res, - preset_vga_upscale, -}; +// const char * const preset_names[] PROGMEM = { +// preset_unknown, +// preset_ntsc, +// preset_pal, +// preset_ntsc_480p, +// preset_pal_576p, +// preset_ntsc_720p, +// preset_ntsc_1080p, +// preset_medium_res, +// preset_vga_upscale, +// }; const char preferencesFile[] PROGMEM = "/preferencesv2.txt"; const char systemInfo[] PROGMEM = "h:%4u v:%4u PLL:%01u A:%02x%02x%02x S:%02x.%02x.%02x %c%c%c%c I:%02x D:%04x m:%hu ht:%4d vt:%4d hpw:%4d u:%3x s:%2x S:%2d W:%2d\n"; const char commandDescr[] PROGMEM = "\n> %s command: %c (0x%02X) slotID: %d, resolutionID: %c (0x%02X)\n\n"; +extern void resetInMSec(unsigned long ms = 0); + #ifdef THIS_DEVICE_MASTER const char ap_ssid[] PROGMEM = "gbscontrol"; const char ap_password[] PROGMEM = "qqqqqqqq"; diff --git a/src/presets.cpp b/src/presets.cpp index e457f937..c8fc959d 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Thursday, 30th May 2024 12:42:51 pm # +# Last Modified: Saturday, 1st June 2024 12:49:39 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -1968,9 +1968,7 @@ void savePresetToFS() */ void saveUserPrefs() { - delay(10); savePresetToFS(); - delay(10); fs::File f = LittleFS.open(FPSTR(preferencesFile), "w"); if (!f) @@ -1983,24 +1981,25 @@ void saveUserPrefs() // !############################### // f.write(uopt->presetPreference + '0'); // #1 f.write(uopt->presetSlot); - f.write(uopt->enableFrameTimeLock + '0'); - f.write(uopt->frameTimeLockMethod + '0'); - f.write(uopt->enableAutoGain + '0'); - f.write(uopt->wantScanlines + '0'); f.write(uopt->wantOutputComponent + '0'); - f.write(uopt->deintMode + '0'); - f.write(uopt->wantVdsLineFilter + '0'); - f.write(uopt->wantPeaking + '0'); f.write(uopt->preferScalingRgbhv + '0'); - f.write(uopt->wantTap6 + '0'); - f.write(uopt->PalForce60 + '0'); - f.write(uopt->matchPresetSource + '0'); // #14 - f.write(uopt->wantStepResponse + '0'); // #15 - f.write(uopt->wantFullHeight + '0'); // #16 f.write(uopt->enableCalibrationADC + '0'); // #17 - f.write(uopt->scanlineStrength + '0'); // #18 f.write(uopt->disableExternalClockGenerator + '0'); // #19 + // f.write(uopt->enableFrameTimeLock + '0'); + // f.write(uopt->frameTimeLockMethod + '0'); + // f.write(uopt->enableAutoGain + '0'); + // f.write(uopt->wantScanlines + '0'); + // f.write(uopt->deintMode + '0'); + // f.write(uopt->wantVdsLineFilter + '0'); + // f.write(uopt->wantPeaking + '0'); + // f.write(uopt->wantTap6 + '0'); + // f.write(uopt->PalForce60 + '0'); + // f.write(uopt->matchPresetSource + '0'); // #14 + // f.write(uopt->wantStepResponse + '0'); // #15 + // f.write(uopt->wantFullHeight + '0'); // #16 + // f.write(uopt->scanlineStrength + '0'); // #18 + f.close(); } diff --git a/src/slot.cpp b/src/slot.cpp new file mode 100644 index 00000000..4fd34404 --- /dev/null +++ b/src/slot.cpp @@ -0,0 +1,233 @@ +/* +########################################################################### +# File: slot.cpp # +# File Created: Friday, 31st May 2024 8:41:15 am # +# Author: Sergey Ko # +# Last Modified: Saturday, 1st June 2024 12:18:10 pm # +# Modified By: Sergey Ko # +########################################################################### +# CHANGELOG: # +########################################################################### +*/ + +#include "slot.h" + +/** + * @brief Load slot data + * + * @param slotIndex + * @return true + * @return false + */ +bool slotLoad(const uint8_t & slotIndex) { + SlotMetaArray slotsObject; + uopt->presetSlot = slotIndex; + fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); + if (slotsBinaryFile) + { + slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFile.close(); + // update parameters + rto->resolutionID = slotsObject.slot[slotIndex].resolutionID; + uopt->wantScanlines = slotsObject.slot[slotIndex].scanlines; + uopt->scanlineStrength = slotsObject.slot[slotIndex].scanlinesStrength; + uopt->wantVdsLineFilter = slotsObject.slot[slotIndex].wantVdsLineFilter; + uopt->wantStepResponse = slotsObject.slot[slotIndex].wantStepResponse; + uopt->wantPeaking = slotsObject.slot[slotIndex].wantPeaking; + uopt->enableAutoGain = slotsObject.slot[slotIndex].enableAutoGain; + uopt->enableFrameTimeLock = slotsObject.slot[slotIndex].enableFrameTimeLock; + uopt->frameTimeLockMethod = slotsObject.slot[slotIndex].frameTimeLockMethod; + uopt->deintMode = slotsObject.slot[slotIndex].deintMode; + uopt->wantTap6 = slotsObject.slot[slotIndex].wantTap6; + uopt->wantFullHeight = slotsObject.slot[slotIndex].wantFullHeight; + uopt->matchPresetSource = slotsObject.slot[slotIndex].matchPresetSource; + uopt->PalForce60 = slotsObject.slot[slotIndex].PalForce60; + return true; + } + return false; +} + +/** + * @brief update slot[slotIndex] data. If no need to update slotName, + * it can be equal an empty string. + * + * @param slotsObject + * @param slotIndex + * @param slotName + */ +void slotUpdate(SlotMetaArray & slotsObject, const uint8_t & slotIndex, String * slotName) { + if(slotName != nullptr) { + const char space = 0x20; + uint8_t k = slotName->length(); + uint8_t nameMaxLen = sizeof(slotsObject.slot[slotIndex].name); + strcpy(slotsObject.slot[slotIndex].name, slotName->c_str()); + while(k < nameMaxLen - 1) { + slotsObject.slot[slotIndex].name[k] = space; + k ++; + } + } + slotsObject.slot[slotIndex].resolutionID = rto->resolutionID; + slotsObject.slot[slotIndex].scanlines = uopt->wantScanlines; + slotsObject.slot[slotIndex].scanlinesStrength = uopt->scanlineStrength; + slotsObject.slot[slotIndex].wantVdsLineFilter = uopt->wantVdsLineFilter; + slotsObject.slot[slotIndex].wantStepResponse = uopt->wantStepResponse; + slotsObject.slot[slotIndex].wantPeaking = uopt->wantPeaking; + slotsObject.slot[slotIndex].enableAutoGain = uopt->enableAutoGain; + slotsObject.slot[slotIndex].enableFrameTimeLock = uopt->enableFrameTimeLock; + slotsObject.slot[slotIndex].frameTimeLockMethod = uopt->frameTimeLockMethod; + slotsObject.slot[slotIndex].deintMode = uopt->deintMode; + slotsObject.slot[slotIndex].wantTap6 = uopt->wantTap6; + slotsObject.slot[slotIndex].wantFullHeight = uopt->wantFullHeight; + slotsObject.slot[slotIndex].matchPresetSource = uopt->matchPresetSource; + slotsObject.slot[slotIndex].PalForce60 = uopt->PalForce60; +} + +/** + * @brief Read slot data into slotsObject + * + * @param slotsObject + * @returns 1 = file exists and data has been read + * @returns 0 = file has been created, slotsObject contains defaults + * @returns -1 = slots.bin is not accessible + */ +int8_t slotGetData(SlotMetaArray & slotsObject) { + uint8_t i = 0; + fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); + + if (slotsBinaryFile) + { + // read data into slotsObject + slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFile.close(); + return 1; + } + + _DBGN(F("(?) /slots.bin not found")); + String slot_name = String(emptySlotName); + while (i < SLOTS_TOTAL) + { + slotsObject.slot[i].scanlines = 0; + slotsObject.slot[i].resolutionID = Output240p; + slotsObject.slot[i].scanlinesStrength = 0; + slotsObject.slot[i].wantVdsLineFilter = false; + slotsObject.slot[i].wantStepResponse = true; + slotsObject.slot[i].wantPeaking = true; + slotsObject.slot[i].enableAutoGain = false; + slotsObject.slot[i].enableFrameTimeLock = false; + slotsObject.slot[i].frameTimeLockMethod = false; + slotsObject.slot[i].deintMode = false; + slotsObject.slot[i].wantTap6 = false; + slotsObject.slot[i].wantFullHeight = false; + slotsObject.slot[i].matchPresetSource = false; + slotsObject.slot[i].PalForce60 = false; + strncpy(slotsObject.slot[i].name, + slot_name.c_str(), + sizeof(slotsObject.slot[i].name) + ); + i++; + delay(1); + } + // file doesn't exist, let's create one + _DBG(F("attempt to write to slots.bin...")); + slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); + if(slotsBinaryFile) { + slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFile.close(); + _DBGN(F("ok")); + return 0; + } + _DBGN(F("fail")); + + return -1; +} + +/** + * @brief Save slot data into slots.bin + * + * @return true if data has been saved + * @return false if file is not accessible + */ +bool slotSetData(SlotMetaArray & slotsObject) { + fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); + if(slotsBinaryFile) { + slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); + slotsBinaryFile.close(); + return true; + } + return false; +} + +/** + * @brief Updates slots.bin with new parameters of current slot + * + * @return true + * @return false + */ +bool slotFlush() { + SlotMetaArray slotObject; + // retrieve data + if(slotGetData(slotObject) == -1) + return false; + // update current slot + slotUpdate(slotObject, uopt->presetSlot); + // write back the data + if(!slotSetData(slotObject)) + return false; + + _DBGF(PSTR("slot %d updated\n"), uopt->presetSlot); + return true; +} + +/** + * @brief Set dafault values in slot[slotIndex] + * + * @param slotsObject + * @param slotIndex + */ +void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex) { + // here could be memcpy of a new object... + String slot_name = String(emptySlotName); + slotsObject.slot[slotIndex].resolutionID = Output240p; + slotsObject.slot[slotIndex].scanlines = 0; + slotsObject.slot[slotIndex].scanlinesStrength = 0x30; + slotsObject.slot[slotIndex].wantVdsLineFilter = 0; + slotsObject.slot[slotIndex].wantStepResponse = 1; + slotsObject.slot[slotIndex].wantPeaking = 1; + slotsObject.slot[slotIndex].enableAutoGain = 0; + slotsObject.slot[slotIndex].enableFrameTimeLock = 0; + slotsObject.slot[slotIndex].frameTimeLockMethod = 0; + slotsObject.slot[slotIndex].deintMode = 0; + slotsObject.slot[slotIndex].wantTap6 = 0; + slotsObject.slot[slotIndex].wantFullHeight = 0; + slotsObject.slot[slotIndex].matchPresetSource = 0; + slotsObject.slot[slotIndex].PalForce60 = 0; + strncpy( + slotsObject.slot[slotIndex].name, + slot_name.c_str(), + sizeof(slotsObject.slot[slotIndex].name) + ); + // if that was current slot, also reset the runtime paramters + // TODO: see loadDefaultUserOptions() + if(slotIndex == uopt->presetSlot) { + // uopt->presetPreference = Output960P; + rto->resolutionID = Output240p; + uopt->wantScanlines = 0; + uopt->scanlineStrength = 0x30; + uopt->wantVdsLineFilter = 0; + uopt->wantStepResponse = 1; + uopt->wantPeaking = 1; + uopt->enableAutoGain = 0; + uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! + uopt->frameTimeLockMethod = 0; // compatibility with more displays + uopt->deintMode = 0; + uopt->wantTap6 = 1; + uopt->wantFullHeight = 1; + uopt->matchPresetSource = 1; + uopt->PalForce60 = 0; + + // uopt->wantOutputComponent = 0; + // uopt->preferScalingRgbhv = 1; + // uopt->enableCalibrationADC = 1; + // uopt->disableExternalClockGenerator = 0; + } +} diff --git a/src/slot.h b/src/slot.h index 93015a24..86e01397 100644 --- a/src/slot.h +++ b/src/slot.h @@ -1,6 +1,10 @@ #ifndef _SLOT_H_ #define _SLOT_H_ +#include +#include "options.h" +#include "wserial.h" + // SLOTS const char slotsFile[] PROGMEM = "/slots.bin"; // the file where to store slots metadata const char emptySlotName[] PROGMEM = "Empty "; @@ -8,19 +12,33 @@ const char emptySlotName[] PROGMEM = "Empty "; typedef struct { char name[25]; - // uint8_t presetNameID; uint8_t slot; - char resolutionID; + OutputResolution resolutionID; uint8_t scanlines; uint8_t scanlinesStrength; uint8_t wantVdsLineFilter; uint8_t wantStepResponse; uint8_t wantPeaking; + uint8_t enableAutoGain; + uint8_t enableFrameTimeLock; + uint8_t frameTimeLockMethod; + uint8_t deintMode; + uint8_t wantTap6; + uint8_t wantFullHeight; + uint8_t matchPresetSource; + uint8_t PalForce60; } SlotMeta; typedef struct { - SlotMeta slot[SLOTS_TOTAL]; // the max avaliable slots that can be encoded in a the charset[A-Za-z0-9-._~()!*:,;] + SlotMeta slot[SLOTS_TOTAL]; } SlotMetaArray; +bool slotLoad(const uint8_t & slotIndex); +void slotUpdate(SlotMetaArray & slotsObject, const uint8_t & slotIndex, String * slotName = nullptr); +int8_t slotGetData(SlotMetaArray & slotsObject); +bool slotSetData(SlotMetaArray & slotsObject); +bool slotFlush(); +void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex); + #endif // _SLOT_H_ \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp index 69d431a3..72fe97e4 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,7 +3,7 @@ # File: utils.cpp # # File Created: Thursday, 2nd May 2024 5:37:47 pm # # Author: # -# Last Modified: Saturday, 18th May 2024 10:05:44 pm # +# Last Modified: Friday, 31st May 2024 11:09:56 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # diff --git a/src/utils.h b/src/utils.h index d51e57ec..1a405bcc 100644 --- a/src/utils.h +++ b/src/utils.h @@ -3,7 +3,7 @@ # File: utils.h # # File Created: Thursday, 2nd May 2024 5:38:14 pm # # Author: # -# Last Modified: Sunday, 5th May 2024 5:35:43 pm # +# Last Modified: Friday, 31st May 2024 11:09:56 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # diff --git a/src/wifiman.cpp b/src/wifiman.cpp index cb659230..28ded5f7 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Thursday, 30th May 2024 12:54:36 pm # +# Last Modified: Saturday, 1st June 2024 5:11:36 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -96,125 +96,67 @@ void updateWebSocketData() if (rto->webServerEnabled && rto->webServerStarted) { if (webSocket.connectedClients() > 0) { constexpr size_t MESSAGE_LEN = 8; - char toSend[MESSAGE_LEN] = ""; - toSend[0] = '#'; // makeshift ping in slot 0 - // slotID is INTEGER + uint8_t toSend[MESSAGE_LEN]; + memset(toSend, 0, MESSAGE_LEN); + // special character # used for message filtering in WebUI + toSend[0] = '#'; toSend[1] = uopt->presetSlot + '0'; - // TODO: resolutionID must be INTEGER too - toSend[2] = static_cast(rto->resolutionID); - // @sk: left here for reference - // switch (rto->presetID) { - // case 0x11: // Output960p - // toSend[1] = '1'; - // break; - // case 0x12: // Output1024p - // toSend[1] = '2'; - // break; - // case 0x13: // Output720p - // toSend[1] = '3'; - // break; - // case 0x14: // Output480p - // toSend[1] = '4'; - // break; - // case 0x15: // Output1080p - // toSend[1] = '5'; - // break; - // case 0x16: // Output15kHz - // toSend[1] = '6'; - // break; - // case OutputBypass: // bypass 0 - // toSend[1] = '8'; - // break; - // case PresetHdBypass: // bypass 1 - // toSend[1] = '9'; - // break; - // case PresetBypassRGBHV: // bypass 2 - // toSend[1] = 'A'; - // break; - // case OutputCustom: - // toSend[1] = 'C'; - // break; - // default: - // toSend[1] = '0'; - // break; - // } - - // '@' = 0x40, used for "byte is present" detection; 0x80 not in ascii table - toSend[3] = '@'; - toSend[4] = '@'; - toSend[5] = '@'; - toSend[6] = '0'; - toSend[7] = '0'; - - if (uopt->enableAutoGain) { + // TODO: resolutionID must be INTEGER too? + toSend[2] = (char)rto->resolutionID; + // + if (uopt->wantScanlines) toSend[3] |= (1 << 0); - } - if (uopt->wantScanlines) { + if (uopt->wantVdsLineFilter) toSend[3] |= (1 << 1); - } - if (uopt->wantVdsLineFilter) { + if (uopt->wantStepResponse) toSend[3] |= (1 << 2); - } - if (uopt->wantPeaking) { + if (uopt->wantPeaking) toSend[3] |= (1 << 3); - } - if (uopt->PalForce60) { + if (uopt->enableAutoGain) toSend[3] |= (1 << 4); - } - if (uopt->wantOutputComponent) { + if (uopt->enableFrameTimeLock) toSend[3] |= (1 << 5); - } - if (uopt->matchPresetSource) { + // + if (uopt->deintMode == 0) // motion adaptive if == 0 toSend[4] |= (1 << 0); - } - if (uopt->enableFrameTimeLock) { + if (uopt->deintMode == 1) // bob if == 1 toSend[4] |= (1 << 1); - } - if (uopt->deintMode) { + // if (uopt->wantTap6) { + // toSend[4] |= (1 << 1); + // } + if (uopt->wantFullHeight) toSend[4] |= (1 << 2); - } - if (uopt->wantTap6) { + if (uopt->matchPresetSource) toSend[4] |= (1 << 3); - } - if (uopt->wantStepResponse) { + if (uopt->PalForce60 == 1) toSend[4] |= (1 << 4); - } - if (uopt->wantFullHeight) { - toSend[4] |= (1 << 5); - } - if (uopt->enableCalibrationADC) { + // system preferences + if (uopt->wantOutputComponent) toSend[5] |= (1 << 0); - } - if (uopt->preferScalingRgbhv) { + if (uopt->enableCalibrationADC) toSend[5] |= (1 << 1); - } - if (uopt->disableExternalClockGenerator) { + if (uopt->preferScalingRgbhv) toSend[5] |= (1 << 2); - } + if (uopt->disableExternalClockGenerator) + toSend[5] |= (1 << 3); // developer panel controls status - /// print info button - if(rto->printInfos) { + if(rto->printInfos) toSend[6] |= (1 << 0); - } - if(rto->invertSync) { + if(rto->invertSync) toSend[6] |= (1 << 1); - } - if(rto->osr != 0) { + if(rto->osr != 0) toSend[6] |= (1 << 2); - } - if(GBS::ADC_FLTR::read() != 0) { + if(GBS::ADC_FLTR::read() != 0) toSend[6] |= (1 << 3); - } // system tab controls - if(rto->allowUpdatesOTA) { + if(rto->allowUpdatesOTA) toSend[7] |= (1 << 0); - } - webSocket.broadcastTXT(toSend, MESSAGE_LEN); + webSocket.broadcastBIN(toSend, MESSAGE_LEN); } } } diff --git a/src/wserver.cpp b/src/wserver.cpp index c7e85efe..8fecc3ee 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Thursday, 30th May 2024 12:59:27 pm # +# Last Modified: Saturday, 1st June 2024 1:46:59 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -50,7 +50,7 @@ void serverInit() // server.on(F("/data/dir"), HTTP_GET, serverFsDir); // server.on(F("/data/format"), HTTP_GET, serverFsFormat); server.on(F("/wifi/status"), HTTP_GET, serverWiFiStatus); - server.on(F("/gbs/restore-filters"), HTTP_GET, serverRestoreFilters); + // server.on(F("/gbs/restore-filters"), HTTP_GET, serverRestoreFilters); // WiFi API server.on(F("/wifi/list"), HTTP_POST, serverWiFiList); server.on("/wifi/wps", HTTP_POST, serverWiFiWPS); @@ -104,7 +104,7 @@ void serverSC() // _DBG(F("[w] serial command received: ")); // _DBGF("%c\n", serialCommand); } - server.send(200, mimeAppJson, F("{}")); + server.send(200, mimeAppJson, F("[]")); } /** @@ -121,59 +121,35 @@ void serverUC() // _DBG(F("[w] user command received: ")); // _DBGF("%c\n", userCommand); } - server.send(200, mimeAppJson, F("{}")); + server.send(200, mimeAppJson, F("[]")); } /** * @brief Sends the slots data to WebUI * - * */ void serverSlots() { ASSERT_LOMEM_RETURN(); - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - - if (!slotsBinaryFile) + SlotMetaArray slotsObject; + fs::File slotsBinaryFile; + if(slotGetData(slotsObject) == -1) { - _DBGN(F("/slots.bin not found, attempting to create")); - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); - if (slotsBinaryFile) - { - SlotMetaArray slotsObject; - String slot_name = String(emptySlotName); - for (int i = 0; i < SLOTS_TOTAL; i++) - { - // slotsObject.slot[i].slot = i; - // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].resolutionID = Output240p; - slotsObject.slot[i].scanlines = 0; - slotsObject.slot[i].scanlinesStrength = 0; - slotsObject.slot[i].wantVdsLineFilter = false; - slotsObject.slot[i].wantStepResponse = true; - slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, slot_name.c_str(), sizeof(slotsObject.slot[i].name)); - } - slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); - } - else - { - _DBGN(F("unable to create /slots.bin")); - goto stream_slots_bin_failed; - } + _DBGN(F("unable to create /slots.bin")); + goto stream_slots_bin_failed; } - + slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); server.streamFile(slotsBinaryFile, mimeOctetStream); slotsBinaryFile.close(); return; stream_slots_bin_failed: - server.send(500, mimeAppJson, F("false")); + server.send(500, mimeAppJson, F("[\"fail\"]")); } /** * @brief This function does: - * 1. Update current slot name and save it into user preferences - * 2. Load new preset + * 1. Update current slot in user preferences + * 2. Load new slot * */ void serverSlotSet() @@ -182,28 +158,12 @@ void serverSlotSet() if (server.args() > 0) { - SlotMetaArray slotsObject; // const String slotParamValue = server.arg(String(F("index"))).toInt(); uint8_t slotIndex = lowByte(server.arg(String(F("index"))).toInt()); // char slotValue[2]; // slotParamValue.toCharArray(slotValue, sizeof(slotValue)); // uopt->presetSlot = static_cast(slotParamValue.charAt(0)); - uopt->presetSlot = slotIndex; - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - if (slotsBinaryFile) - { - slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); - // update parameters - rto->resolutionID = static_cast(slotsObject.slot[slotIndex].resolutionID); - uopt->wantScanlines = slotsObject.slot[slotIndex].scanlines; - uopt->scanlineStrength = slotsObject.slot[slotIndex].scanlinesStrength; - uopt->wantVdsLineFilter = slotsObject.slot[slotIndex].wantVdsLineFilter; - uopt->wantStepResponse = slotsObject.slot[slotIndex].wantStepResponse; - uopt->wantPeaking = slotsObject.slot[slotIndex].wantPeaking; - } - else - { + if(!slotLoad(slotIndex)) { _DBGN(F("unable to read /slots.bin")); goto server_slot_set_failure; } @@ -211,70 +171,36 @@ void serverSlotSet() // rto->presetID = OutputCustom; // saveUserPrefs(); // user prefs being saved in userCommand handler _WSF(PSTR("slot change success: %d\n"), uopt->presetSlot); - server.send(200, mimeAppJson, F("true")); + server.send(200, mimeAppJson, F("[\"ok\"]")); // begin loading new preset on the next loop userCommand = '3'; return; } server_slot_set_failure: - server.send(500, mimeAppJson, F("false")); + server.send(500, mimeAppJson, F("[\"fail\"]")); } /** - * @brief Save server slot name + * @brief Create new server slot * */ void serverSlotSave() { bool result = false; - uint8_t i = 0; ASSERT_LOMEM_GOTO(server_slot_save_end); - // TODO: too many open-closes... if (server.args() > 0) { // slot name String slotName = server.arg(String(F("name"))); uint8_t slotIndex = server.arg(String(F("index"))).toInt(); SlotMetaArray slotsObject; - uint8_t k = slotName.length(); - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - - if (slotsBinaryFile) - { - // read data into slotsObject - slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); - } - else - { - String slot_name = String(emptySlotName); - while (i < SLOTS_TOTAL) - { - // slotsObject.slot[i].slot = i; - // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].scanlines = 0; - slotsObject.slot[i].resolutionID = Output240p; - slotsObject.slot[i].scanlinesStrength = 0; - slotsObject.slot[i].wantVdsLineFilter = false; - slotsObject.slot[i].wantStepResponse = true; - slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, - slot_name.c_str(), - sizeof(slotsObject.slot[i].name) - ); - i++; - delay(1); - } - // file doesn't exist, let's create one - slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); - slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); + if(slotGetData(slotsObject) == -1) { + _DBGN(F("unable to access slots.bin")); + goto server_slot_save_end; } - // updating the SlotMetaObject with data received // uint8_t slotIndex = lowByte(slotIndexString.toInt()); uint8_t nameMaxLen = sizeof(slotsObject.slot[slotIndex].name); - const char space = 0x20; if (slotIndex >= SLOTS_TOTAL) { _WSF(PSTR("too much slots, max allowed: %d\n"), (uint8_t)SLOTS_TOTAL); @@ -285,31 +211,16 @@ void serverSlotSave() _WSF(PSTR("slot name is too long, max allowed: %d\n"), nameMaxLen); goto server_slot_save_end; } - // slotsObject.slot[slotIndex].slot = slotIndex; - // slotsObject.slot[slotIndex].presetNameID = 0; - // slotName.toCharArray(slotsObject.slot[slotIndex].name, sizeof(slotsObject.slot[slotIndex].name)); - strcpy(slotsObject.slot[slotIndex].name, slotName.c_str()); - while(k < nameMaxLen - 1) { - slotsObject.slot[slotIndex].name[k] = space; - k ++; - } - delay(10); - slotsObject.slot[slotIndex].resolutionID = rto->resolutionID; - slotsObject.slot[slotIndex].scanlines = uopt->wantScanlines; - slotsObject.slot[slotIndex].scanlinesStrength = uopt->scanlineStrength; - slotsObject.slot[slotIndex].wantVdsLineFilter = uopt->wantVdsLineFilter; - slotsObject.slot[slotIndex].wantStepResponse = uopt->wantStepResponse; - slotsObject.slot[slotIndex].wantPeaking = uopt->wantPeaking; + slotUpdate(slotsObject, slotIndex, &slotName); - slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); - slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); + if(!slotSetData(slotsObject)) + _DBGN(F("failed to write to slots.bin")); result = true; } server_slot_save_end: - server.send(200, mimeAppJson, result ? F("true") : F("false")); + server.send(200, mimeAppJson, result ? F("[\"ok\"]") : F("[\"fail\"]")); } /** @@ -319,7 +230,6 @@ void serverSlotSave() void serverSlotRemove() { bool result = false; - uint8_t i = 0; int16_t slotIndex = server.arg(String(F("index"))).toInt(); SlotMetaArray slotsObject; if (server.args() > 0 && slotIndex >= 0) @@ -334,16 +244,10 @@ void serverSlotRemove() // preset file extension sprintf(buffer, PSTR(".%d"), slotIndex); - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - - if (!slotsBinaryFile) { - _DBGN(F("failed to read slots.bin")); + if(slotGetData(slotsObject) == -1) { + _DBGN(F("unable to access to slots.bin")); goto server_slot_remove_end; } - - slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); - _DBGF( PSTR("removing slot: %s and related presets...\n"), slotsObject.slot[slotIndex].name @@ -358,65 +262,14 @@ void serverSlotRemove() LittleFS.remove(fn); delay(10); } - // lets reset the slot data in binary file - while (i < SLOTS_TOTAL) - { - if (i == slotIndex) - { - String slot_name = String(emptySlotName); - // slotsObject.slot[i].slot = i; - // slotsObject.slot[i].presetNameID = 0; - slotsObject.slot[i].resolutionID = Output240p; - slotsObject.slot[i].scanlines = 0; - slotsObject.slot[i].scanlinesStrength = 0; - slotsObject.slot[i].wantVdsLineFilter = false; - slotsObject.slot[i].wantStepResponse = true; - slotsObject.slot[i].wantPeaking = true; - strncpy(slotsObject.slot[i].name, - slot_name.c_str(), - sizeof(slotsObject.slot[i].name) - ); - break; - } - i++; - delay(1); - } + // reset the slot data in binary file + slotResetDefaults(slotsObject, slotIndex); - // uint8_t loopCount = 0; - // uint8_t flag = 1; - // String sInd = String(slotIndexMap); - // while (flag != 0) { - // currentSlot = sInd[currentSlot + loopCount]; - // nextSlot = sInd[currentSlot + loopCount + 1]; - // flag = 0; - // flag += LittleFS.rename("/preset_ntsc." + String((char)(nextSlot)), "/preset_ntsc." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_pal." + String((char)(nextSlot)), "/preset_pal." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_ntsc_480p." + String((char)(nextSlot)), "/preset_ntsc_480p." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_pal_576p." + String((char)(nextSlot)), "/preset_pal_576p." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_ntsc_720p." + String((char)(nextSlot)), "/preset_ntsc_720p." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_ntsc_1080p." + String((char)(nextSlot)), "/preset_ntsc_1080p." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_medium_res." + String((char)(nextSlot)), "/preset_medium_res." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_vga_upscale." + String((char)(nextSlot)), "/preset_vga_upscale." + String((char)currentSlot)); - // flag += LittleFS.rename("/preset_unknown." + String((char)(nextSlot)), "/preset_unknown." + String((char)currentSlot)); - - // slotsObject.slot[currentSlot + loopCount].slot = slotsObject.slot[currentSlot + loopCount + 1].slot; - // slotsObject.slot[currentSlot + loopCount].presetID = slotsObject.slot[currentSlot + loopCount + 1].presetID; - // slotsObject.slot[currentSlot + loopCount].scanlines = slotsObject.slot[currentSlot + loopCount + 1].scanlines; - // slotsObject.slot[currentSlot + loopCount].scanlinesStrength = slotsObject.slot[currentSlot + loopCount + 1].scanlinesStrength; - // slotsObject.slot[currentSlot + loopCount].wantVdsLineFilter = slotsObject.slot[currentSlot + loopCount + 1].wantVdsLineFilter; - // slotsObject.slot[currentSlot + loopCount].wantStepResponse = slotsObject.slot[currentSlot + loopCount + 1].wantStepResponse; - // slotsObject.slot[currentSlot + loopCount].wantPeaking = slotsObject.slot[currentSlot + loopCount + 1].wantPeaking; - // // slotsObject.slot[currentSlot + loopCount].name = slotsObject.slot[currentSlot + loopCount + 1].name; - // strncpy(slotsObject.slot[currentSlot + loopCount].name, slotsObject.slot[currentSlot + loopCount + 1].name, 25); - // loopCount++; - // } - - slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "w"); - slotsBinaryFile.write((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); - result = true; + if(!slotSetData(slotsObject)) + _DBGN(F("failed to write to slots.bin")); + else + result = true; } - delay(10); // reset parameters setResetParameters(); _DBGN(F("slot has been removed, parameters now reset to defaults")); @@ -424,7 +277,7 @@ void serverSlotRemove() rto->resolutionID = Output240p; server_slot_remove_end: - server.send(200, mimeAppJson, result ? F("true") : F("false")); + server.send(200, mimeAppJson, result ? F("[\"ok\"]") : F("[\"fail\"]")); } /** @@ -433,7 +286,7 @@ void serverSlotRemove() */ void serverFsUploadResponder() { - server.send(200, mimeAppJson, "true"); + server.send(200, mimeAppJson, F("[\"ok\"]")); } /** @@ -478,6 +331,7 @@ void serverFsUploadHandler() err = false; LittleFS.remove(FPSTR(backupFile)); _DBGN(F(" aborted")); + delay(10); goto upload_file_close; } return; @@ -538,7 +392,7 @@ void serverBackupDownload() _DBGF(PSTR("slot: %s\n"), slotsObject.slot[i].name); _b.println(i); _b.println(slotsObject.slot[i].name); - _b.println(slotsObject.slot[i].resolutionID); + _b.println(static_cast(slotsObject.slot[i].resolutionID)); _b.println(slotsObject.slot[i].scanlines); _b.println(slotsObject.slot[i].scanlinesStrength); _b.println(slotsObject.slot[i].wantVdsLineFilter); @@ -631,7 +485,7 @@ void extractBackup() { // mind data order! k = data.toInt(); strcpy(slotsObject.slot[k].name, _b.readString().c_str()); - slotsObject.slot[k].resolutionID = _b.readString().charAt(0); + slotsObject.slot[k].resolutionID = static_cast(_b.readString().charAt(0)); slotsObject.slot[k].scanlines = _b.readString().toInt(); slotsObject.slot[k].scanlinesStrength = _b.readString().toInt(); slotsObject.slot[k].wantVdsLineFilter = _b.readString().toInt(); @@ -651,6 +505,7 @@ void extractBackup() { _b.close(); // cleanup LittleFS.remove(FPSTR(backupFile)); + delay(10); _DBGN(F("restore success, restarting...")); } @@ -683,7 +538,7 @@ void extractBackup() { // return; // server_fs_dir_failure: -// server.send_P(200, mimeAppJson, PSTR("false")); +// server.send_P(200, mimeAppJson, PSTR("[\"fail\"]")); // } /** @@ -694,7 +549,7 @@ void extractBackup() { */ // void serverFsFormat() // { -// server.send(200, mimeAppJson, LittleFS.format() ? F("true") : F("false")); +// server.send(200, mimeAppJson, LittleFS.format() ? F("[\"ok\"]") : F("[\"fail\"]")); // } /** @@ -714,45 +569,36 @@ void serverWiFiStatus() * @brief * */ -void serverRestoreFilters() -{ - SlotMetaArray slotsObject; - fs::File slotsBinaryFile = LittleFS.open(FPSTR(slotsFile), "r"); - bool result = false; - if (slotsBinaryFile) - { - slotsBinaryFile.read((byte *)&slotsObject, sizeof(slotsObject)); - slotsBinaryFile.close(); - // auto currentSlot = String(slotIndexMap).indexOf(uopt->presetSlot); - // if (currentSlot == -1) - // { - // goto server_restore_filters_end; - // } - - uopt->wantScanlines = slotsObject.slot[uopt->presetSlot].scanlines; - - _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[uopt->presetSlot].name, uopt->presetSlot); - if (uopt->wantScanlines) - { - _WSN(F("on (Line Filter recommended)")); - } - else - { - disableScanlines(); - _WSN(F("off")); - } - saveUserPrefs(); +// void serverRestoreFilters() +// { +// SlotMetaArray slotsObject; +// bool result = false; +// if (slotGetData(slotsObject)) +// { +// uopt->wantScanlines = slotsObject.slot[uopt->presetSlot].scanlines; - uopt->scanlineStrength = slotsObject.slot[uopt->presetSlot].scanlinesStrength; - uopt->wantVdsLineFilter = slotsObject.slot[uopt->presetSlot].wantVdsLineFilter; - uopt->wantStepResponse = slotsObject.slot[uopt->presetSlot].wantStepResponse; - uopt->wantPeaking = slotsObject.slot[uopt->presetSlot].wantPeaking; - result = true; - } +// _WSF(PSTR("slot: %s (ID %d) scanlines: "), slotsObject.slot[uopt->presetSlot].name, uopt->presetSlot); +// if (uopt->wantScanlines) +// { +// _WSN(F("on (Line Filter recommended)")); +// } +// else +// { +// disableScanlines(); +// _WSN(F("off")); +// } +// saveUserPrefs(); -// server_restore_filters_end: - server.send(200, mimeAppJson, result ? F("true") : F("false")); -} +// uopt->scanlineStrength = slotsObject.slot[uopt->presetSlot].scanlinesStrength; +// uopt->wantVdsLineFilter = slotsObject.slot[uopt->presetSlot].wantVdsLineFilter; +// uopt->wantStepResponse = slotsObject.slot[uopt->presetSlot].wantStepResponse; +// uopt->wantPeaking = slotsObject.slot[uopt->presetSlot].wantPeaking; +// result = true; +// } + +// // server_restore_filters_end: +// server.send(200, mimeAppJson, result ? F("[\"ok\"]") : F("[\"fail\"]")); +// } /** * @brief @@ -808,7 +654,7 @@ void serverWiFiList() server.chunkedResponseFinalize(); } else - server.send(200, mimeTextHtml, F("{}")); + server.send(200, mimeTextHtml, F("[]")); } /** @@ -847,13 +693,11 @@ void serverWiFiConnect() if (ssid.length() > 0) { wifiStartStaMode(ssid, pwd); - server.send(200, mimeAppJson, F("{}")); + server.send(200, mimeAppJson, F("[]")); } else - server.send(406, mimeAppJson, F("{}")); + server.send(406, mimeAppJson, F("[]")); - // delay(100); - // ESP.reset(); - userCommand = 'a'; // restart device at the next loop() + resetInMSec(1000); } /** @@ -935,7 +779,7 @@ void printInfo() } yield(); - + if (GBS::STATUS_SYNC_PROC_HSACT::read()) { // else source might not be active for (uint8_t i = 0; i < 9; i++) @@ -1535,12 +1379,11 @@ void handleSerialCommand() _WSN(F("on")); } break; - case 'L': + case 'L': // force outut component { // Component / VGA Output uopt->wantOutputComponent = !uopt->wantOutputComponent; OutputComponentOrVGA(); - saveUserPrefs(); // apply 1280x720 preset now, otherwise a reboot would be required uint8_t videoMode = getVideoMode(); if (videoMode == 0) @@ -1555,6 +1398,7 @@ void handleSerialCommand() // rto->presetID = backup; rto->resolutionID = backup; // uopt->presetPreference = backup; + saveUserPrefs(); } break; case 'l': @@ -1567,7 +1411,8 @@ void handleSerialCommand() case 'Z': { uopt->matchPresetSource = !uopt->matchPresetSource; - saveUserPrefs(); + // saveUserPrefs(); + slotFlush(); uint8_t vidMode = getVideoMode(); // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { if (rto->resolutionID == Output240p && GBS::GBS_PRESET_ID::read() == Output960p50) @@ -1686,7 +1531,7 @@ void handleSerialCommand() else GBS::IF_HB_ST2::write(0); _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); } break; case '8': // invert sync button (dev. mode) @@ -2173,25 +2018,21 @@ void handleUserCommand() { case '0': _WS(F("pal force 60hz ")); - if (uopt->PalForce60 == 0) - { - uopt->PalForce60 = 1; + uopt->PalForce60 = !uopt->PalForce60; + if (uopt->PalForce60 == 1) _WSN(F("on")); - } else - { - uopt->PalForce60 = 0; _WSN(F("off")); - } - saveUserPrefs(); + // saveUserPrefs(); + slotFlush(); break; case '1': // reset to defaults button - webSocket.close(); loadDefaultUserOptions(); saveUserPrefs(); _WSN(F("options set to defaults, restarting")); - delay(100); - ESP.reset(); // don't use restart(), messes up websocket reconnects + // delay(100); + // ESP.reset(); // don't use restart(), messes up websocket reconnects + resetInMSec(1000); // break; case '2': @@ -2222,7 +2063,7 @@ void handleUserCommand() case '5': // Frame Time Lock toggle uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; - saveUserPrefs(); + // saveUserPrefs(); if (uopt->enableFrameTimeLock) { _WSN(F("FTL on")); @@ -2239,6 +2080,7 @@ void handleUserCommand() { activeFrameTimeLockInitialSteps(); } + slotFlush(); break; case '6': // @@ -2257,15 +2099,12 @@ void handleUserCommand() } saveUserPrefs(); break; - case '9': + // case '9': // - break; - case 'a': - webSocket.close(); - _WSN(F("restart")); - delay(100); - ESP.reset(); // don't use restart(), messes up websocket reconnects - break; + // break; + // case 'a': + // + // break; case 'e': // print files on data { fs::Dir dir = LittleFS.openDir("/"); @@ -2378,6 +2217,7 @@ void handleUserCommand() { FrameSync::reset(uopt->frameTimeLockMethod); } + if (uopt->frameTimeLockMethod == 0) { uopt->frameTimeLockMethod = 1; @@ -2386,8 +2226,9 @@ void handleUserCommand() { uopt->frameTimeLockMethod = 0; } - saveUserPrefs(); + // saveUserPrefs(); activeFrameTimeLockInitialSteps(); + slotFlush(); break; case 'l': // cycle through available SDRAM clocks @@ -2541,28 +2382,28 @@ void handleUserCommand() } } break; - case 'q': + case 'q': // bob / motionAdaptive if (uopt->deintMode != 1) { + // switch to bob mode uopt->deintMode = 1; disableMotionAdaptDeinterlace(); if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) { disableScanlines(); } - saveUserPrefs(); - } - _WSN(F("Deinterlacer: Bob")); - break; - case 'r': - if (uopt->deintMode != 0) - { + // saveUserPrefs(); + _WSN(F("Deinterlacer: Bob")); + } else { + // switch to motion adaptive mode uopt->deintMode = 0; - saveUserPrefs(); - // will enable next loop() + // saveUserPrefs(); + _WSN(F("Deinterlacer: Motion Adaptive")); } - _WSN(F("Deinterlacer: Motion Adaptive")); + slotFlush(); break; + // case 'r': + // break; case 't': // unused now _WS(F("6-tap: ")); @@ -2585,17 +2426,12 @@ void handleUserCommand() case 'u': // extract backup extractBackup(); // reset device to apply new configuration - delay(1000); - ESP.reset(); - // // restart to attempt wifi station mode connect - // wifiStartStaMode(""); - // delay(100); - // ESP.reset(); - // break; + resetInMSec(1000); case 'v': { uopt->wantFullHeight = !uopt->wantFullHeight; - saveUserPrefs(); + // saveUserPrefs(); + slotFlush(); uint8_t vidMode = getVideoMode(); // if (uopt->presetPreference == 5) { if (rto->resolutionID == Output1080p) @@ -2607,11 +2443,11 @@ void handleUserCommand() } } break; - case 'w': + case 'w': // ADC calibration uopt->enableCalibrationADC = !uopt->enableCalibrationADC; saveUserPrefs(); break; - case 'x': + case 'x': // preferScalingRgbhv uopt->preferScalingRgbhv = !uopt->preferScalingRgbhv; _WS(F("preferScalingRgbhv: ")); if (uopt->preferScalingRgbhv) @@ -2624,7 +2460,7 @@ void handleUserCommand() } saveUserPrefs(); break; - case 'X': + case 'X': // enable/disable ext. clock generator _WS(F("ExternalClockGenerator ")); if (uopt->disableExternalClockGenerator == 0) { diff --git a/src/wserver.h b/src/wserver.h index 8487ad75..f7865867 100644 --- a/src/wserver.h +++ b/src/wserver.h @@ -3,12 +3,19 @@ # File: wserver.h # # File Created: Friday, 19th April 2024 3:11:47 pm # # Author: Sergey Ko # -# Last Modified: Thursday, 30th May 2024 11:03:13 am # +# Last Modified: Saturday, 1st June 2024 5:05:00 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # ##################################################################################### */ +/* + DEVELOPER MEMO: + 1. WS messages (_WS, _WSN, _WSF) must not begin with '#' (hash symbol) since + WebUI filters it, so messages withou hash going to terminal (developer mode) + and those with hash are treated as a binary data + +*/ #ifndef _ESPWSERVER_H_ #define _ESPWSERVER_H_ @@ -56,7 +63,7 @@ void extractBackup(); // void serverFsDir(); // void serverFsFormat(); void serverWiFiStatus(); -void serverRestoreFilters(); +// void serverRestoreFilters(); void serverWiFiList(); void serverWiFiWPS(); void serverWiFiConnect(); From 2b6ace88fb8a66ac901a3acc12eb5cdddfa18efa Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Sun, 2 Jun 2024 18:08:56 -0600 Subject: [PATCH 23/41] WIP: interim, do not upload --- .vscode/extensions.json | 3 +- README.md | 10 +- builds/filesystem.bin | Bin 1024000 -> 0 bytes builds/firmware.bin | Bin 551904 -> 0 bytes configure.json | 4 +- doc/img/logo.jpg | Bin 0 -> 84725 bytes doc/img/slot-preset-prefs.drawio | 96 + doc/img/slot-preset-prefs.png | Bin 23785 -> 85797 bytes gbs-control.ino | 195 +- package.json | 14 +- public/assets/fonts/FreeSans.ttf | Bin 0 -> 714456 bytes {images => public/assets/images}/gbsicon.xbm | 0 public/scripts/html2h.sh | 2 +- public/src/index.html.tpl | 2183 ++++++++++-------- public/src/index.ts | 1722 ++++++-------- scripts/extras.py | 16 +- scripts/generate_translations.py | 99 +- scripts/pre.py | 23 +- src/OLEDMenuImplementation.cpp | 56 +- src/OLEDMenuImplementation.h | 8 +- src/OLEDMenuItem.h | 8 +- src/OLEDMenuManager.cpp | 109 +- src/OLEDMenuManager.h | 2 +- src/OLEDMenuTranslations.h | 716 +++--- src/framesync.cpp | 10 +- src/main.cpp | 183 +- src/menu.cpp | 78 +- src/options.h | 13 +- src/presets.cpp | 311 +-- src/slot.cpp | 68 +- src/slot.h | 1 + src/utils.cpp | 83 +- src/utils.h | 5 +- src/video.cpp | 65 +- src/video.h | 4 +- src/wifiman.cpp | 20 +- src/wserver.cpp | 189 +- src/wserver.h | 3 +- 38 files changed, 3112 insertions(+), 3187 deletions(-) delete mode 100644 builds/filesystem.bin delete mode 100644 builds/firmware.bin create mode 100644 doc/img/logo.jpg create mode 100644 doc/img/slot-preset-prefs.drawio create mode 100644 public/assets/fonts/FreeSans.ttf rename {images => public/assets/images}/gbsicon.xbm (100%) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index bde12210..a4d6a631 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,7 +3,8 @@ // for the documentation about the extensions.json format "recommendations": [ "platformio.platformio-ide", - "psioniq.psi-header" + "psioniq.psi-header", + "cschlosser.doxdocgen" ], "unwantedRecommendations": [ "ms-vscode.cpptools-extension-pack" diff --git a/README.md b/README.md index 306ac1fc..14e16db8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# gbs-control +

    + +![GBS-Control](./doc/img/logo.jpg) + +

    @@ -6,7 +10,9 @@

    -Gbscontrol is an alternative firmware for Tvia Trueview5725 based upscalers / video converter boards. +## GBS-Control + +GBS-Control is an alternative firmware for Tvia Trueview5725 based upscalers / video converter boards. Its growing list of features includes: - very low lag - sharp and defined upscaling, comparing well to other -expensive- units diff --git a/builds/filesystem.bin b/builds/filesystem.bin deleted file mode 100644 index c728677854257af12c852794ffe18d5e0e445b88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024000 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 diff --git a/builds/firmware.bin b/builds/firmware.bin deleted file mode 100644 index 50562f50f437eab0a1c8e0b4cd323bc62da8d3eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551904 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%0AEyRcCB_4FeR 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

    DneINz{X39G!J|{{PExrMEi4K8 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

    @?3BRWY$7|#CeS3IB@sDIAvJWJ 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/img/slot-preset-prefs.drawio b/doc/img/slot-preset-prefs.drawio new file mode 100644 index 00000000..e44db2c6 --- /dev/null +++ b/doc/img/slot-preset-prefs.drawio @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/img/slot-preset-prefs.png b/doc/img/slot-preset-prefs.png index 422c98959f7e6cbe7e3e01771412f6f097f0d7e3..6acb6aae5e875a192727948563c8c6d472a7e6d3 100644 GIT binary patch literal 85797 zcmeEu1wd5k+Ats}f^;b$Du{G<*U%~5jSMjiol*i)f`Wudmw+@9(t?tb(nv^2clUn~ z*kyO!`|Z8gy?6KjK6X8G<~?sdU1$8|WJFPr@R49(U{J)xK=Lp!aB{#uQpC$Z3qDFc z8}I>ZBQGillhZ~x3j-saVk@j_3vqm4Vr~RO$|Q7pN6JVKhT7PYGJ!}L8TBkJX$?*E zjIH$`HnbK-wm=i`90D~od0=8>c-n`No{^b`o|T54QIU~}lu3Y*1-LM<(=s!&sh{@O zGd8j~n@}3+Y+`P%N6IL|LQ4-!MJ}ypU}9klwE>ed2?F26Eo_aO!qq%Ua#>_&uziH(+t6=)`x6jPLzB4rc;?#)fijDQbOBLg$& z$q*s1H53B0h%hh$tDgJ^G%Dyl(6ctVFvZEqjBNFcPfx``BW5Tr&H%AwP!dyNwG&cR zu(mrrjlGezjS1A^?C{LA%(NV*4{V(*jZRw)jqFVffCW#cv@y^#KWk<m_cj;tjsEk0^*`F zEIRu1kYCSsJ}1Oc)LPFHEDbgM23DQqn@=j)Zv%i9ze~{4tLha z5;*rSWj0$q z&yW2HPS!uM*uOI!i#U^jKBK%di;ajFlL@=1s+E}x4bv$}*z1|wogqU(O+isunnpz& zBn+HGPF`39VAOBKZtHYT?B9UYE%amtJ#!P|6Gr?^cY(79`cPY2C@P_CpPEDy8@$;ya` ziz>+rD2mI<{Kat&f!gcoe${59crs*d*M4E83F14bAKa4lZ#)?p$29@ zQS+HNyU_bjrLW(oCnk=+96c$hD}W6jILnJMFhOnZOWW(P3o4$gt_$?^8`?RM#+H8^ zjEwZZL;^7K8z}xU{h#zX(XoI&{E5fT*_YuAlxNUpI%m}j?90S<*5@MoGMsCh{|fs$ z8VEw5A~x#AdS+G-OFdO3=LbqO48IlGfRI)YR{Z;k>3>L0KR|Z>9kI)P$|e`MNlxm- z?v)o76$cbEAg5W)0Xsy{(8M0NH9omj7LZaB2C#qn08kefp8bXu|0&h|TbBK^QFgAa z8EDy9PFFv-UeCDm0#4ZhWB<%N{{_#UtLncF&oZ8w;uo-bj;>$e>J)=EmUCddxe?;J?Ebten?sG@; z0(C0`-h-@;I7o+y_MEUTkdT6utfCG;x<6iE0pSjFp;OiXoJFPw4~$q13;?3Hv9*Sp z8C`f{$i|@$$cgVc5C0(%cjkShm5!>8 z&3EDm=j{Cp-2R_}`(LEsIOqZ5rT_WwjFA6M`tG~5{##@2Cw0g0yW;MDySigw|D`?u zJ%#so5q7`Tci$0qw6s6b!v7a886)6saWHWF{0C%aPV~~>o}JImalv}|hPsop{i{yJ z-^dJM{FR^mH{nZ1M+rwECnG%(M{yHpM|L4O8!`6pMj}rwjt5X6NqG^U=Z^Bp0~#QB z45Thjd}#)HOCSRA9Y>l5c&H#GASEs%3fuvCR^Te8e9ra&gP*SOOJDk%>2raI&KCuS zoq6=Y-M0|V`9wctpR!7da!QK828Cp$`L89`>G1#3c?3Ww z0k9L`3!djD{?5k%i7N;QN}VLvgjE#*9YHT7B`YKee2NOooFnRY(DJ)6mtT`H3@^i``7aT%s>IdMXhxn^S|JB zGn_lv7agvj8vi<8H{)68^Mc+w5mEv|isH&A#B~y6IX&wS(qcvohAc*G0HS^qOyOW< zW71;Mtm(tq$1YyQcII}anB8I(-F4fr#hw_Rk-zg~up<;>B&z;{N5KxxZaJRfRp z3x*m)E%eNVe{L20WzhQPK2p$=YKU)z6sAVDwoYdPRL{;93Lxe}nT3&~iLENolb-gZ zNK5eKtJ>MXlY7t!f1F6&Z(mMe{OyYcP~~ts3a|r#hbP}phW+&L=W!>GK<5KbCChgx z!Uk$*{jCrL=<)sh<>^pcJ!@m2=ImQd&v*MVpY}U}+-a|WwSvRi$Xw6X#Qx$e-)Hkb zqE^n6%mUWddMD)}=i=p<)jyiWC7<&fmTo)aM*ufobV5LSf}fK$L{)p zE)>Ig4Dd`IoC~*$F4Vc>{MWX`na*_51t0l50`hN1+Ri8X-I&ZjU#;^k$aqp4AtN9S zxbUYzE`Z>_7nu2N1m{O@L`Xme2zUOXuPGsJ;^>K7rRCiA|qF;0K=fe99k! zGC5%Z$!~G-y{+n4d$A|Is(eR7|ZDWMw5dpw2Q@ zYLeC>mNX#SKQrHcj_e<3)BK-x{f9~%{?EETec1w_z+aSR{9sD_tx;a?Y=fLuLvDY7U zPQT&u|E#;8Yl40TWL^mKeK$_Vf4k{vFKxsw5gHC1W>a1}aW|Q%uIrsL#ZD zQcU)rKpg{sxr=|lEVTG35puydJ5TLibj{8y2G5H@{-d7RcX4<|jlag>8BG6GdHNT{ z;W_xvdG9=ZbpdN^KXd3`8*#r)SpDdi5&j~a$H?+4);kkB{{V^qE!O*%Q2w2te>zJx zU-$*Cixo-Vo}T~a*Xe_^0RSrj1!*V0Cbj+ki5m>eZ5VN&uG3L_LF5M1;?ZOV41P}6n+rsby`L0Mw2kENl=oqQ~9_XOin{bIf9g>KNcb|=j$rdj! zmqw#py{siDwiR01K0z|THPzzspsm8@Yl|jq|9f;@M0)t^aMxfT!w7lYSrJ1-B%)xE zZ24s~j7Wki89f5*9GM`@ChQPw!lk!W$?jrb*A8D7FxPKSjqG0{95WN zySA7xD6obwjWlE*-%lppof=i@J*Ik|{g4R)^A=VNCc#xK_E`D&{oDZ^HPNfIK6k(Z*MF2afMmQyluF>LGHA!^cQ8Shcw;%122jQisKx_q$KITV@?aFFN+W za8ix)9T1*a4)1|9KRkrm4>8GDp`+sN%XP&rBe+QSjbP>y3A)wq+;IMeGFPQyL|E7xb*`=Vx6;-b%J4W{jf^}52XsKIzI!bdz0!bf?B#_yIv zg8|E~J{W%m4w0r+cB(^x_t*{wg%YaZwZwmb2lI&1sT%tQ{Y}+4$aUkx7!TUrsd|Q> znq8O?_`Ix`n@R4U%1e%qhARo15)kH4VD6Fx>CMaUHXVg(m7?5+L2QF1HW5%f;<)7K zj&`jde0|i+8E$nSn7w@O-Ip+H>raA3Gx1YSSumG#VGIRz8E9&o`P@Id*OqKv`x5o} z-Air$gAw08hxX+=%k3~&k33u}J>Xy3PDBsJu0Ysn8iV>Lv6c3VFVQ?(EcidN zb<_%c$?XblxTK%2*p;QWK1m|VTKzmEgaL8!G7oaBOovEr#H&}@_#ts|M^0XsA$#>D z*X;>EW7&ErB2%X+={1gmCOkZCuZ_T9t2#Ssy7RKIY>M8x6|Wb|g~ofGs4DEqBSJ7M zEZ7dGM%@KOA(-LBae7Z5FAltXgUZk6m1bso84?UgsdN)~YDu!4ZI2N?Sd%vXLBrc-B55*u zy!Z1|NKD@wy{|P}5Ph6qwTp9mlPtl=<{br!UnA@gFT6UnC_y3#ZA?74MMpj}sWQsagpsGsQCzF0*ML|qPxW1ZIz4#0(XtmA#d6`&(u)*yaTJ(WyZ$%)t zbEdEDV8e<&Lb>br$3t4Vc+_UjaEHf zX;*>Sp7ZsQMp4M5K_Cv1u-#qD=jDw3)YQH_AdP_``2cpX_s*Rz?PpDE-gR}>AreY0 zA>EqT{@c=5A4Ph^Dsdgild9K8AY^P*{~b*`PMA8+%y>|aJ8 zC6y6;z22K`vxtQmDq=s&xRRWdWImfJIaWfzf^-e#+QP$^%?!Gw=19-BDCt@A1iX-I zR#)-1>}KeD-*1>$LdngIwKEUdrM` zMQ^$BG87XrsLcP#!J+GIH$k}$t{|Bh)l&2hERn=;J?49pK8Hxc`R_VV!7%PL^tIp$ z)5>*5*g0&tAe6YM$FB4TtrL|tpHhW|GkVEniK3RK`&LyP9DKW@*`997N(88VP7$AO z>+MD9YKzx#uj}dAoOe6aKH{XDQ=EAF)&Os=$BZRK@4YdJ3HRhzQ|jcTVrgh^)?qFY zkqiZ6RCrFe$fToFk!xMon{D0~4G$Mg=xQn|&xZ6M@=?Im zB7-s59<&5%Y%gkX-Qm&VfN6v*EZ$s^neX*N6BdQOj0myX55FVyps37hLiNzBPe#*X zkhw6~#|JV}7wE1H?MQ$;eT?Fj6M9Honv_&rb>(gaIwoV{X0`@dIq5y^BPMF|;8?kI z^r>m&44B;}L;{1!u?*&DlpMW`3b&h1O-OJU9I7nmdSPxO)=21kWg6~v`wlO&Z2;4z zW^&8MvdcE@?#NrKov^2}nTgrzD1P1GFt}v5g9FZ-44qLfHS%t-y#|{c33vS0s|7+u zRWA(SU&{<6xHCtP$QjgE7)X2haAqr0^$@Y=J>%W4|iU;9Yq6P433=abtZP6TS(d!^<3w6NZSmD;u0)>+&T1I?k&btAlQW?NfY zV%%V1T}90ZX+F%2U;BK(b+z5lsICo+&R$raY<$RNohW0F9Y($-v54KzONO%Yg5g2S z49blg>NlE5ZE^kV)PwlRG3TN20~`!YOsfD4uHMWbVl>oe%MeRbLbecw#=i^?Kafhx z^RG-wVtwf4@<`Lcq5QLnN#v*r5%a6GN`uOn=UiXwoSk-`u5Vem5L23J5y!aVmH97N zT$0B}hI4QzG1HHKoG;!f`uJ6v&Ox?@YwfW38_gm>i%X^|%7$egk2ukAwv3Qb8x z-%b)E7YQnX?Kt#zS#(Be^{T24+bplEQWP4uWjT}Z@EnHcX`>!V&7EwwQceG@Fi zIg?s!N*-45Xp#$}pdd?U!D>SJPL)G=iPo8Kzej{>E2Ax>IHJ!p?hB?H&ynpo z+%{NtKR`1F7rc<=?S0>RJR?|KCHScGE?Dt1LB1#-ymzSu=I5P_4JxL?vL}nPUncF^ z{q6_i9-@MoDLs|vlUUG)9^&N1j8~ZsTlOsKX^?5it_Bz4EW@#9udl7~7-@_iXAO-M z@slgg2N{qsTDMB@Ly`N3VAjg)7WW=H_=B?KGgCiJG`RD?PIA?B8Yia>?RrBFdpmJa zWp=05GZme+6uY-g;^H7W&`#owXA-G6SAFyk6NNsy`+C_0l(#rlYtyA#wbxx9U^TVw z?rh_tGTm0`)6^nxiw2kx>o`Y2y>VgEr^)!}Aq@#h8cxExrGvxX8-e|h>dx!kMzbvT z_O+pxP%S9E+xwB&wQjLn9*}W492JiA^sItJ9uNACQ*rrJveV5?La9QiB(5Sk>-AQ; zL_X9v*p4+p@6Rp&@QIXfsUM1mU%1rO-kIirpUm-MDaU(){kk<)6Q z2H8Ckiv*w7HLUYKhSMqXPLEyIQ5&X6IfE2mD|2wpg^!In+3AVZWADfj)KMfTji_jLo$vVd>o)%*0P zZ*mBclgfsNHKbv^;U+Y7v*>o4qY}cxlB>(hOA;5Qu8(rDnB!0s=QmasF895Uar^S7 zv+GTgTO(~V5~+m7XZ@*S2q~p*{;O`(o;hVA5;?n1xK=^;hP!Y_?9~$|r*NA6pQx&- znGh3K=}5v;GH=ukP=$9Cj17dXjmf;Fv8n7R_S zUw#2@amwatw8rzPY>n-M!|^&-p-)|Ot|LYrqHbhQbJbxz^YWw{BEjxNcrwSuFx#PV zY+qNA5Q!|zrU_gYKMa1{RNuTlu9QoV&6)U-y8G_k1;WTUHyf#HH>g99KL;RT~@w49m~mSbKl+fJ#yTfJ2Hui8p!qaezHsvl3t{S=})=a zvXp=0hIsPccKncRHm;Z*XEr}M_G>gEP3M-Lq7gPse=TL}wbdR00W1x5)qXsi9Y5wh zseJ9oaK~cE_>>=?f5lhQm{^hP2=Lc5EjMPGTX7hWVpRF)XV7)8x<<$t7^f*NjG&O_ zy?C_STI;Iq;A;_UUJ5faKKs?)#oXDsiTw6xyqu-AX#piYy?K?GVMbeTMxoR8IQMwl z!k6NXN)220w$>7qk{5|-&gfS8`ug*i*oaD|;`#K+uKOPAW1`27$g=?$T4hfN9oHrc z?v5%a>b=f#(Wam%;YGT7gYP!+cr??}(#_GdIwgxilz0te`&(w8?d6~$jY(fxqE^yz zX)a&eS^+=QN_&He=p($>-5uSUqd8DiY0!Yjm69^FDJj93UmOGZy1*1<6OY>7UK~27 z73h=V|f(b6qV*H;HEzRny^J69b1CzF;P>4#ch(Ls3s}=Hce4f zID24nZq72rYGOKK5{XeulQdXD-DlR8G?aiX$5ujycN^CK7AB)b$J9rz(NCs7C)wK!gb+*Oo#300!Joe`1%KcEQor4J$mai0xww{v9)6T_u-Lt#d)dg)sMs#C& zr#1JgW4`E-i+o7LlbTh?NB4a$U4>qYj*lc0vgW(Njh@xV&k&-b`UXGLFR4#2^I3wV zTH2K2;sg{3n87Z4JFB;HcJ_U%3`Y|dg+p)!gXB^oam=~_1I})$Ij07cz_}4S=DxpB z-2Ubblk?-pGGmVj0t3bgKZS9YqVI-&o<>{RMn!ZR8OdJvq4LEY+SpoR9V`_t!3qmD z4B)!K%fZA%#?J2eX?>NW!K-OsXc0G1*fdC!O1#{u#6W$}pH555>%rcx-B4^~`OVV`7NP#?5;;y>Dt44WOy>>h@ zKsmWXX0`e5jeV*aj*H{bHXAHF6n_chr;8(D_j>2e7#1VrIG@E0&W!tOyNe)3JDVL`HsoBI*j?!Lotq}lzfJF<06&#T=oLj>Mvdrs)!B7TSw)l6(8L&FVN zob;i^_oOEytC`qZe2Z7`hOW}6C7w<`BZNd=RFqC^bHkh~M>w$Ky?Qn%sfW@Q1A~g~ zZJF~T(lx>YiHz*;KS9x z%*;NS#B5{d!PZN*J5$RxceX@@1Ye;^OAX;V&i9sjjf{92god`!%n#V8mnRYXw9a<% z3A->~btT!XuZbTlzS;S{GylH2{T53*GTssA(5u#GRq`2GD;u*bSTq`_ZuLzWCe%Sz zp8UC`_7L~>?r!Au&!{g3cqhjFiJF?o`Zg9gK0cl78AS3VRzIR-eTJ}D2UqDVyS zn|Q6}{do}RQ(V^^3R|Rnqd2*nH%jRNcYoIqx?HuNlvGtcH#ex~7KnSty;C`a|2BqJ zxjh)HJ{UzOB*X`{AFGX5C>ng^fqFB}MJNM1fQ3~b14X`6Gy9b|&umMtI3QtoKBG8K zIqhRol}fzE%)~)pO+%&Qn;OV!FhhB1&r3tm0Y=X1scSR6KQ>aCsd9-!`q872*+g5# zCOb}l{y2pc4kzmY6WR6$@nWe3liuEv<&_nWv?0A&W_JZ7E=#@0=>*8Aa(;ZAt6Fa# zLlO$gJ{}Q6^&`~cIqW0bF7%Op7TMeQKDpsD3O+n2o;`o#;riD@ZTpRjfR{k*?vz(2#Mudhsxvl z94%*M@bH%TG>Qq|K6-+R5s^MzO$`qpB_NR7Ruzqh6JyI_Z6nt)Sqw)OrJfd!gaDU) z^r3BvAT|b{a0_|v*kB=53+v7D(Cq9)*GsO_^ez+9CWI0`%TV_C&E*bvPeq#hnpG8c z*cj=wUaz(ay1=D072F|mH;eW&$=OQkk%tb-m#b_Yjk2CAJP&W>L_3txOz3Q$(noOG zO-gnj;n&mF@~vPVAIz`Dy$ZiZe2n_ODsihJZg{nN?fUNim79r8$sYuh^7=9Yx0hNe z9>6zOT(-Iy`dFr*jez%|H3_j?U9r9-SrNbU$`>?IO-=k9B*dB0P+ao}{gAz#;-Fi# zyzO);t(jPMoRy$lysP8msA!V1d~C@d6P~J@DUu2j1c|-wL;m24Mi)r`l`gOMwf8I| z4hA`0uDt=zC1=8d9tqOP%Hfjb>7bk(nevC6sOsYOQhFKB{MI%&6Xg|GhwzYyZwuh2>Gf1s*!b;_h61@f~bP~mI zghg{@5Ej}v*j34jEDpzAObKFVb~;h2ZIHt&^ve@Gu`c`DI&0~vS4{7&Yi#j}B@hzg zYo!U3hlKIm=c5rp{h)PO+U;;@_kCsPbJ+uYLT)Ax5?OV`BH|fpY|QWw{`)iDnVDjx z_KPeOkg?sp;-%%@icuv=ge=8g(|mfBbi6=e^=xHQZf9G)Cy^?R{USkwG55G+-)i#} z*$nbP>~-ZzI_Vl3V$q0eMK@;`>fmB=1rrfDo$}>qFf)4ka$@JCh{%cMXw_p=R4wix zC_cmc*rSrWFC1Z96$xSV^!%P+&C zqCRDEdw%k_do=O6x_o?u+0pdaFEZK3v7OY}R%( z_{Z04YTgqBfMDnR{Fd!6?d=^M-Av=+U?~fIEs7FuO${ZRQC<6yAU5d8GESN^ES?=_EI(a{$rP!x zQm|CI6i>AaJ>Df8*343Jy3wN#{+pr;i`luX;2Rqm;UgsTUt5!FOiWgxmv&Ju!R?_s zI6xg{YkgYd4UN-$i@_M2BfY&ecX*EsqB%B*Y=mGPwRD3(lShK!+MroWgV zsKWE7#yaG>cF1bozUG>f6Xa$(P%w(WmSe(fYSI#mmHS|rgC|vCw504KcI|k7e0V z3nOzl*y4RQ-B+?akEKXi`K02GlM|aOt@coUUu$;faYdz2pZqn0-tae-^71lA`Yp20 zABy{n2xvHBgS2xOJ-kTqv%PCCwJoW>i4v3X>TNCVpP?~wt_)6XdZavZw5C0GLNq`BN-x6Ys{Y}oCYGRae6S?5O8AWAXILU> z7g_K^@1CRiLQY6jR1=+C9(SGReXUd~<0WkE37JDyNn{XfB(1PiYg-k2YK%oeMFreF z7L!jbf+mZ^iu%IHe$G*#AUOIYphppFU!ks zL47oyTXel-og)}Ri@2erKh9&<%?WMW5I1sXA+0OzMcNhE;oyd?KNhna4K|W^l4-&&@n>8Y-4Ki zk5=VYN;8L!lYD%<7;7(6n)BUDRB)X1Tmv)A1QZp#lTQx8g8lStTJ%L)uc$DM%*NUr zJMry={ToH<lCML#J#LEwztss2P>!@@xV(XWC*im&jy3x$Si@f?s1u5s23P^HN*RgwtcNl8R8GC!mGUDz67aaT7>x)4_{ODFXZU3nv#p&a1MXr_Z&lkQGTjC zogvPDoP|6+jy?rTEQvc-g0e`tlfi_ua^_1yNx}|F_-oa;$VfSzyO>i~D=V;OK9Gc` zbzJ>8G^r_y9(e=GNC~NIBV3!)jp~g(OEJYHPWjB$~5D zh*dO-iiG&pjdoLgh*QPFvinSFNRf~eRjG?Qt}apZ$Y&JEKs2bs@vcr`FN+uZ)MEP~ z`mYDrihLH*2*iG!fZ-=hoUIOMip@fPtN=yM0yINouuJ^7^eiQ8ZBcroOqM-n6C@A^ z*VHWPMe%S`uywJ*YfLjAxI0dBsq&to3kU;P<@&MSgRY|@*T-cj9)vACa`jJrk#}b~ zM4bl1qzL_!eGCIp=$wOnv0Ud^Y>`XxE{g3ynRA~<43lxljfq>DhGB_E8I;_Tpj0uLEyLkdlD3lZ z=9!8deoonFucm4^zqTHjr66y?id#CELD_|dK`zAo!2T+UToE_1+NLd%elWP@g`k?g zeiZ@&M4{o8nN`s9hmYm5$naRDKiP)EplBl1rqmb^#)uG_jHh`DWg>B^MbaplObM1= zPVmx==twVZuki?8RacubDO4wel_S1qZM4%WQIq|coWBxAKAW{KsYB$hU6(lgtYA@G zFhOMBjT<7#)SzH7nF(lE8#xz>CF3Iz660h{iH}zveVSzr?Yo`=wlpy|Vdz(3mrHv# zHBB{HXV2*$SRWcQ8snL;=HGI?Q8eH08unp!UuF>~V8)@=uQBZoj1Eb{aU}FglW>|F zh}eb2)yU@>Yf+?Fre{LH1_;b3xk{ESwn#!quBuGl(uI{{D;p%Hm{pv&GMPt3t=Qa% zY|Jb#;#8+!87wn?AHOziP;f20&&ml?0t;3evlK4BR*9HqsFW!iURByIPr;>%IPH3`HYsvM9;t zu2Vy!^0PyRxY}fe3Pa?eW`;qKglJ0pO1ZYs2cL1RWgP>#tVCp9U$j06MkcK(5Oz}z zI&L8qI+1o(&5H7)yjn+by~HA^Xij*?wx7ERWQ5cj z8)!|C@dWX6Hxgp-+m$zBV%k&_{mRIx#05fVw2x=BsoE^cnm~8oSTRTxN8x5~Lx?cQ zb#7i38Y)i#2~IvY4^B0z;^fv$VI6{rBYtPe$DpMzu^jYP>~0;QvU;|>epu0gCO@ON zEoFB8p&|4dYt$P()AzWeulY8bYOJK>;v=URr-;4kP3kaM3_TSlXMV%cUZ|m&2^z#ZCl@C4QjGfX` z_0A@i>Z`#rO)7pCs%LP$bIMHt+#e^gb@EDCei z&ljx(8xJ?&=m<9qt9uS}iPe5Wx&kDZevMeTTRAjHxf(wR!4=o{d0-y%$blrtm!94< zfg5*nm3TsUieNHyHUp)+P6mIe3q9Z=Y?F*epkWKjCjOxDTbdYNJARQyaYHc`;)FuR zD1NbggDD2axrjmO%Xxwvsn^D8-T2MjzENwh#4=Iq;(*I*Hq(jmVs zE9X?se;9>J^7!iL7wJSAiUK$s^b>fiAEJM9pf+NSMY5N%-Agg zn(5M?1fms48j6Bj@L7bAG0OaU!3HxCHps{`S=mgs+mM^C#1!>;&uB>L47nPWLwV#W zvk~g*;O+$J6;N$NYg%NG5x;nDK$0{Xgq(S0k=Aw0v$*aW{HNCo_pA%l40FXE6o|%b zH}LC{(~vbB=E{d1KWx4Si%!B=MaFUMt@bA@WkZ|B2OTt%;q3^$oa*FQBErJfJWcfj z#Ra*9&r%o)N!D)dr6SNeTv5!{Nt2J`zj53urWE@|+NMzqkzq&~bh%ax7p$Ke9y8`5 zzKw!ZndTogqM>1CH^kpu)Z3Mi3@f_~UV9}T^(jnxWoSE*cD6Jeb$Tq(mseg*Zg6_W zA$gxe_+2Fx$t4iJA3gT`t-CiBp?Zm#9jau;3G9M;w@n`V?jI?d#9kG|UolufE@c$o z+8@nH!tw@vnYq-E`WR*45#tTt63j3%M#Z%Iw6%{iOTreePcov@5pxf@Fn%DsJT;ZX zDVcwLgkNmxxp|DHCIP#qM7%c=!~Jb{x~CMbU3tt}85JUG*Cvr~V>Zn8f?=rMr!zx2 zZX88;X>8`FS=`ZG$UU|<(UWeuHR+R7=jFE`_~M?1W)(0Tfp{kyt=EJ)_jVweEG>UN7MG|dn1-eHnD9UIxD((6y5`1J_oz}LQ;*+lN z>TyxTop(UtFgFfj%a}~w4O|vxPvx?4~49&TfPyBG_?Rr=Nt+zf&6?d)D-bI~o+dJ%b>~}&asoa^g8$vS zlZ*Fko1e(=THUH<8LCt`BFQO)>B~oOWPxiBc&!94wXki($cUzx{W?&o?OQ2x3mWW8 zG3TwAk!)3BdDYj#K0ZEs+&ZI4wJVk?oV*qrf(&p*Zm$h6c`n1<+j0>}Ai87_5q^4_ z9z;tl@nbci9#gG+^_2GeNTdU8_^xf9mvBi_x0mIHu3(VUtn>5qXeG+9w0XPfjG?2f z^Y>&d)!={pw)7DJuyom`vqKn&k{mOgS&cK6SLojR%1W0-q#K@l&;wN@H)37EYGe3- z_}51AOefXYo-YMF?uF7GKByq>L_)d)iU3hbV+G=u~A7QmCXh_I6JjY`>qu$*+9n=h>R%85D z^esn*@s=-Sh6623^^Vv{MUcG@XAc-_j|cF@UW?|{Gk)8VDCnKHzc*xzhxiqB=`P8) z4L2Y3?2KX_?X*2UmiZu058ndgDX#OB`4Yto#HWuuu3|MAV5Mh_3UddDQ7O`|wH6H+z=e*-2 z<|UCkP-F%!-2}H%fw`ZmPn5O*b8C9qfgXw^>|}sXE^NFKz}&Zr>TRNcxl7^Z{dRyp z3Y{kx=)*8zZeG)%X+~gf8-!krRiIB=(#d6Hhn$5(?qN56yAd$=G*TAHIM7E{_~cT# zdfyb7JDnx&V+$g7JC3U8hZB+r_}_NGQd;!%utIEhE>0oJaNf{jTh5!I@|bs?H-Gs$ zcO>Q%?0EGz)D0W2Vau2z})>TYe*01l8md_cwOHF({V@e*k_ z3r5@nxXt;;N~+~7U(G17s?dYyM<9v!aee?Mnk###( zb(q-L*p|x>bMuv&Cr=riKU_~qO-oeBEk;|UbjW!%-rtn0T0AETB6|AelO5uMhj^~6 zF!(9&absVSO;>^QOloE(l{Wq=(yJY45Uw7=O`5Q z+0Mxsnc>kzAK9OjR8>{iTV=D!cdQw5CkF~aU-jD%e@$E_tJ>s!@NkEtH(NcRC^KTr zUh|rYNPJ$+i`~wL%;pO!i7g9R*KAG3)W%AbJ#W(6A245Y{#qx|C9e^YJx|%LT)(@Up74D-jE45-ve^itZSkTTd`I=w75ESyGUv` z2KtGru-wg28t{<$a>MvtD|aNbv`gSd-FGiJ+oE{Nq&4KYa?vkVQtV7tmR{fgWY*Z+ zJjvNwG|%8@G!9o;i{c zX|QJ3Et^G*1um<68Nkz~kgT@Ye7a*l;yX0H)ZL@V&ROcQHeaYtD_z36NxvK&-$BCs zWdCzb(~Y}O2+tG#9^5s%wJ6NJ89SPfxmq!Gm;(*;)@BafFlznTPpD`U!B3g^&VA$ zh(rc!m5yQ~A-EkFF^B|RUw^vDPb@duqT%h9cvxB(rFH{6n#|IBbih@1Wpn3>r~2AQ zLG}TzL^T8VmgqwSKz}$MymaZB$Mg)4zHbE|5I4^d$?#T1!<^5S$OmDUu%j=GrCr4YZ_Thpbsp(I?k8@gv;0@DxT5 zvFV=N&`HdCwWLq2wRy$a7lkFzq7gAnEj`iV>S`fo`VLnK24eyhKC8K(-laI9w5?c- z{xVlJ!tVFna?^Bib$R!_EZ4rMIhLu|+7VQ$PZQIj+qj7 z%nnftA;ZB=33I)9Q_^Mtz{)JC@Zb{Bw+on7*FzE5^URQgV`M-0Fr~4>*-dJ4izYCe zve3qH1vTaJ`ugx?H+UqHu)`HWx0R)0I5Qtv9Kxw5TXlUM+ShWo_z=D9CchPzcawbq z;qFkCXO%#!z-L#lI0AoEt+Hguep`6GzzrTbAg!j*fI2ZXz5it>$R)2hzb>1g4;^)!Ro$nx`2oYXKU#KUmZm5Z1{jebcc0LR>nlSYV`!WFH#x0ga%G6TUUaeP8X0K`L>be8CI&i%EX|?V4=d(*!uUG_ zvlgUsf~$*ur@Q_3n5iN~>6c1y=^Xx#9hl9E+unIor2x@6j7p_M7?MI%YQ` zb{{Q@(r;%Dusf|?FNTf;-nb=Ytl@Zo?`$Wij&%?7B{TS_L)q@=#hw=Y2tJOcnInG5 zN;7gtcQww4+p>c97J;V8HSAPKfA_7=s304VFXE?AD6f}$<~yWCN4r|)Yp!m#11`kk zMo(3r@QBh`xsSXh@>)U3%rlc@XJiaz*VtaI5Wdc;FXgjFB$A*{tMe|8chPE10twH% zY9*7yuhKa#&^3vs5#v(%xaEelkiWqbY@F#BZ<*ztX}%+zRzKy{TA6D zv?d3asz@oIO-?0AMT-Jyf(%s+FH>qKOU#K#>{hV6gBC7Qa)Hig4%+J8O1Wp5)9 z{&m9bTa}OD4d%RO*=>%fN#uIiX;ts{c%7JR3PK56@lU3Tw}kZ>Dk|n9VZqmk)2@@R z@td&V$8g(UUzT#ZF-oJ+;1oh+jGX&6{aNPo@ysWNrcHhEdfQtojDm*PU-jVU-o-&) zFqshtYe{%2X9_J6f-c~m+YK6{&j14C=y{zI^|3x}YR8af9C-7#tq!)j5}&KJ)e&&YdEywy|d>wBU< zHfK>^Hl4UNzq%PpcZ`uRl4xuu^>9=AiA$+Ib&VH%08;$%qVd~@n~c4={Tp&{!n4Io zdsw$xUD4d64>}Sd#<(DhEs`9ItKeGDS~q(78iU+ak@;OYw0i#gPws=O1zvEjKW`wG zTb8+roFVqa3E7<@la+%3mWK;4A6(NqlVVin_25khcS1VA*gJYX@qV0E@CI=xb?^c@f2#(^_>kJ*3?IS&b$+3Br@#Gs=Z=c)U^m67;zHhKQo_o#7 z;_Gd;ZKAE^J>+DaSnrA{e0K~f|REsY3@G)U(` zL>i=|;Rr~lC`gw`OLupJbi>{FJkJ>S|9*Jy{qlaeW85zcKJ2si+H1}==kNEMbFIxO zob6P(#>Tx0 z`bpyV0@ODdx=3F}-yCe#-@WMDFY1AvoH+!!&-nz`g?D+-GzWfk(67cVF|2BjwG0;_ zwDj4qXAxsp%v*qh^SE9k-9UK>DQq>ue7Ck^3K}{rQ2hk_)A`G z29*R7f8OtncayPoBFy?tb-AzeYJU6#$+bpsx_oc;`ygybwc5{lu2h&@0`_r|$ z0ZFHOw#PgC_zD-le_6gA&yn!J(^ksltv}u(cG(}LV`gr*nr$Wx_nQp44b0%=j3%{i zDWO^j(lc3>cohMabZY{moqFJbj{#=9hOo;ch~2EG_l3lv-GcRZ%4#C}mS0n78MG$R z#e0PEn0qX90pAk@>m?fKM5TKi=^$=+#M0if#`LhYtmOK7YNq)HG2ZvPtVF z58NVUR1v*f`S9jpHAGTv<^vRRkigLX|19SJfu_kJKJ{+smt+kK14V~P1N)QJe+rR` zYgWO;IU~@zQh@W9ukffODOr6W1i~T!!FP+C0kqZ3-=6k_W!Fi z6zqL%!(Tu~ifg3pLVuhbv5KG1j?@l)je(C8KL4OVh<-voWfYB>Grx-9{CHShlmOfW zW6YQ(@q3|w0HRvF^5#u&XrEQ*fWIOra;#K1FbM0Q+j1p^5kKp|Al^n+CqasU z>ZqpM4&_tYbLpMXH)Cj@EOaUtc%smDxPgXBMlW2`F>trBKq<7Y^`{2Qc$E6wADVqp zKr<(yhq;nh$}KqA=3##{TOCK#G1T4jR4bHnWg)gehQX(*-|Njw|H4 zU`wX>@%I2Qm19n~7U8y+i`@}{Kffhn_yp&{;6>6ARF#YZJ0K#t$YkN3e{Xw#E7j*B z<>YL)?gY2r-~{=Fn_Etx(^*^8kb`etA=T`E|Dt?II&GKxla;It3=GykbdSoonV52L z62TqEBc1Xo>cgb8+jcfF7Ycpss~ZJSIS3B(gY#t_55@HOE6{3&DhqDM%aT-0wz~5da>NAflTsm(MG(CuxK2LeZKMoU49Nw z2>U;ORk=cTfE)vuJEJ40{r^6K!oLGhDYLz|+9R&Hcf2c+GNCb66`TIUzs+mvVV&_2{mXZlYFl#o04x z{^;tf?3tOoDXz>;*DC`FpKkQY3Nr`aqM?p8dBd(+I=ytfIVs-V2)srxsx&O;^cY&!VJ- zh=on=`=ZhDWCnN7e0e#ZvPmwHA4I@L%N9z&cBDnf2wTgG+xi6d25l*PJ3KsBK-`1G z*Zr9-d&uJD7vm-L(JIc$gqM=j*fHK&3ugPxg5N+CO?7uoQ`RK$xp?seSpwg6LtQ=M;(vmMDKByV}c_yXsT}Rj%S}3CiEL2MMY4>;hm+KUb2Mojk4%{B=4xi4+;X zDbm$TICCX(Z}qZ2H`LF55vY(rnC~u?h9)emUN64e@YT8BR4n*0k;%`C&Z4y7^bB;% z(qxmC=zHS?XNa&T%Lvn1f*Q6|t%qi8`N3(<$CBsV^B5!fPK>-Zm*^9f{$#~=#RqHW zZ$d&O-t&<8hR!acsSmeh1QX;7v#NDmgS=V%=)8B^{pJ2w1V-WEixRN@ z2ec--#ldx~ERm_2pHs3~qs)5G$p|Jm@INyX;aM z={_*VpFw;fi`tER7ws+y2B4Ss!G~Wc%fR{tT7!XE@uw%?f+Z#ItHl?ZvsRE?Q$n=f zO@$1vtF`@_q6B%$H=K~16}e-7ZsPDpqp+kOMHA&0!qn4mDPvfp%}=lK?uMToJD_ZB zedi<>_Y_d0kqAD!6-Mq$xp;Za=@3tlf7ifYr}6;ZTk&|C<`fTA17~b-nP9@*gN`9u zaiI(sEH)H&SN*9y-G=u|rA3=adL<^rr6z`t$@Fo0bS0s0EiQwBFr|V(r*JjZp%LOs ze^%Kq)%NYpaJK|(-v3Tg>h}EQUaA8>xb0JOl504dvD~Z$NsTPi|5lVmH3g+WyBjse z|7_MhjeG5PdidsWp0rmBSFk>P^Do2Q{1$3VV$Zir_9pA^niZqTwa|KFGn+bo`_>KQ z$Pn#S#|_3jzrEqGpDtB=j-SQI-8|YJ>82OZ_1vfHW63=xRN};3GCkJlmffDG_?Ys4iOKhu#D&>o@7^IzOiejMf{8JbVqzeAdV2Bk@$k9T_4T*= z6I%QjD{E`5EiD1V5Xse(7K+{x?Y(1M@AFVFf`88ze#-<)cqlV%*zzL%PtTH|)!azt zv%}d~)XqnpZ98Xc=07>x1{&>H>(5Su2R2n>~_)n7C4Bi_-7pq|iPqa^@xbIne_0h+4Z@jnC*J+Hf z$9WD=T`%isUTH@wx?ACWUt6P^pzye?g>yaDhKOdN-9K~3c(fdEcaI5=ia{>WtHoof z>HDVz{d_5$=SNd0S4>Ra`pwyV$MwZgpV4KWdcA(-s{jd&)e{-7hjh_cNKj2#PJHWL6IS&sH$4=Wx zFJIYSEw8Lx#?Zc4Pj2a7oW3)BPp8M#qKCcSHa$)C^yyP_!E5H;n~l5f`seY%U}?rj z1zciBr%N%`Osy-ct2zp45k&6J&U{Bwl7z9NaT6Os9H!uo%WvNVo*NkGsxueI8_2>V zt5bqAcu=~vEjGAW4s|Kimy=VqSho^4e6Dyg^*o+as z`Fzx%`>@EI@SSI-wJM2G`)UL1Shzh~euVrjRu3q^0Fl{SHLB7SokuCQb}ci37p>Px)Z2G_b-s{tbT0Vabxi@Gl92l4B?wJH zw5rcc58|5ILsV>_)*WX0rJJKi4(+_=frE~rr)vp9I*Y6&4VQP=VbnWEH?JiMyQeP$ zT5(|LN|Sm8-prCkg-PJe!1d>n-xt|@7ZbZjxz>?i7*S~Rnm__U5x}=@|7s5{34~>5 zpw0xg2AevkfWISA1T`*j7^rbyiZnn7S*Y=&uZZuha5D&N8k#^)aNRkN9iHhZD-hvB zvgFX@O0Rhc+OFnJ4%+HtcjR6WVTvPzIJ6^*N3_rPIwg#e5thr)K9o!a8Z0?g!5T*U z@6GuC&)w`W5<2*_84RNILPDf1EiHdeP9E8C`08;pFd(__%`DDcTwLhD0~*a8Z?8RF z_UCBKE0Vn3kJeQ81oW~MA~|v-eJ=%41l~MR9Cuo54Z`xYpKt72eKUZ7B(gFyqsGL< zz=}q#<{NLMx4sA*qlRyfmnDwAu(1jM^vLiDOI*T@+iEvSsom-6>BdL_k%WXqw?#d8 zjKY~ifp%CFjkxn2&)vr~5YLv8 zJZ0R=L37W_qEbkH&ESGyQfD6zGzE=#8eHWN$uf0jn8$1|AJPCF`vrBK;`RxTA$mC^@&Db@v{p~hH!+**eIbWXOBW0J zEF0`>LUMV_91}WPq_-R?JlDL^6}Pywq`BC(B<{AepoAOq@NhuDeun&IM--~($BiPw zTtYSm;gvp7mks=_@iJ2d1ekVz-l)ozm^649d5Wb!kQ-5=WsLbe9}1Rd+dFB}RcvPU~qOrp3Q26ZL5mEMck^|vDS2H zDKJHLBEbE%!2#ell>+1TogolNx^WbU2K3GX{75<{jrU}ccTe_y)C95cuuzF>I zO|7(n>UlrI&+KxgpgxS51mUIA5^&y;}Pf9CS zMFt85$Q0$A6o?t+)eQ_N6?56py0nqxUE``lF!1eyW7a>^s}mzs=NMl?Yhv=j-i2<5 zMS{UBJ5dJB6^*NfKs=FH3!jkZ8qnGpXu^DJHgLJtmnvJJ{mC=+_7Peb2C*cumi%EeUvHqltR$`ZA8i+LT~iHB$45ZCRe~HL{fVGl4{Em1=HDH!_ zS$-wVJhPMNj6Q&ai)-cZeQ&yY+QvgXj4(lwkJbeo_iotQ%8Dd! z=XJGPU6b^1sx^z=8EcG1Qx*?ZhsU@!etJz=SsBUhHNoQ6bT!YfXgbrDWpkXY-@U!X z_#SGjAA?_yw{plvkpP4Zduo;UuT7x-We770@bA8mG=ouX{F?fQ4jQ(Jy^W#AQ zS4i4QmI!xjrrKD;@z68s3dTwHwXhWgk&E_SqN$(0uCAFGJsFSu&%SfezMXNx?t4bR zm*t`#f6P#$m-0{^7`Zi9+awP_ay;C4T5M2@)WN9cRExQTA2L2q8BFWzMgRCA!HszE zi~Y@pKc(v@c(b#SP2tH}b27a(NnhR51I1s?on^Mo4%6IBovn+#wCul3-yW!)y`irU zc8z%LB^f^QQ=7WMYlY6;K|<{{pF6UVF-kY}iTBknJDdkXw#ej}A5^K9cJcDE_3lif zvvs+_sf@<`JV|DDAA^Al1w_8_%I4=??kOS0iymn?!i_NCP=#XOi;pC{FgIJQD^;F0 z{g8E^7VJ)!VG_3!?p{4q>@!&(8uvu{!lr>R4m?e|=u(NGzG66ZJ}UQHMJs;(6^XSh z6KbNC5df9n4RH6}$D(24mm~_T!6+vsc&CL}Wzh46tJ^<11vvt-@^(z!=e>bQ_&`bMBFT zaG?vEWp!_984M7=__`6^K2iII^Y^dJfSIL(2r>{B3M%(jQ{TG{Lx&=grS|An}+bpnFq6NK@yw@~s5McF?nA%4^>1$VSo~OqkD%?bl3abJv`)F-v0qwy!2J z(Ehe1snSg7Lv#%t6WPKX(p~>taSiZY_d6j#&hr~${yN3d@7J!^K0gAyWz6rrN8>?%*x-Q-n-yISN%s`CxyS= z_rH&OWvuV4ANh_|O7$Br?`bP$mIpxl6!yqPw0#?w-s)IZa%_#8`sv8-QP{ps9Tn8@ zhoD0cS=Oe=2-5m$s9oJG+E9%?|EmH{p4~!|+x{otN5>5HCkOT!ATap?9#Ub&n=6|l zIS8yOC3ZV2H{dHeY}?14NhzHs=rsH&j7SH4(I*TVv_{1H-<4>;N#*tZ34 zg_Utz-Zq($J6@ZUyCYIpyI;H>{9rk$^nnn+6<=F;sWbo3cf^!KM>E~PRkMuCS6^q^ zx{YAaoOz39fgaG--n9Wn1d&TM3~#=tTyFK0jmA4^X~!|9=KIOsaR#_SH~T6cUrjaHu?56p5bB_#kks6 z?aCvj%`!lK{?s_YwzWF(>*k>8;!f$DQn&+ zAdK-gturt(?VWX4ErHs23zpycVsPFk2d~+dQMp0STB!C@I&rNn83Ok}G~DBW+$SB& zCX6+gM;9eQo?7ejSEP)+cV7}shVoAHwC?vkJw}BYPnmokD>2EVO%tto=gY<`k*|h4x|+gW__A7BRPL}3da~tQ zk|O0=TWIVpyGzo(p=v0g^M*)ggjxN9`003qv^hEsaZGAnZx27iQz~5YrG1-Q!Y14>JH^ubA8J_9`89)L(qCzq8@Y=tso*`1D+ zLi8rY@sI%US_nYjii-sS?047p`Z7*$;ACT^VA|`nJH|vx*((Wu20^fP&cnicRBCo8IAKq=7umGfcmKQv$v4$I9{#V zZsXYp?pZpX3nkoo`;RGizmKfzD5qELc8;mCZjl}!LFGpqlL6w>hee*fp&j`>wQg+P zjYx^@=-vOlT(lKwWS8 z8cx1HlYU-UTeX{OJzi3>m+57SdbNs-$dx{fuiczV9l;JK+gPU;(I58e(;lBQJ~0YU z$ZvuN0x*s5Wy#|?n|S#p)g`5V=X>6QyNj$NvUgres=oGNh3?RXtX@ulL;55pC_}*Q ztF_aN#^tx&VReaY>%Hf)g0?d--`mM`>#^R+t?R1wRSCh=d9Cm|v8{R2>CtvfXiJ0K zr+m{UKax-A3jx)kB_&S)JTdxh&B|A*4Xg51L2i#m)=2p>l8vfveQL&9b(stU@T9NH zf73f@lAk*9$wpENDns&Bj@Bpv1|M|=dTi##*an-~+V5z3j#e>!NNisGuo>)5zSgFG zk!76pfWtaFj97GbuG==OKO8g4@8Wf=7k+8ocnV57y(e?m7+V#(FOzq>LS4JyHgxENYn_ z^QwdzCBR_HG(8@Tj+H64n-+Er3nDiFwEYa0R~`v|u#K)%ox6+=*AD!Jt9`azSCB|n zUo1j=co>`L+TyRx1kR12q&xxi;-ocO5PR3a3TuZXW$P25`yY#F zzTu{5VUJ`=v(-ZESeyGn6;yw~_iJrYxscfEB+t3FW5ZsH+NP3jar>om-l{y1Y5N- zg}^-hY0TYaN1B?dup$}2Hn|{0Ts#V*s-~d;h@qkFQwSm3j1aZ|hfwNI`?f%L9myvt zx5nkcB&z_iN1-ehE)&c11#Ril+^Yo9v$!cvGA5#7^u^LVve!PfF zY!M}ZB&6k#Iw$^=1W3rMF!%7hA1KHDKvU~BeTD6&1dOxg`iSJ0KsrCDPy8N-&=B@I z-Sv}{#xM5ryi7lX%&{IaD2Z4`@?EihrO(xoQ}c(ZM@`>ha`u#@AVe^^{P|FR*Y;)= z2{xkUx-+5Cmnm(U3A4Du`y;1dJAjZWP$2}uBD5R4PF!BT0)YXKNwH0K{gW5f_P4pO#GDvz^X!s?8>(Y zDxSo69<6OYc@*w=(_>EN`mdJ&VS9v?Dt9N`d>gT#R{;@h$+QrwywIW z2f`?eD*JEaeol>%9W|8hgm)h4JdZ7nzQleGXfMvO0ELdT?W@1@{r&Au$c2ISS^xu- z2SamN%zC(u&qW1gEgau%uEKxlB_U8L& zHo#`6+U2S-34X#QqKLO8$ayjutIJIEq6ebvdXNK4zT z=JgBrdGfxRjXY3BfueqSO2K;n5G=!G0xy#SzrgRVV)xH^#?B8jpKsm$)Sv$4{Py;& z>2B0ja`gcM!G(ZN9Xq$#r~TwdG8D>5Ay%RKERWr=Y<1^+eb8Yu)TSkqT=1OZ?bydTtAa`_fp()X~~|RjGGpL6!D81=h~4m+vxYI{aTfy%JcR` zynSE)$pL;|_q7&X3PLkG!Gw!i&3brW;>a(&pN&D&dZ4vx!+Y-E0}HNssU(#Xtw`W6nX1qX`qrEVY_9ESsmpvR zyUw)F@8AlM#Y+e>TK;6^>yA~t<2MFuFqE9f`Bp~Bz=8Is;x>!!XZqm<8OoB%jOo5j~RaV)AsnN%j6O(!XW zamG7s6PW+?0`O6AdaXbZUT1qHGK6yJfE42Z$ww0JjnBcF-~t@*cn*x1>gp68FV{|1 za^4_D95vs?2810J{rLM1iyrTRe8*#>?!5TFZ?Ji54`g@HdaDHD#T7iHT117}CRdcS z3z06gTSQ#@e6Z8t6P+v#eD7S@Cp7#s4o>h@unGt(CTR|T)rfB#8)J?gDagxhSZPtB z5JCQ#U$Z=l(QmsC4KY>iP}afdz50a*@tL>8zEdtHfZ-WB=LKl1>`vRKXv%;#`+R|? zWZmCUc_!yCgrh=9ifboko`>x_)BtQvCLWHIGHFkBKfu*L1S!>g*zBf%#K;9&hEF!%yf9|3i&NPu{}!mi^vKwGub*+>td z|AMzrLtimXyISO%LBWHLlN-};2wip3#azE4!R8)Ggf(wUqYpA0hJgP=af&x=HC}-O z2jm}-m*}aal2=Mqop(xUytV|0;SUf`$HMF+3Ibvu)h{$nK2YFl$9~QSdw`StLJ0y} z+^C6HXKz2NHsXUN?w8SEqTUgTEV!1ITO>7(Dh&5+5BdUtrR++l-n1rRR-PuSU5 ziCBQYW-c1*=LQE2#DDh;tAzpD8e8G*ePDF>#1Hp6XeT=<;NxRc5K&c(#Q%n5(v1{# zprt6sg7(5Y%78sAkDwGaWYB7Y({Ehk2xZ|9sqG!8qKbJR?^O0%djVzNtVfk+UB`_{ z0OE$t2uHq;5#*|#!w}-2g8?pH>E@JqFX34iEnG@|k{DzJ;AoN1X_4&bVX*?d%eC+E zeiymq!Do(yK!J8)i-eZ|5^bYs8ToHGtS>2(VHq~tjTpWhXlrxCcpXwvK7 zQ1i%orTETTb|I2Y1Q|U?q72WR%r4pSN^OR6o}zZ&l{Yc9ix_`~817JIBm{md3y0HW zu*9A*k)4)fFvSKaXK*r`%eU8Wb6rc(Qm~m|!Kv~OAY5rkfSkfUd=b#8!Loi)wWK?$-Ur zKgpqnZjM0BmmY*dnrX$n5np|N#S9LsOB)l_JGBO0iK=ZSlp5FR(hFlx$Avr9J^|t< zgpIJ#-5?ydY3wKn9cVLZab&&*9SdM6Yt`(@dX>UaC_cTz%>Dkn_?q zlUnz)Lc{-MHGl}X6@DLYl<8+3ZHh?bHa2MK5}Nlpid0)|DU(AsEo(-WKblK-n|gZp zHR_M;8Waga*yj?^$*;v1ux&;WOdsbYI;&UXY&oycVbmWg?l-v}Pxp3#mS-^ERLhbO zJ;H9yHWquM``J_%zm<<|3Uju2+q~sia-&o%Hm6=`Z}I@|8Oc#;<)14LfGvd@$=Q+I zL!fi1S9xJbLglRSpungM8ze3E~fkuQmE#(ZF5qwFnYtc&u-ZKB&{Xo0qAw^^`ndPVhJ0uCz>Et{QGqEIxEv*}b_2Exrbxt# zSf-%m35%^6B#pc|LqbKa0PAfvwKaSdB8FO)OUwfJOd`Gf57}0aloL33Jj`Okt zlvRZ~MW56h%T1bAkf`-*2q}>eLvs;qL|>2;U?NObK9Bh<5uJQ5He6nR@QHZTe6?4{ z;{c#`pf}+H@s55x@Fmge8Ru{o)8%k^8=w>&y2yJ^G2Ngda?m@Uft%G#q?(wilA?-jv(@(*i>UV#_3<(%O1uTlEm4vw{Dx zs;wjlQ104zk*U&!`m6ub0GlDOIzEp9ymRgndnlkSFmhz!J5>FLm-dY=#-Q~`e#{W7 zT1Z?9_t*sz8$iA(&u1h;Ys!~@C9{>6<{aktK$Q%l<)e=aU#bo|oA)>MAM`k7jFyN6 ziSf4}*3(D@j|YVGbr=(a1DX=A7h7pHP+)#d5f$ITrSCC+_)Jh7!h(znKfL-fQ^wBQ z=UbEcp=o3bcJ`B$SfA33_8K7WXAZZ>0qe)L8EldR$Vv5rPiACUg43}x6h9T<1Fmhj z!W${3Tkq^3#ID-BUou^Wo)#EB=V=0vR!--<9p=}1a$hB#cULhTh%^XA?1EpS0hr&v zN6}}u4hh{HDS;sPn8`pg_{=K)5&Y2Gau5&Wbymwm3VO|S-gYFVbB4t~Y@-;{uMjQ~ zcw1|C$0A7Z5->gwZ!-n~Y>h5yYuQnuwuA*Hr&*ud6dkpPYI+HRSA|JF3I&B<3(3%s z%$BO6VF9bE!u$#alV*W9<;ASy9_I6ofv()%EBxS^63<-k`A#CZ@ZZc>BEj^GoPutd z6HTpf;ZM~4n&P$I#T2mr8Pzi_**~*ij4_5F4*2y9J>p&P83E&aaUhw7Pe#Gn5)l$( z8|i7-2y7{#z|a%kU`Lk-Lu1LB|JX{gqGhQ!t@Q}JS)+tAJ5k)=^E~Au|4jYsTlC}h zwcL|P2yC+IPtx1m_a8(@R!3Do&sdQ9(Um-^x8;%j$i+H-{s_+CeEPINp3iFBo5%Y% z#-=QeC8Y?GOMPb(KG6PySn@3;0LVY4YC15pWfYmz>9)%X~f1sBd> zoXjnfDmtqX1`t@lze8X~jHkH$Lo!q2^34y_iMqUFvAv(8#46b@68vPp`0=L|`(%-B z%MAy`V@5f`H|$A7%}o=6R5;T3|ZaNh2FyfNsN$|HFdcl(S_Eca)d zA#(c-wF!f_>{qzyuPze^wFoo;6H0JZs8?26Civu2u<62NH&X#LHyFt)7P~K1xPM|J zX|07u+)evvy$o7`t_ z#oYIb@k}74*Rj|v$U(G2L|{DrT0acqQ^PiIU$lKc&+?<6xX`i=-3ukHhjZsC@`vuH z?{LaNj+F$ZG%tvGM8FuoseN56P4@!fnv2`sS+CG4(eDuc6Zn7(!Qxk zZdscGJnj0;$ja(E&OXk*UX?C=~R z9b&!d(0moB{5gsq*;WeZJ~3!-q!OUc@ij)V9rydVa$r2cs0MJDPLm!!Gi>Y+89Iso z^zrjMqCo`!K7bx$+2f*Kp_%}R?G3FM7R|CFY{5oQCMsydR~Be8uu{Q zJ6fI}37^)LWTx8Wo4M7CP%5qeiL8^Y*b3o%%9;YO-n!qd`>0Unc8zyNijUP;0S={S zKPWhru4*wR>~)Q4vun$P<>?6k9ojvTIvvt`T;dIZRUC!jvlvATW5Tgopz=}-e=nEk zE-Q9$zsCyG` z{~U9^dmgu=QT5?HxZD&%cx#^ED~J<1poM+n=KVn#AWBMDVT;R^z4RUA0uKS@9jemR zf4D%YQ0$4oU&lg1#I7oY>Z|@^NK*Kr4SuNL4W;yxM|jUT^${va-W(Q5tQj6zTT|bQ z&fo2RFksoiIuj^IuN< zYdVQp=7UP^zor{Rg8AVxWO}Yq%>RlOp7Y2qefG|L4rAnEptZ6=VOUmn8E*ih@(+yQ z6J+W|haR*t45PS8O?%{`aSW51RJjh^h}}=&zmF67JB9zd$BkKd_m&+nPJSN&i(MhuJA7&PZs5D(yvZ~YVU^{BeMQvO{pUC!A* zi*u9Q(}U(akfAU7R3hm%-$xF(IDsUqHkwA2(KQVNSK?fHsbHTnIbbU-m|z%st5P?+-X) z8dfVN1^)|Jp~&{dV31P-w2vh@{xQ|Knak^qe;2ijaaJ){lKUsPC46_k;A*@NKP0}< zSbv9dEJ!{}@o#7&F-~OLPX0@|z|dy7Ym9{G9=dL?*B&BS0|Dt54J3na|IRvOQvCy_ zF7jWhYXWGOuPOhsY8OejKxFMB|Fuz6BU-k&?7wRvYn#wgvhr_a=DClE&-h@LZ*I*^ zI6wifss{reR^@BqwrGt=ayJG^yZ|cb7%7)vSCRH`uBxl4IAhc8Wl@T-Lk3tstht>8 zoyf37+0_5$yB8>>>Quh!(~%^wyy+0d#p;8LO^JD+!;@hr!z9!RvZuCdNc= z3`X}IEvkrQRdO4!A92gU|0?xXt3Z?aWat?W`+4qA&>VP5{Uc>xoVQ}dTM}deyFNFU zCnWYDCA$%5yEJrY(0LIlLB`6 zdl*T|f%nw6H-*-tg$BaH^FEced$rr(k-?QCgNk$|(%EFR4ch=QE|t(oCXMTeM%Wmy zUx|^Kh-s}$!R^s_)2+^trcQyT{8@F8QH`^L_<-Cw=!}}6npRbJ zv5(AmU)|t`GVp#g^;}IzaTG8H9rX#2JR#h8k4A`&PPtp2{O6?sC95$tf-n`Xzx+M_ zzQqVRLS5=Y&aR@JlyYGpiPUkZK#Nr;TLBmMLxjZ1h?ZC#5-&rg%&&aaR3Whz9$O3RP^E8g-4MGd7hu++Q zU6|HTv^cRRA49jj1w3x)FpKs z3@cVgoBaJh5l@ z1fe|%0a!1b z4^_mX6aS_Xoz?>iVYo;5@D5OaFQoIo)-bhs-%D%rNBOZ@Vi$(ca;Wd}-^dZ`u#}|I z9VCeYZU1@B*9VP*+=Fu*Vtr-+Z~CSCjFTd&Wx1+C`Y@;?mHdjJ$hPqXFjZ3oG$g%_ zVIW_9rEvDp8ySw!GafHB7Mu_ROA?yER_rtGK|uv{zT zMPTDY*qpEJ;$vwz!=x~udM}M9SOprr*C*XLLDqFT`|*WJ>^&?DMgCVX47EUD2`A5N z!jOfU>aQf{TKBV25x4VqSN>ZKXLG{~?{-BQ`z4MdvS4Y&M28?ZxA`dlP(+_}DOzU(C*KW90h+~WE0_WfkP?4W`j#iAM~i=s9)L? z{RyAGAFu^>Iu9)){lRZ0c2$9AkChm1_uGP}fJemCFdQY=VMo_|=Cm&H_+7J}QRD_r z@An?=x_q0m2HkN}3Qw>x)-}c_3G}d3&v2pN_p64cQJqNozpxs5R_wuDUJS%%hUU*g za8xrS^pP3AvI*e6GQ|4m3^ws@*|GBp*dA5T$o)d)m8m$6XV*F&AhvU8I2pUV1;6QF z=&%Su08rcLm{t99vj8-hZNq^BV_F*Hwk0s~I@33IYqTh@h58Ixj@&=f_w?y3@0)QkwP6#8vtx!=D{UoPw9AQm9kS3U~WGmNddGs+dhqLf7w&v zdv$6ZEqOX{WX2gY96TZwLts9)0a>tCV;f-`gP^OK)%(4 z?yHz4H0SmVTSkMw3dEntlZNRumzhP%OH9^pB@Q%(0jjp zuVvLi=U;D7=VpfmJ>akE0@Wq}t9dyA6sgp~!Y$C=e=a=942(#g&1B0^%P*Ngay~MH zEW?88c}H%ly)`Z(f6?3~?$I+o2e?q#N8iBO7HmZ0#Tpgvn#dbPCs9FdxDdc3#(@3H zZ3rwQ2qI8ikboHTv{I0tO8y(&f8PnRyOZPoxKI2sIPpKsnEnlJ=Kx!ATY+%ZX9Sm- zlgSJ3h+dpz_P0Y^%B0MOXy^RR1t4?U_{>-(2!`{w^X$aSEr!*xcD%Z9eq3nDWP=kOm;RijY(yGe~OATp@Yhba#|_ zmm~F#4^Hd$(cu={Opu}>VT_P6lXB!7Wbz26aT{>KnA5UPYhE@nv3FEV{=@|q9uwBS zz8e_gERJ!aZ;=x*MjaM88?5FrPFj~ir^zV`Ua{U2zkpWczC^34j<_0(W4InFabe z!zs?gH^R|72;sn(oswW=b3JZIz!?S{HJUKe?P09kf`W3MID8vZjro_n$RVDMD8dpf zH>Gf5HZqhA(4zUVoM)(sZ8G&$2)z7-(}yYFFW#mh&zTJBc)Fm6zfE~V^T8QV0}smnD)!Odjf>nv7`G#iN6{Mp`U?l%S=cN`c&H_qG4KF+yqdvm zMVsc9Ec{NUMIR*ck1_|yux|!3Lx#B)hbRDXGkU8EBb+FN2f~Q&?8UFWM%he&lK#<~ z!Q!3SgLS-QK0pQRXV-e^EXkC4vOV694IK>Zx2PJDA*J9&M$qF0ZDW!;Gs2;rGLUx` zDS&(3UTqPY#}_mZdgB5dQTMU(<=LmGf%pHp^GCc+?b{JJ!1hHTRjBW6*O&(?y>kmH znHA|C0w8X=4&y8xK^??d>07rt5D#r_lg|Y09qY9qi=vqOwH>wWpyI{WAqPsiqP%!kcO&A>J&cxBayS;I3ss*QM+l%x4R9bsD znGLX-KJGScm-icN(elOBXR!v)0qGE;DR}`H_aX#&-L z-d_&~F>L)TOGPCQCm_!foLdECf|-oVQX7h$Oz8LN0frUOt4qAljLoaUBhi%GkSxLC zi`{PrQT1Mf>Bv*pzak(33Bu?L^YW74OXlw6ioRA+@iB-z=+i-+OEhFqC%W^%jSoEJe`N;SnKDFtgojK zJdTkx7q_4MYU#CyG3_(*3|ynnqEn^NzrIdu^O^*a-OPWPAq# zQJKpzLx<7n)R{mjF_#U5423=)SRpcL){dr?R7OK21x^TO+#6*1G&X9;$9MwF#qnHR zZ@Uzckq{D7S@@T6>QaM~^i?}UL77_aKSM=%@U*0`c-9Q~Ea5cPKZb%Bx6<6EEfbB4 z=^)MgdAKDGhejCXvZiTF7KS6b_jd0ur%~UrvH6TUF5hxbsr?K-7B$=#=|BbTrPCf&2|`?Z1j! zc3I2D?}2~Su8mqb{r=*A6DNnwJ|UpBpy1PRaJ4 zI=30=!~Rn!((yAFA}>{sjs8rCbS;NEXm*WOiTVFx?Y-lv{^S1Pa~vzOva*%3M`p-4 z63RTXGE>>BtPkaf?Tn{ zvi6#j{(l8E6i`tq9LcT}$-%qyUXBx5;Z=o~J~$=v@Zi&P^D8uWnW>NHHgLGt(PhU7 zc90E&lgVlA+u+=EQefYL>1#J&%{N&eu6AD%Gw-&9r0-o~5iHE>Qs28L!?OR5A;ZeVDg?GQ6C&G5-QqvN@=|;G(GvebsKZy9>WK@C|rf2^okH$l7 z#hB%d{k%)ES`la_#V@QhFkw)&U-B5_Ns4_qdXG*{+Rm_fUo!f)9{;?SV1vh!77oC3; zJgPwn9}$04RVAhof4HKv?DD8pYA`J}dryE1ep>0LA29M$ae!sU0`M zw)D!OGu7|}BSoixgkC!~Hqm`n=bBFOrB81Trr3W5`ji-(E|opeU`WS)=0+#HDPh|;TO#%mspP_5`D6b3i4}3Gc#-&D%KCwuhkAG0LIhPw6 z$4}8rM#K36P5%Stqnrxw`J5AruT_s@zFrQ9$(>!qqcKwax87MVd@7O8Rl79_o>#@b zHU=BK8eMq<1_9eWV=dMi?RlX}DYZXwCc%c#+#|Jc;1-9k?s1bf5>@2XD_8~4#>*ve9zYM@R z(wOPn8EDEk%qYe<>5D7L+?W?ox>)v5^v>>cH|+lY=?#lhc23#wr{QGyRDM5bz;Vda zC9?DE+Gl-pm%?D)+U;MH;j7c}ZWY-|*ULb^kdc3@;aTEU9EX(aC&Pu(Avd<{@FWBB z8u;IgfCk5kji1v(zY_Va?v7^br>SQrd2T*@=b5;V<79=DW7nzncJkn^SANUQ&^ly> zC}clNy)y@PP!kQ#>(3{M551c`IhWftm3)i(?29DMfZ55;mhW)8bp5La?cxP|ih;j# zo0TcQUz10+`G(Sy#HH}ET37?J!d|WUeYAf!d+%)r)?gof=HAzu@M3#0IoS}_txm+C zl6oELjnJoZZRjA@-(iwl6XXmy06vN98-q5x3;*RWu%~27c5iN^@*2q{&rkW_wcWg( zNQa^ah*KN^<0tAku(=>Q+dP10OnUFuwgZiS?lC*SR#qj$wkNrEI~d4l!7{RD{o_kh z1=@XmaillK+%4M&%{sPPN3Z8VgnQaHTSzv}hoAvYbHs_Wu2$NVEQ=&hJDo@`D0~|3 zC?!=KI4xRxN%GEmoCSgdIV1X?^Sh7d_ny3)eb|dA2JTrrhWd06rGye5jq2`5QSAj} zKzbFAHlejY>9h}@GDX3zhoWR9gWhK!Z?pJCO!DU&KXv}0aW9@QV>{dGwVp&YMWC{Z z+vK%W8fO_ghV5jxesT^aJaE11*UtYW`MU@PJ{M5`@*_udv zTpAk5;0=LOMB_FB*oLjX|9Q&YJ_@Ei!NPOP6~3RLg2z*}VYq>zQw~L-x}No)6o!-Ia&TtP0UMo4cU4&G=9~my;{gjO}D@CpQmk?G!@s z7ny-)x0|aty}>sWjdT6lf#1D<@|CG0BAYCuMUjZ}O^W_ei!hchX_G#1FB@{JG#pj>$&NAv9jE~} zDOMdXOo~N6ts1($GL^>pKt!QIy)iE3`1_}BlT-Pi?<$*M$}0>$e@C1eX}4T&80I&< z`1d3q+Iy0LeVUKHW1AI(D1dy|2JIP9O)jx;c3a?c;DR}ccr&yO3`HOBkNSmos7)cgNS5p|I{{B@Pi8xC-3gx#|0LoMZ5Ygln1jc@^Lb@GkB@3G zn6glmG_lh~09yh*_&D)1I+P*A02l%ge>MqSTBY{I<^c+4^J;*CC#~4}?M()}=J!C2 zXHh0D&dDhMjC<@DkCW|Us>`#PNyb@06Dyp~x&=Y-AV0}3))Y%z?=BNUpu@AbHjfN~ zdRw%BdVTs&^=HhFopL_jP$wk-g7gDJ&KO?9J@|}T7_XhLy5=*rxmpi>rQ8Wv4i0tYD&@6o)m2@4gI_{ zuk^VUzZRoYi_c7Qjq_GwYykuPN*OWDSSlxwuSbSM)Ksa*tvCB@d*D8Ez8Oh{ReuTPie z30AG$`zApTsTfvouTHqg06Bk9v&o1-)~a7X_$e;PdXw=PRN(Mhbmiy6E7G-|WNdbI zwoof&gEqJ7-LWOU>x16Q~7|$R*v=G4=>!=+|ggJH>-Xp5301K7oxEImXH8)&|1xu<_7g|=*JH4 z6Wfk|mo;qfvSP5yXB&IEAJTg#D5xT!qh2+K&sflA9f#ulwr>wu=&eTIui`m$1I2X# zjWp1`GU~rR+b*kk7t4Z8QZy^?IN5O7RR&lFiyLp~$>R{IoU2 z1TVsYm+{~9+Ho0Z-dbCjAG%MIJk|gG@|VU(agP#|g49trXESNL6_s7!Q4K3V7{{PEcdld=oT^Yvt-QAutvtf$X}*<&;EhJvY}LtHLFD&TzPo{EnkZqQ5+ zcPDfrD1PC{+)PU#Fcf2bd(bw3Qyj0ZF17o}N}_kb;w%^!^H9mW+E0`7Ur$g}tC8~i zLSm8hBfdfYH-)hF<(jrRes1y9m4ym$=;U@H*@nz|8e? zshf(09~(kX%)S)ekOv2n>kD={%&$Zk7fq4T@y7C& ze%wy|hScV;_6vyE+$Ey4324zUV^bJM{L(YOhI!fcS&2z>0RG1P#QLYU9qoQC?w67f~qu z?k8ZP6^cAPMFGytqLI`||Cv`D${rwy}wX}P~ za8qK1lt&`aJboluKQ(=mYP_oNRwL3q!h<|htvM;l^XF71CJ##(Xd$NpVCnqF-fn7C zZ-uurl?!cXvp3l;1=(ev{gkSE<<#3fF>MOR-a|Nfi}H-bz~9#`z1-&Fl2769 zhRO)*gU%OZTfmn-JWfpD8`wpT{1o_8{f~A(YxXrFT;f$2_YqDzo9ChI$!gH&3A`^l zjiq(fi-6|YY{aWuheAFGr>m=~XXTEg8~l6q9d_gBcFU?RB12($|T46cTa2Rko4eA9F|b}V5Zb|Xmm;nMe_ z7SXuZT|){7OP63ynXmCwPd+@;m42VMU26Eu6&b~q4pr8JhgzP9nY^+H;-SbP!n{Cq z!dC%7qrf*W^)hVTS+6;OVoc0`AMhBJ^-@~2T`Pz507>#grA-Ht!0t=oiWz0gjr&2j zWKEpOa*T!Md(4PXK~-vq=%Fep4~Pg6DxGe$a|fkVSjT8STp1_uM*42O1Q4>q_I{Hf zD1_rEU@L2j^)5`r8Pc4Ie%)_upPf&m41Fr7x6TkHzw3LgAePN~j{|83)ph9W9@_|@ zxNO3ewwF}>EAA`fImw0TN|)R!7i6R%v?|K7dg#WT)p%BZ)?chC*Eq~QQ5-yYcBklu zFt*Is1)kGwn;L+MzjiyRtwS%ZTkW@QeB#^7TWzA94zD2$iOqHV(ZBR7<;>U*EGh9QwOM#%1V+v~&54p-0Zv$495eE*-kdo{DDZf6w{(g{h=s zD~t!}pGsYG^J_Ne9-u;>48e1r7TcVCOR$U;Zoib3D!fM*$e4?1QBx;#CG6y!xUZrF zBOh5$e+Hh`tM9Hb!%2NvlA%|p!C4pfxvLV^^d6)YnSbOke^N$(9zP-Z=^g4SKl!v( zktst|IG3^&N8t8y_EsM(WzKoLx(QkLYvmL*7Ql0gVu;PWMJ<2Yd#>lqDCT9FH$|-= z;N-9L(7(iuq0MckhWRILnH3%lsuQoD0vp3@7A@YQj|l;^mBalaHSXdUgu>`)#d4q; z<>s=|q>@wbvR98c8h0ANves!AEKEx>3)QPK-}CVOUQj=TZ4=ja1BL5f@$jNIifx5_ zSWCR348H@wgb}D&s@p{M9TpXXrx%pT8ZqCZ%|Z3`1ow^YckUTf59zZ&kSv5=Lz`Zx z>F$Waan0^r`_(6~7y@Sh?xbN6)}@I%JZ5Vy2D4(jTPj9p=VdlF#Bv3VHr+?Q4Mqpx zoPJ%_%>I?|uEo~a>JE6VuLoCTSgbGoc%GGz@#brkWrm*vxwb34|ALQt7Zkwz`8N-O zNg$!0mgn)>{{r>7&(GW@7$REfIXzP;-BAoZdw-Jf;m;*5~Q)VICXcH$J9Gj}5jtoXj1 zOoSpZ<0z~o>G6ljR1!TbS<(ZaOo=b*u{E`1+G~RQ_lVaODW)WrzdZ&Q^P^ZZCm0_< zrU@`*-=;Qzhf2;)Xs_CzFv4Np(or0~y#E8Eg7K1rN(uI|5*q7=Dab2WsBRxgGfzgS1EV~#&~=O^ePa`(~m zIvo3O11+nrtGu&9VNEShnm-TWX2FiAnxfUYv|o%@y=GWt)p>S7Vgu zbjm8_mqb$RTdSIG-4h$~#=NNLToW#5xiLION>x6YZUb%%BXKH928>hJW;)aE`hIz& zA&8e@6B8prsI!^+gU6B1Kt@Th-{wDbyb*gN1{wCPteaW((+9LeS5W*QuXrlz-8Tblb;eMfmos#=dPSek>^(h$9;@@3}E{Gz6a&mm-;sd1P`F3N+D1X=B zU&lkg*QmJ4A9v^T@g)}fgcLNxAOX=4IbUO8>D_Cz z`3ao7q_8lFW#-?zDr)n3AT(ad-3ETuG75(JT!bFNM8ktDB z@Erj|w$80$hhTqeq z&DD-m`wltpVF5q7_2AJ$00rVh6uDIRRF);+p)$5c9zC0gVnv01i*}rf`2Ed78fSCO z;U^K+w9M@p5qreKG715NGE|=o zdRg|6a_m$?t55U3fjvY&|Vp%a1XTn53=wtHk}%Z zXqwkT8sWgTiw`3I*D+O)-COOuK)LU#zLXwmb3y~96UhZkR`OSlGWW;U2pH*h^#Q^P z67;X3kLepNh>&s)+L2S;``AE<{%(IB2% zaGBkw@~vtVIyOPSzl#&5uDV|4+1bA}+OZ&_i7}M`XB*wS7#W}!fi?!2Y}L^{+V1}Z zXFs-bTwaKVsENNb??ymmi-ZHgr5b|bUv8*#+^hS~P0ViirGt&@kJO28QHOov<{y}Z zqO;*g))fSSS%!S7Q*m9CmsKS%%m(vSQ}0+w76mi6QNCu-13v*pUW;U8R?sOl|75ps!{w}mNC7yDx~M2EA@P~M}O&ET8@46m;Q36 zi_K0)78^5^69Dz0^w&UnYY6?Nw^JGjr69f-DeO>f+;^6dg}S4Ku|N!L1<`4 z|I)7I)j_odVAnQB&%^);!;CbE%_bJr3hC#Y}%6{N-tQ#CM-%|W25Vdk@| zalhq0R732I(<+$JGxOgd;$ypb*Nn}zg_rB!w~Xy$H6W#*bB+{*%PR(}r26|yd-x!gNWCZ1Uwp9J(x&eW1_yLW|CkMA zg84c^dQU+GBpiDiH=?rO8d@y8>egj>q6F6760g~_RG|?temU2IC(F`jJa`TYm9fop zCxFyhX^xSM9x%;aTNuiP4-s1}hA^Bgk+R{lBOWaxA>K7Gs>;KO#C&!ooQS0_RsA(m zf>xyFH@Bpi1p)?C?ZFKB6O^+#$*Co%4&n@PTf>9fG!8}jr$1?QEe z{Wn(_@I=R4A;BWs7IP=ZFnfYBxlyXn$o{srF(kHmRnx~FxqLO$8S-zlkscM!JQpGz zY9ESJ!J{Z!_>kEK|B)DKNV@ml)BnWy#BxBz->3g7TdY4RQXQnwJ&18lZaN_iQG3kC z@*h|y%1SO>8pyd6?*@XA9KZ?%7|+(}#@v6?UABaPd@%TlfP%E3PTmr_b9&^$_w6CX zmSzieTeE+kfFW0#wKGIG5Qabh6u7&?m|5z8t+Z)+Oo5t16v;RYqOz*zI+Dbi#pd=} zTRr>5LVn|it0rRm52%Fp3 zu3W(nL^3n$7_*Yt2D_-)*5cB}#Zv1kk|)K19{+fK;2r750j>~!G}@c51gRH3zBisqKv4GW2En-pwYMs4st>5w5Vuo znr{pPVaBm>9$lFGvy3$7ncA)#K)}(X7$c&}Q@-(Fe!tl?JG&p1BN65@KLK%ft&Z*B-You%- z8i8yoTG{m9JKqE6Z+e|;TOYLN+L1ezyfUnc%tep^#(lyqQb(q<|J{}skWh2KeWW0wBTs{?2EM_0$@ueNU}8Oj z5WB1l?j8~J0SdSL9O z>~(YxjL+Fab+wbk$0Se`OE;f;p1xj9j#`D4BNIiZd`sY&Fw@67ESJH-D$i4YgLZ}q zVbK7(u>j~+c;sMgpLpZ$?{(#8<**mz)0(dkEYcT6p&tRuiB7G${l(EG;XOmsUmOgT z^<^XE1%DZ`;MJg-haw*a+s%c4V2TH(m-t{!CTLF$ka6HThX0<7N}N-7>d(&$G8H(|h%)DgYEbdV zfjE+fRuS@3}C3G@Kb8VY(K7L(=9ojp~D7jfwDCygm z31WY!Q(wQ2G8nawU6SnzX`Acc3#?VogYez#O+fYM1JBnSbMs2O9(=XBP#Kl?nmj7hF0+DcDOe`bS;M>coxGSI-G5r zira=2v|Cyi-m<(nN&AON7c}U~(KwjQBU4irpPz~J(%QiwkwE?Gi&RYI~OYSq!*9WF-{4ad!k1I z0pc{^+p4OetaS!tb7s+k0(tk_TM2dPKV07bNf!lvzxt-ffV|z!zxD|@<<&Jyb}0MK z5eh8jNA3-jr7}Xtd*s)d?7lyosA2Yg(RS}WfyqGO#8Zz-_XkV%3obJ3@=UUKA~zvYvfcT03=PYj1Ysj!9iV)NV>1J zs~`#P=Tf;;J1cK>4v{isZa&pY@gL!r3J)b_v34ayzO?+;$QNSl(Uve9=`-@d8kO{K zth`^@2Hi=%JX#~bbOlA5^!AI+vcxW#p(1#&Dh?gX{5jW?o!0llG_5>g#@_yRq}R*) z;m}bgy;M!+!k;Skp6^3amMQ{Ap!_okPbU2E1H-t~HOAqy9S0b?$_f}V7q)AT{;i7Z z{(D@=U)v;jd^hgBXdrMe;rpXZ-7>7aY2BdF%&(vsfpmYy1!I(U2Qey!Hg2B@SlOyU zc^Vf;@azN3pMRLLzNF)T584ovG1A9w=CKF)`~-Za-!ubJ*dnBGnP)a^c`~O|YY2>O zFLd5!xbw$PMBec<0;wA*bOi4UbFXXu7op)P30#v0kEzaMNc}*^7>giyY6cbek%9yX%*Bx3un}E12-Gy?z&m=mV=QI5IQDgvUF3}^NRnqmZP$MEOD6Hsu89!IEm`6 zZ4`s{XPZPM53Q^Zi67X#d{00}Om6cd+9@me(}lYnh9D{N=5<1lF1uM+W{1eJ=vRWk z)P#sP34<$Qb7gie%0RbsXK}`Vnvq<7kk_R*r&k@-oN<|pr6>zv(>>|m%PV`*)Rc6e zws(XV-6nbBKMfX;S>_1FCm3Y^f@`(&5RHMOS5KZQ5! z&YwV~|2`lP;mTjkf&=M9n6ZG=H)+Mmfts{{5c+FyPGH{XHRX>ZSB9jWIoLD82n0C8 ze&&-!VQ=j4EyD6ggsm33otOi|wd+hlEQnwSQi8{C?ebdU2TgvmR)#riYK4<@zTcBL)tFm^c!@Azz; zi6?ZNJB^*RV1_k+4t91JsZ`wPuVH=@evi$fg32p2ziFBO=n3$8B*C)DG&QQ zzn9CIvApPi_Z^}+ql0!Rtw07^YKY1itAFw~Y_DC$(94>q{uu?@gat8A_Edy9h7BP< zJmH=Jhhjhbzs$^5sHk+&mbs!m31PYJ-XoS-_^Y+?&sy^9^}W`fv&h;;gNpt<^l%jv zo?qi`T7Ry(o&)f|6Ozp56y$-Y_wCqMwf4z5&Vk<8ohRW_TEupQDs@v<1BjN)y1B7N z*2I18QRR^IlLfkCtGx4XYTi}j*gFiq!vxVQJVh>I!z6qznX)YwGwE8=YrJWHxoY`N ze!PVAxrDxW<-i&{`Alh@ijG_Dmuq5bBKrUKoqHU1Rf3Ude)2ysgXS-oA<;Skv$Ph= zzC}KM%5z6DmyzykM^d*FVKd_d*v)Q1?vK!~)Ca8~sE@puAsG^%gt75?_=Nu_)Vgj| zSb(2GcoN&OI{%lEFw;%PoeynjsH$sI_^CajlmQhij$(ZI1D6R{CnA)V$%;3S43})$ z2*@L{Ixd*O|EyHJ5ulpY5}b5x!sk-gp$>Mb|B#S$uq*y|JP4d>%2t_YA$F)s_r!wX z+c(_H;G^px?aX*`5$%gn!nlAmASqz;jC~)iPr8Gzc6-gsbOvOY`R`$85O6T9Y5V3d z0Rh?^8vUJ7WpM^i>GQ+_MZh3{4>>%A1#tgi#Z2n`v!ImzkPGs&O}U*FQ1n2w^Dsg* zK`yG2x%~$u)3soVvy=mr)7Ozd`<(zS#W^_)AYne=g&+=aR{k3wWNesE{-}D6&~?oP zCUJukK^C3lsJowdn948KQ|N?-ybLBwz95v>A)-*r5*8AMO>DXvH~8+-wrlAi@2Y1l zBh`JV<*u;f%qPc=`j|sD&uo&i3U1cYqey-^Ls${#ttVDc#p!7fSgqw4K>BC=58W*k z{WFbIynp@U0S;N^5ktwUCI-9Vx*SoCmt)7?e86$SxHzbr`!xIUvWx&H zbl$9zcG?tJ+ngXxUs6p3dhR)H&7!1@GGt-3jQMs7Q;5L@m^DIjqiz~%3%t!|!J2(v zez}g`d#5AX#3~z&DB=WNKDax5zr*I%!T04s$KAG-)MA0d)32VDk%sy;-GDqqQ@+qf zIaiJIN@j1D0!!z#NpskNay3CkMIL{)KduX0QtqUk*ki1x8G!zE)sVR-QiuquF9)IH zIQ>`jK^`9X2DT6raP{z5MDQGVn_Nh!A_Y>Ljyp0^jG(SrA?bkdVLAxsM#VOm;|E!1>x8c9E*V}wdt*enSE2`ur6tt_k5xEkM ze_>ho4+K~?5(9F#>I0(ujVLw-ykLs_f%Ta^Bw2U-km%piL+dIWPN4y%2V~Lg26giS z(5(OnSnU75R4Fk4EuYwWo9^{?7JUDEZ`a%>L}l4A>o9`;%^<0B`k^!bvCP+1fTV5OGstw`tQSHcJI>M5n^iNHKV+ZaX}$mX#+~mW z?UJk0T4j9xEBv8)1=BZgL{9j4UhF8yBuw2E4P7RJ7C=}+IuaP>=EBnuxcB4@Bl#S1yRcUt!ZQ^b-TkKK;JbL$SN97hd)1rWqQj9IsJx%kpUIrUMEN=647lu<%* z<(J1=J=dq7W&U0c56nX3F&tNF(E=Z2XOeHNIEwSwSs{ixH_p~wGzJMCB|QcUThCAQ z{?1C8raGOeRfX4&^Q+g)s8*m&IpGbHcMhn&buB^K5Jsl5xHGRcZGzPGAI`ff7U9!A_s6%FU{Mz31#X z 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

    Tk2vd|t!(3l;@2!_D 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 L=XD?JI7R;lTQQ~U literal 23785 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 { - rto->allowUpdatesOTA = false; // need to initialize for wifiLoop() - wifiInit(); - webSocket.begin(); // Websocket for interaction - serverInit(); - - #ifdef HAVE_PINGER_LIBRARY - // pinger library - pinger.OnReceive([](const PingerResponse &response) { - if (response.ReceivedResponse) { - _DBGF( - PSTR("Reply from %s: time=%lums\n"), - response.DestIPAddress.toString().c_str(), - response.ResponseTime); - - pingLastTime = millis() - 900; // produce a fast stream of pings if connection is good - } else { - _DBGN(F("Request timed out.")); - } - - // Return true to continue the ping sequence. - // If current event returns false, the ping sequence is interrupted. - return true; - }); - - pinger.OnEnd([](const PingerResponse &response) { - // detailed info not necessary - return true; - }); - #endif // HAVE_PINGER_LIBRARY - rto->webServerStarted = true; - } else { - wifiDisable(); - } - #ifdef HAVE_PINGER_LIBRARY pingLastTime = millis(); #endif loadDefaultUserOptions(); - // globalDelay = 0; - rto->allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface rto->enableDebugPings = false; rto->autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing @@ -167,8 +132,7 @@ void setup() rto->phaseADC = 16; rto->phaseSP = 16; rto->failRetryAttempts = 0; - // rto->presetID = OutputBypass; - rto->resolutionID = Output240p; + uopt->resolutionID = Output240p; rto->isCustomPreset = false; rto->HPLLState = 0; rto->motionAdaptiveDeinterlaceActive = false; @@ -211,17 +175,45 @@ void setup() adco->g_off = 0; adco->b_off = 0; - // serialCommand = '@'; // ASCII @ = 0 - // userCommand = '@'; - pinMode(DEBUG_IN_PIN, INPUT); pinMode(LED_BUILTIN, OUTPUT); LEDON; // enable the LED, lets users know the board is starting up - // Serial.setDebugOutput(true); // if you want simple wifi debug info + if (rto->webServerEnabled) { + wifiInit(); + webSocket.begin(); + serverInit(); + + #ifdef HAVE_PINGER_LIBRARY + // pinger library + pinger.OnReceive([](const PingerResponse &response) { + if (response.ReceivedResponse) { + _DBGF( + PSTR("Reply from %s: time=%lums\n"), + response.DestIPAddress.toString().c_str(), + response.ResponseTime); + + pingLastTime = millis() - 900; // produce a fast stream of pings if connection is good + } else { + _DBGN(F("Request timed out.")); + } + + // Return true to continue the ping sequence. + // If current event returns false, the ping sequence is interrupted. + return true; + }); + + pinger.OnEnd([](const PingerResponse &response) { + // detailed info not necessary + return true; + }); + #endif // HAVE_PINGER_LIBRARY + rto->webServerStarted = true; + } else { + wifiDisable(); + } // delay 1 of 2 - unsigned long initDelay = millis(); // upped from < 500 to < 1500, allows more time for wifi and GBS startup while (millis() - initDelay < 1500) { display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); @@ -248,77 +240,21 @@ void setup() saveUserPrefs(); // if this fails, there must be a data problem } else { // !############################### - // ! preferencesv2.txt structure + // ! prefs.dat structure // !############################### - // on a fresh / data not formatted yet MCU: userprefs.txt open ok //result = 207 - // uopt->presetPreference = (OutputResolution)(f.read() - '0'); // #1 - // if (uopt->presetPreference > 10) - // uopt->presetPreference = Output960P; // fresh data ? - uopt->presetSlot = lowByte(f.read()); - + uopt->slotID = f.read(); uopt->wantOutputComponent = f.read(); - // if (uopt->wantOutputComponent > 1) - // uopt->wantOutputComponent = 0; - uopt->preferScalingRgbhv = f.read(); - // if (uopt->preferScalingRgbhv > 1) - // uopt->preferScalingRgbhv = 1; - uopt->enableCalibrationADC = f.read(); // #17 - // if (uopt->enableCalibrationADC > 1) - // uopt->enableCalibrationADC = 1; - uopt->disableExternalClockGenerator = f.read(); // #19 - // if (uopt->disableExternalClockGenerator > 1) - // uopt->disableExternalClockGenerator = 0; - - // @sk: the commented options were merged with/moved to slots - // uopt->enableFrameTimeLock = (uint8_t)(f.read() - '0'); - // if (uopt->enableFrameTimeLock > 1) - // uopt->enableFrameTimeLock = 0; - // uopt->frameTimeLockMethod = (uint8_t)(f.read() - '0'); - // if (uopt->frameTimeLockMethod > 1) - // uopt->frameTimeLockMethod = 0; - // uopt->enableAutoGain = (uint8_t)(f.read() - '0'); - // if (uopt->enableAutoGain > 1) - // uopt->enableAutoGain = 0; - // uopt->wantPeaking = (uint8_t)(f.read() - '0'); - // if (uopt->wantPeaking > 1) - // uopt->wantPeaking = 1; - // uopt->wantScanlines = (uint8_t)(f.read() - '0'); - // if (uopt->wantScanlines > 1) - // uopt->wantScanlines = 0; - // uopt->deintMode = (uint8_t)(f.read() - '0'); - // if (uopt->deintMode > 2) - // uopt->deintMode = 0; - // uopt->wantVdsLineFilter = (uint8_t)(f.read() - '0'); - // if (uopt->wantVdsLineFilter > 1) - // uopt->wantVdsLineFilter = 0; - // uopt->wantTap6 = (uint8_t)(f.read() - '0'); - // if (uopt->wantTap6 > 1) - // uopt->wantTap6 = 1; - // uopt->PalForce60 = (uint8_t)(f.read() - '0'); - // if (uopt->PalForce60 > 1) - // uopt->PalForce60 = 0; - // uopt->matchPresetSource = (uint8_t)(f.read() - '0'); // #14 - // if (uopt->matchPresetSource > 1) - // uopt->matchPresetSource = 1; - // uopt->wantStepResponse = (uint8_t)(f.read() - '0'); // #15 - // if (uopt->wantStepResponse > 1) - // uopt->wantStepResponse = 1; - // uopt->wantFullHeight = (uint8_t)(f.read() - '0'); // #16 - // if (uopt->wantFullHeight > 1) - // uopt->wantFullHeight = 1; - // uopt->scanlineStrength = (uint8_t)(f.read() - '0'); // #18 - // if (uopt->scanlineStrength > 0x60) - // uopt->enableCalibrationADC = 0x30; f.close(); } } GBS::PAD_CKIN_ENZ::write(1); // disable to prevent startup spike damage - externalClockGenDetectAndInitialize(); + if(externalClockGenDetectAndInitialize() == -1) + retryExtClockDetect = true; // library may change i2c clock or pins, so restart startWire(); GBS::STATUS_00::read(); @@ -333,24 +269,16 @@ void setup() delay(1); } - // if (WiFi.status() == WL_CONNECTED) { - // // nothing - // } else if (WiFi.SSID().length() == 0) { - // _WSN(ap_info_string); - // } else { - // _WSN(F("(WiFi): still connecting..")); - // WiFi.reconnect(); // only valid for station class (ok here) - // } - // dummy commands GBS::STATUS_00::read(); GBS::STATUS_00::read(); GBS::STATUS_00::read(); - bool powerOrWireIssue = 0; + // check board vitals if (!checkBoardPower()) { + int i = 0; stopWire(); // sets pinmodes SDA, SCL to INPUT - for (int i = 0; i < 40; i++) { + while (i < 40) { // I2C SDA probably stuck, attempt recovery (max attempts in tests was around 10) startWire(); GBS::STATUS_00::read(); @@ -363,6 +291,7 @@ void setup() if ((i % 7) == 0) { delay(1); } + i++; } // restart and dummy @@ -379,31 +308,31 @@ void setup() } else { // recover success rto->syncWatcherEnabled = true; rto->boardHasPower = true; - _WSN(F("recovered")); + _DBGN(F("recovered")); } } if (powerOrWireIssue == 0) { // second init, in cases where i2c got stuck earlier but has recovered // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running - if (!rto->extClockGenDetected) { + if (!rto->extClockGenDetected && retryExtClockDetect) { externalClockGenDetectAndInitialize(); } if (rto->extClockGenDetected == 1) { - _WSN(F("ext clockgen detected")); + _DBGN(F("ext clockgen detected")); } else { - _WSN(F("no ext clockgen")); + _DBGN(F("no ext clockgen")); } zeroAll(); setResetParameters(); prepareSyncProcessor(); - // preferencesv2.txt data loaded, load current slot - slotLoad(uopt->presetSlot); + // prefs data loaded, load current slot + slotLoad(uopt->slotID); uint8_t productId = GBS::CHIP_ID_PRODUCT::read(); uint8_t revisionId = GBS::CHIP_ID_REVISION::read(); - _WSF(PSTR("Chip ID: 0x%02X 0x%02X\n"), productId, revisionId); + _DBGF(PSTR("Chip ID: 0x%02X 0x%02X\n"), productId, revisionId); if (uopt->enableCalibrationADC) { // enabled by default @@ -412,9 +341,7 @@ void setup() // FIXME double reset? // setResetParameters(); - // delay(4); // help wifi (presets are unloaded now) - wifiLoop(1); - // delay(4); + // wifiLoop(1); // startup reliability test routine /*rto->videoStandardInput = 1; @@ -494,14 +421,12 @@ void loop() } } lastVsyncLock = millis(); -_DBGN(F("6")); } if (rto->syncWatcherEnabled && rto->boardHasPower) { if ((millis() - lastTimeInterruptClear) > 3000) { GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD GBS::INTERRUPT_CONTROL_00::write(0x00); lastTimeInterruptClear = millis(); -_DBGN(F("7")); } } // information mode @@ -545,7 +470,6 @@ _DBGN(F("7")); GBS::PAD_BOUT_EN::write(debugPinBackup); // debug output pin back on } } -_DBGN(F("9")); } // init frame sync + besthtotal routine if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { @@ -557,7 +481,6 @@ _DBGN(F("9")); if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { runAutoBestHTotal(); } -_DBGN(F("10")); } } } @@ -575,7 +498,6 @@ _DBGN(F("10")); } } } -_DBGN(F("11")); } } // don't exclude modes 13 / 14 / 15 (rgbhv bypass) @@ -587,7 +509,6 @@ _DBGN(F("11")); GBS::SP_NO_CLAMP_REG::write(0); } } -_DBGN(F("12")); } // later stage post preset adjustments if ((rto->applyPresetDoneStage == 1) && @@ -622,7 +543,6 @@ _DBGN(F("12")); } rto->applyPresetDoneStage = 0; } -_DBGN(F("13")); } else if (rto->applyPresetDoneStage == 1 && (rto->continousStableCounter > 35)) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance @@ -633,12 +553,10 @@ _DBGN(F("13")); // sync clocks now externalClockGenSyncInOutRate(); rto->applyPresetDoneStage = 0; // timeout -_DBGN(F("13.5")); } if (rto->applyPresetDoneStage == 10) { rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutModeHdBypass(false); -_DBGN(F("14")); } if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { @@ -660,7 +578,6 @@ _DBGN(F("14")); rto->currentLevelSOG = 6; GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); } -_DBGN(F("15")); } } // has the GBS board lost power? // check at 2 points, in case one doesn't register @@ -675,7 +592,6 @@ _DBGN(F("15")); } else { rto->noSyncCounter = 63; // avoid checking twice } -_DBGN(F("16")); } // power good now? // added syncWatcherEnabled check to enable passive mode // (passive mode = watching OFW without interrupting) @@ -699,7 +615,6 @@ _DBGN(F("16")); delay(100); goLowPowerWithInputDetection(); } -_DBGN(F("17")); } } #ifdef HAVE_PINGER_LIBRARY diff --git a/package.json b/package.json index 83a69932..6f496872 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,23 @@ { "name": "gbscontrol-webui", - "version": "1.1.0", + "version": "1.2.0", "description": "gbscontrol-webui", "scripts": { "watch": "tsc --project ./tsconfig.json --watch", "build": "tsc --project ./tsconfig.json && cd ./public/scripts && node ./build.js && ./html2h.sh" }, + "prettier": { + "trailingComma": "es5", + "tabWidth": 4, + "tabs": false, + "semi": false, + "bracketSpacing": true, + "singleQuote": true, + "bracketSameLine": true, + "requirePragma": false, + "insertPragma": false, + "proseWrap": "preserve" + }, "author": "", "license": "GNU", "devDependencies": { diff --git a/public/assets/fonts/FreeSans.ttf b/public/assets/fonts/FreeSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9db958532c12ef7f4aa22fab57a0f71e82acdd38 GIT binary patch literal 714456 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

    YoY{Tps(}N873!pmd$-^|tLKtcQ|SKo^_N|G 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 )r+_%USi1dhK+UkOZ?7=*O+WA-{?*j zysXsaRP{@PbLTp$JcUi;JwwL4MSa>Yl5UrjwKgxldKJkh@I#*`-3pt7)?`zCg{z9u zNyfA-4Kd|vH@e{P;|zh*Wet-t2-P4S4cbys~OH||pG zuH3=mi}Ou2zZLxxn?3o;8LUUA-k03ykBpA0=Bn#4Z0ghHXxP`@y>ni&Yg6m|vmUUl zZ=X>m&JKKUzxI>u?h{0=?Wf!Fa-k%-Ps9fCvb2}2b|HQx-pukj zs-HD-y0Bh8#P>?+yi2=aX$<`tjs^Zz)a_lDmY5u$k(`dF!8muU_ zn@kpSJ+5+0mE}%xF4D#saa-#CXV!8!?T)lUBfW|X{e-EZbW6xx zVZ+BDY{!?@7LLz18DkxGabDAtYxn{NNt ztk*zKx~Rquu(`=^Re+a7diVNm@dY&@Ydb z&FG6FXKvn*_SrKF?f))IY7b%6y(qqeHI|etN8giT-4;ly?qEDBz7s3=C1L?TcIwhP z)IUztiRh(|>vZ`|%XJoAXzC@PJoOP!WsEacGuAR`F}{Er!b!Z|+2_yXfgjBhi(!}vRX@?8%9p2P2P_FW~qwjv43h#MB@0 z%t8)NGA?FZ!gvDLVjGuj597s*moQ$+cp2lBj8`%4W8BYpHRCrJujjhl#JS(hcnjmL zjJGk~&Ugpoom|tqID9wbw;8{~_8FKjQ<84>CT)_%PS>5yl@eKFatQ zr|<;hQ=I0H8J}hR377mi#^<>_FL3xJ#+Nzf6>i&C`T1WnzQOo5Kl2Xb?>OdN4*#CR z?{WBj3WHe~10tI-m$86;6@^rC@QcDl9JX@U#$h{$9ULy>x7>^#PSelf0Ef#t9OQ6_ z-wJaKk4#ZP?I7ZeNyaM18pcNIHPOV+^T-76FfzeADl?Bv@Q%VA9N$Ud+!n?m$`M?n zm_;1s(UrS|!>gzyxvTltH5^{c;XhH1xgStC?=u>Kd4FR(Kxnoy+UR*O5zl~$gl{sw z1q_3OF9As|g~34zhd5qlR2gH8)r_@__53_(nJ}10NOC3&CK8gC31gj-um?2_L(35M zG0x+6iG5)mu`jF}#;6E`ee}!%{&kGQYP)hu^0#GcL@G3kzagSQIc8QaQmmiYel- zmBTg;+d1sua2b_cxEVd1rk}$B4wrK{$YIiPxNCvKq~pS19KB0+PFN%vs~Bq-Nz;Xy zaX44SVIG0ZxG)$;zY^oZU>t>sabad$ICqG00ppM|7)Rm79A3g<(r#fej^atXg>%<( zn6z7%85d^8g_&{TJYrlJj6-T>8zC5ncfmNqHyPgo%3$2Pz#>MHFfvZ zN7_)qu}o%`$vR@0tRt4mI%1iuBbLcJVwtQXO(*L})5$v0bh3^#oveF| z>-z-blUz>Hce3tj4wKfCb zQPz=OlXdSgl3tUUWiqo&W|qld8O0OJWVRb+W|=H#jLCvnCJVA5WkD>H1+h#9%g|G> zBq>amq%26U$$~6N924R&k2{ zy+wLW2FoZ+ER(@93KPp@W|<6@As4nGW!7sl+mJHrH5oP}o(Ie58PaPqSVm!DnGBX8 zN3aa>U>V^7LgtqYe&I>*i||dxw}1-sOJRN~>@g|KFNOJqz3o#!#WQiFj9aw$d19FY zmc0ukjixZm6lR$MmeKRXG6gK7a1Yu<(UEPb=*YHIU|Uj{besa-(XaD3OrDei-VqLS z%n1KV7N!FBQ9Q9v0sH9PiK(}M#6E@Dr+|I*E3r=j`{;RMp91z#dC0d?bmuUVZ>8vV zGoHst9+sjb_9B;*T?`M2~@j=Fi7$4>~d4%ytjE^!BLlx*j zLh|4g-BXiz!SjR={Ek6N?qFn8IcJ zmYYT+vseL(DNHO@z+ws$ixok-Qej=GfW;K9pq2rP36qRfj5UnJVue|(FpCwi7^8x{ zLIo_QFnNUvSWIE^3Kg)JaENNh)~UiQR={GEgjuYxC#bNlR9IIktSc2}vBE4?n8gaS zSYZ|`%wmPLq{3QKVJ)fHNJ~c83XOoduOUqSV1zYe1kC*iVe$$i>=j19+?Nn;;CQk{ zBh1_gnENim#M}s&OW_{IUdCCdQ3TATc=8G(U@jqP%m~kcM3}h|F!wFQkZ%~#jq+RM z8%CJ95ipm+6H~tcF62^8GLnrN0duLG#M}rtOEF}ZM!;D@vP&c2EFsyY5gpm35pb5C zCyg0ljTvE$8DWhXfyShG@*gAMEFt-i5pb4}{Kp7$HUiF4YBw|9!gwp=ZH%`w-obb$ z<6Vq*Gk%-#JB;6FB+f>_S!#{@81H9%fbl`bhZrB`)_8>RM~sg$KE^3L!T2Pn`4r>R zj6Y^1+clzlmXSQl2slglJjakn83AVrU*?!sxJO>)@UI!)U?h(+0?rctj$_E9jDWM0 z{(BsLpTf-92y-^VoQ;69coLjNP1&Q2fU^`Pk1_(zQkXo-2slgOGET=$BaJy50cR;p zoQ;696ei9_z*)jDKTq>`5pWhG2b?8LGFCCxFcN1Y;4I}unl}Q@QkiKcCj!n=m^d2& zXDLjajWA~;ta&5gEZ$FFY$NpJ_n;EG_QSg*vs76ud zX%rfk!o<@kcuJ{}WgBIlM!{1G52CbD@RX2v8U;`3E#hgEHEa|-rFY4`je@82Bx%?v zYuG3>Ed5FvHVU57uP1N{+c->CZWNp)Jcp62+$cCpNLFqXoFyb*GRmBdGH0XA*(h^1 z3eM863M-e8I2+XwXQR-wl>6O` z-)8&{Da@l9Jf*jIRD-7!CZ0yYQ-r}&LYf1K zf~P10cuGiGBMP1pl5HGit2hdMN@22!qwqBG7IY|5U`sg4mT;6U;V5|e5%$cJr>U|f ztU{l@hA_z-6$~XLhN|Eug~DtnqL+qx=ynksWpWe%#) zn^XqkpvoLnnS(0Zx+-%}We%#$L6teEvZtxCt*f%FtFo=DvaPGKt*f%$RN2#1+0#_n z(^T2hRN2#1+0#_n(^T2hRN2#1+0#_n(^T2hRN2#1+0#_n(^T2hRN2#1+0#_n(^Q#X zD)UPPzo=E8=Gy(3!^AHYI+5bZj#b%?RoQ}7*@9Ks(^T0;RoT;2*+x~t9eSQ@R2AF- zf;$)$>}jgt4u#3nRN2#1*+x~_(^SD7iYHG~1$QV+o~8=!P?$VTmGzy}jgdcNhcgX{zjLs_bd1%p;Zcoywl3%ATgmo~Fv4rplhC z%ATgmo~FwBPGwJ1Wqqfzr>U~OQ`ys0nN2EtnksWjWgAsxPN{68s%)dGY@@1dqpHj= zmHDMIzf|T|j5!qpr~Zi5d6khk6$7Uzrk1fD(k2E@9RQLZkAYK!#HkoKMM#{AvDS-0 z>wSdqEXLXBof!L-G1hu9=2wjQ6$8KMNz!*Q=sOCNT^a++2+5<2fn}8PLjHAIxfaKE(U&4Jn6U?>$n(n9F>#o(in6cA=#xd9oeNZ9oeNZ=3opQ zq$lrVyr1y_#s?W6Vtkl$e}wTzjE^!t#=kznNIEXYIxfZ>jIoZ3@oZ0w?a~-HNHu+q z@p*ph1rEQ&_%g@5!bo;$OhIxYsDQkZmHjCmSkp2nD` zG4K?>f~Tk{cuL_S4qG`)vyL(Fl;Ry6F5`6EGy=g>O4HBb0Ef#t9OQ6_Mhp9rG4Pba zw6+)nPYG#lF$SIz(h6e?JS8M6E(V@bn8!2oG{!uQF;8R6(-`wK#ypL&zKemUC>3~$ zQh}!wUc%v3lso&9G4PbaH18S%Pmv3FiX7QzjIqxcW1lg`K4YAH#yI%+E_Tt86&hz9 z7Y83HO!jA-=Xv6+-Quj>;$Y%Sh$rn92NMZth9}NUjDv}vB0L-U#=${~C(AR=9%7t5 z#5kBp@#G=K!9;qVm>6e$7iSK}!9j|l^@}((9pyqEbew&|IQxci_6_6g8^+l;jI(bT zXWuZ+zG0m0%s6u}&K!(02jk4aINO1}R zad423=5ylUAR*1?#F>L}aFA+8Ym0GkknlT<-)AJ>Fb)pV^Y<~{&-ei2gNzR`5(neZ zgM`GvIP@SPt!u=2T_X-XNMV}KiGza_rum#WI7nfd&xy008D~2)4&RWv%V&_lU{gA^v;FwXNian_Y_W?Y;Z7iY%BnQ?Ju zT%0vy9E_uP$rFr&afGBn;$R$w$rFr&aTF#`FwUM}oHb({jKjOE8RK9ag~=0)vj&WV zS?}V0xI(;@;1&4<>_!UH%u)huA|&mW0GlXW%SdxC3D#T*@P&Sz1uiGpUrX@3N`f_4 z0<1ZJc$yJSFl!QE%`Xrp{gnV~=q;KNO)zT`Jg<^q?j)Ey3Fc0MXG9asodk0y0e_9k zu#Ml{!(q};31&xv*^yv&B)|@O@+!uCjQbg{X8Z;t>81qhrUdJz1nZ^*>!t+jrUdJz z1b9KYkpGon|0@ArP?-F$1auQ2@gf0UP)+Y+yr1y_#s?W6VkBN9m=_7=MS^*eU|uAc z7YWu%3D!pm)anDPwwZ zkpxpHEaUkkm_iss`bjW_!nKSv?~!ERDhcgFZ_y5cB=im;`BO=r@ksKFN0MhIlgywb zdss%wG6~iYE@3=@^Ci|Kp;HJi z<}%YdcoM83q;>ElSVOPQC z_M4LIHzj%QBFT1LlI^-A+jU8{>ym8OC7C-(aEIzh^NmTKyGZifMUv+(l00{jgl|P< zBb}0D?j)HzNpOc^XudJYUR4s@p%RiOl>~Pv{y9dPsYpVD{6CW3<+ri*Joi)&8VGhb z&gme?;J_W=Byl{*K_FP9$QCa_22~}g3Lr#PB$X&~7CR&T37YVJ6-hz7fM}qI;!P!z zK*JKng1xtab6ndFoW?ec4Z{W4JMgK**k@3aJxEPF=<__ko;>)lcwf)+d*5$;YmxL8 zuP$z~QnATO#imv&e5+@1o6O=ib+qOCcy)1;qpeM` zQPn17ZK|i}nZ=jxDZVroU)GOS@ntn%oA9*>Uz_l?313^{>%G1O?z7}u%i&@;3X!3StaofZ0oc*-L=gOF+r-cF$M> z)Y||vmH_ko05g^VRX4y9cYt~uU_CiNjSXmK;&*<*t7Op}nnw$05iOx*w8H!M945dV zCcqpfz#Jx^YV1$fLAz)V_4N_~RtM}gi39tB;@#lPpqlKl=Q9D-WRE?c38*G}?DKN|$P~)wBA5 zYO?h&P#;+b#Fy2_qyc950jhC;Y8;>%2dKsYj;RCi6%b$AS5)JG`106u`+)fJ*mL^; zl{vuNKET{Qz|nMoxqX16>3~?%>xwn2kDvo$O`n3)F%8!N85L8@+$ zsvD&02C2G1s%{XPg3uJC>gs=4^~^!4Zjh=Qr0NE#xIOy1H@d&8Zjh=Q zTwWt z7v5GLtUl+ytvpy=^S6};kK>FVasMaUpWDoAw^d#JJiZomn>p>aa^kT&#Wr)=ZPK#M z%yyg1Y^%olR^3!an;N@Kjons_ z^|N)*F4{x;=m7OKY1_)1?>R!p=medjGt^gpZZqTER*m)8SH*0r##((<%(iN*^$zun zcbggSHZ$IBX1v?Xc(aF#6sIMU1R=u_UEBbHf@2%p(`bX#| z=zl;x2i{h_^{t)*Z>!#V>^bnZ>aE9~18>98HXLoM-g>*|Fx#rP9(yLUtvRsA-)8I? z!Z!7Gn|ixVz1^nXZc}f!Sy9>6?AMPXz2eJ{im`?CiZ9=)U&oUEoyX$KN><@(TUFOv zJh$0a)%Exv7=Iu2`SfkgggLj1(+Dxs2r-ukF_#E2iwH4)2vOlfRCxUW zk{`v)A*7ju-WxNAkdo}NXAU7H*<;TfLQ1m7?g$|zSzai^*1teK4-c^dAEGaWlwQ4m zrPt~+Wg(^4>T5DXq&KAW`q`Y`5Zxg}cL>oPLUe}^-62GG2+eZE7>p%F_ zS#=N5BSNgYhtw(b%u26bg?;kJuDVJ zX#AAzp2LTk!-tu}hsA@MTuf`0E3#+fj42uh^uf`0E3#(UJ!pvd9%wfXJVZzK|!mPA}S!oHg(h_E+CCo}o zn3a~WxbSCx#q*5NF*-q~sJ{mn);!1RxqXA}nobgW?|BSKMUc#)sgqi1u zS$hey_7Y~EA7-8(W}Y8ro*!nOA7b1*-T*IvTvJJx?ge{U77);~f&LA~}8 zW}Y8r?Ip}SU*F1PyXW~~(dzqno*x#i9{-={pP^oR39Ii|z4j7T-?9Fcvq8rR({aLd zoG=|HOved}S$PMuVKM75d1js;7PEdH&-24#*6MkFn0bC!%qoFm)>~Yq!y?z3LBHo$ z7qiy?;b(@~un3hGB2@Pjp}JLsT7QdvCEbD09SGfl&>a!_R@=Suzav7eo&oM~HP?;^ z^%k%H?}$)qRPSv^JX#;I<%#y*j^=xQ)E-;R;||BvJL*k-{v>+Ht7wm{f>j3pp_6|qcJ38X<*hkqrI^wYUD0@dFT3@qI zZW+(f1-e9kfZp-0?isJp2Xu|TL4Sz;2>lfO4E6O|JCL{oi8~_EpV3F$JL-BK`-po- zz0YGGaqn;jVMio-{Lj2YpF!9WiPm4R<(GKzE4KU^{SE3f2sLczQk!bZ1_l`)k z`iOf+B}Uq4Y^ZyBY!Y`w zqQ@q22NHKgqPO^ZtsRkQ_4QgiBGKx;xg+|NSkdQqMS4Y_$G%2uNAzhd`mDZ&e@FD` zvCy|8`aCv$JL;QyHt5@dyB)aO;h1^{?snjA2kv&%89(S>2s|5%z+D9HB5)Uhy9nGx z;4T7p5x9%MT?FnTa2J8Q2;4=qiuI+Q)7(YiEB zE}{B zE&_KExQoDD1nwem7lFG7+(qCn0(TL(i@;q3?jmp(fx8IYMc^(1cM-UYz+F__z0<#2 zxaLH~oyYEUQHYB|Tol%#uoi{2sQ7xX`*@xiWtBL}JTuA}x~TZ_tv<&c6=lAUD@K&r zW|Y}xl-XvK*=AIfebB8ZJj%1ps3`L@_#Ayyl=)VlqmMG%j6zwI*=7`WqOcQ%oha-? zVJ8YZQP_#XP84>cuoH!ysMzr{kI*qXL8qv%zlw?-t7nf|#bbA< zD09Uqq(qr3Mj<6CQohu!?od(Yicyi`N12qUNRfk(5)~;PyF*1qipPJ&EBf4Al(}M5 zq+4D09Lnv%x5{!6>uAC|pFvg`N{GqT<5i@AQOAKCO@Dig##h@kzH8H4((V=2= zs2Ck8Mu&>gp<;BX7#%7`hlg zp<;BX80^I8P%%1Gj1Co}L&fM&F*;O?4i%$A#h@$(Wicp=L0JsSVo(-?vKW-bpezPu zF(`}Cp<;BX7#%7`hlgp<;BX z7#%7`hlgp<;BX7#%7GcQLq& z(V=2=s2Ck8Mu&>gp<-|sgS!|VDh78kI#dkqVsxk&9V$kLiqWBBa2KOP#o#VRhl;^n zj1CopyBHlRMu&>QU5pMDgS!|VDh78kI#i4f6{ADN=uj~_RE!Q4qeI2$P%%1Gj1Co} zL&fM&F*;O?4i%$A#pqBmNQ}{;Vvrc4L&fM&F*;O?4i$sD7#%7`hlVxRGbbKXFViNhlCk{Jt*onhV9CqTc z6NjBR?8IRwPKS!qq2glay*|qXb%%VxRGbbKr$fc*P;oj`oDLPIL&fP(aZ%&f{Ty|NibF~qQsQ)|IHbfOB~FKm z)1l&Ys5l)ePKSy^N*q$+bf`F_#OY9RNQu*-;&iAu9V$+TibG1A4i$%#I2|euDRDYf z98%(Rs5l)e4k>XuR2)*`bf`F_#OY9RI#it1j5r-CPKS!qq2jD^leI~^)chlb6)oX^_ieYO03mqf*vWcR-Xxaq{Lc%Cg_n8>-Xk!J&%-0Kidj@ zK-Z|RT7RTWT7SenKSe)7e~fx%`w{j0kuvFL^ZA`es@~Rr=2d=y{*o(qNSU$voXaDn#rj{+zd<+A@1gdCsO4^?vs;8%84GO zoLGN@{ucd8`dDdsFZDG=kEw)@$-`sv@K|-v_p$GfRqL!?A%BeTkLA0^epiq2?lHbR zR;}=s&rtjFShd3XU#;xh$L!n3?Aym;(A&MQ9*Zoi_tj&OW%a&#EV8WLSC83OkJ(p` z*;kLni?(Y&yp#Sr`ce7>7M?)C6F%1yKGzdI*AsoNKj=Q*w@>&KPxus1^eMdkQ}i?R z$5!6?6W;j~-uV;W`4hc!-}*P`Ci-18fciZ@;XOa$JwM?+KjGaz;oUyr+`%rK?y5t5 z)W4XR&0XH}F7J6){pb(cVn=q>iLAb6V3&8ktM1?}W^EVNc42K7)^=fS7uI&w7knR| zZ{1a2u=;%KuKI%24DM`Wk>;nA(M@U6|Tc_4fUJ4s=(w+G>t=;b@mV zw#y#dWsmK$$97d|bsu=yg_m9JLp{Itq1D$}?aFYj4`LF((@_Ox%U&)M#MyT`uWqvGvp5BpYE zyge%39$kKqinpgd@9pP2%KLwh{lCZl-(&ypvH$nj|9kBJJ?&vX>PP6O=x3;Z%V>`o z=^hnqkG;Le-ri$x@3DvX*u#75;XUnPJxY7n>a%Zq?BPB3@E&`3k3GCcMcUJT_I>^a z-9*2O22fX|J?(9)uU^~J-j-@_OZ7W=`i$D=R`2t@|9_uTk@nQNyu}r1Puc!b`tRsR zt16Oir55c`i}t8Rd+J=??pm}j@7_v%{qVlLv-%p~eRVG1>faUF7adR*%F*PP1gUz6LX!t7IF_QjXqvn$NL9QQl<9Q75s`|4SK zPX89izUE85&zI=0c*S3%|DAjOEBbpY-0j2NKHTlAf9ZAAzpVcKw|(_5t81_ROO!|X zsC=K<&OSA5pPIHW9`(B7(dwGE50CrsxDSu}@VKv@rCXWX>@%y`m+#u!>O>zlp2Fr+ z{Cx_WPjU7s&OW8?J(Z6ibx-^F6sMlbsrMRt|39U6J*9R%rFK1~c0HwbJ=LD~eOBlL zx<=oiKSaGhpRzxnvOk})Kc7;^o>Ir2YG3I-+E>;;LI2dsr+Z4>eoEbbO5J|SXMC#9 z_+I~^>wfx-&-hHA(c>rj?9cQWzme{tu0PLIf4-I`QGZ+N8C6LC!pnVpE$%Zi{ERB} zj4JeuD)fvzKcfmgQ>y(~r}`QD>Y4VHAA8I5%+Uq9M1O$Z@hE>g>6!MJ)!$BfrmR~1 z?WAYQs@0Y1nX+nirFy2UT0Pf#Mx}bDlzRLN^p`yUm*}t1Ut5()J)1IV{RH(lhMs9Z zTm3DeXUe4YTYerg`HXq^Gcx&%+Vzau^-P)ceO$YqDU(*$u4hW7pW$!Ozq2ZtQhBHM zK<#=)KA(}#XVj}_@>F|Io?1PFdWNUZ@H9bg6L^{+w+VVm0%sFAn~<{~HWKug1f3;8 zXGti}Uu(PjO9E#Ts!qPAJ9q+T6F8f|*#w>@=qw35O~})?x~Ka~g8q`Aza;1{3HnQd z{*s`-Byc|=_x&pVZdyX5SpD6!gh;Wv2PMRd-<#b};C=%46S$wi{RHkOa6f_j3EWTM zeggLs^r-}WDnXx0kcR|$NQkm;^!(04LX`P+e~o&!kf4_(=w%6dS%O}cpqC{?qTU+` zNsy2P2}zKU1U)W6k4wRLKOi9oP=7!+4#>s<)E_YGIDq;Cs6QYZ2V~=bY#fk{ z1E@bB8wX_LfNUH<{Q(I%fcgUxasc%Q__JOm)0O}9$^Z-u} z@bmyr5AgH=>JOm)0O}9$^Z-u}@bmyr5AgH=PYW$o*qE`0n{Jh z=>eV|;OPOL9^mN#)F<&YiKj_CP2y=1Pm_3>#M306Ch;_hr%60b;%O33lX#lM(NB4JWb+h5>JzOn#9v2o+j}$iKj_CP2y=1Pm_3> z#M306Ch;_hr%60b;%O33lX#lM(NB4JWb+h z5>JzOn#9v2o+j}$iKj_CP2y=1Pm_3>#M306Ch;_hr%60b;%O33lX!Y4Pv31E%F~Zh z9~~T0$qzX?IHYLC^NkcxUJNAympoQG7-Ln`MXM+b-aa)>X7_;QFZhxl@cFNf66L+a-t_4APW zdC1YhA-)_^KM$#&ha4Roa&&NrM~Cw0%Z)>MWcAU(p*+&N;^^Rzqk}_^4h}gwIOOQy zIXpgx#OLzpNB`Ib!un#dGap>yOY+QLj`y*B-Wd zrQ*5vuvB}`>Q$iU+Iv>-z319X*1ti$Qt@1S$r?btQt@1S$?8>|=h{nB?Io%9fK+?n zozyE8&$S2MZ5-*-y_Nb5?2$gB$3FHsQqB1&^|8+pbBrU7eUA9-M|}1p)tqm1tLMx| zNc4S6`3i zqt)vV$MW$HQeW|POr1HV&K%?8F+Lv4N8i(P#bdh0F>W5K+W1jk?K!5}98+zM<*%RL ztFOnnd@Pr}#YarX)SP2#&M`ITn3{7;%{iv#98+_S<+b0Nxj2@aRv$wh%T23~p^oLI z)yGiBa?|g`t3$_f)9TfsW2)0J)#;e(bWC+RraB$VS-;9JP|y92sZ_^Qs$(2H#=&D8 zJeGsHj~ulA3F@P;V|vOlJ|5%aF+Luvf@wdgT zo*t`$=~gP(G0q<2?6E4CxBnyR^^Ifk`~OJ)9sOvP``Yt#nPb&4-A8rI`Wy7O=vUGc z@^AvzCvbftuK%Fz`+A2bWaETXoREqW=stn&6RO+^sW?$8eE&0^)0OQ+zQ2>Y*PP({ z3BI4;`w70E;QI-_pTPKu8278s(FM9he}Fm_Cop~j<0mkF0^=tzegfksIDUfTCpdlr z%O|jW0?Q|`d?J?pioZskgcFi*LK03$!U;(@Aqgk2d;-fSuzUi`CsgATl5j#2PDsLu zlAt|<%O|*eg3Bkkd;+;A@>=)7!k;~rlk5>7pJt-eGmXFropua`GlD>fS7t9Y| zK>7}7jX1Kdr#Zh4=?CMFX%)s=tM7+eZ~(`ccoLh(y2bFw|GtCl&*Bj4C<8LbV_AARfgZ`)+Fkq;8Rt$_foHK zoGQuQ;%k0RnN6LlzWG+?`Bc@+k3DDXRG-qhPU&2ybgol6*D0Orl+JZZ=Q`EC^)tA0 zozl5Z>0GCDu2VYKscM~{)5k%l+QU|_ew=C#TfO>msy%G|5%20#^fUCws8{Mv>0GCD zu2Xs8EnWjTW#)X!%=whgbxP+trE{IqxlZX^r%JotiPCQMH8!X6ORp=xtX>s4WiEZH zw0rE8x>Kdy`j@EBG@YvMY454-SvS$|q5;(3Mm!Y@R$oDVDi);7rB9i;ovQBXu_8jx zEF!Ev({#$r?Nm9@7UjhH(W;zSP0A@Vw^L?rr_9_=nYo=Zb4!t;6e&uPq7*4gk)jkS zN|B-zDN2!|6e&uPq7*4giKeeNQluzFic+K~MT%0SC`F1=q$ov-QluzFZA_7(6e&uP zq7*4gk)jkSN|B-zDN2!|6e&uPq7*4gk)jkSN|B-zDN2!|6e&uPq7*4gk)o73=6k(= zrzoY4X?2QHq$ov-QluzFic+K~MT%0SC`F1=q$ov-QluzFic+K~MT%0SC`F1=q$ov- zQluzFic+K~MT%0)|5KzWMT%0SD5dVH_o?n_b&67?C`F1=q$ov-QluzFic+K~MT%0S zC`F1=q$ov-QluzFic+K~MT%0SC`F1=q$ov-&Xl5e8)wwpGwSUbo%D9&xb4GH`m|2~XoHOQEXLQmtWybe8Mg5(xGv-uh%8$ohSv^yJtnRI6^wu+a z>lwZEjNW=iZ#|>8o{^t3@^eOh&dARh`8gv$XUdPC-&N?0{G5@WGxBpre$L3xneyX% zdJXoBmd?o18OMxg^xrf3@0qfs z=Tw%gpP;TtXJqM&ES-_1GiG9E^xrf3?-~8~OeykXeU9l&DYAN<_Dm_VdJcA`ELnYy z=}cLYDoawbbjBR)jP86!cRu6D@l5%V3(Akx>$GRekJYPiY3fXxI+Lc(q^UD$5|Sn% zX%dpA&ZMa`Y3fXxI+Lc(q)AJfI+G?XY3fXxI+Lc(q^UD$>P(tClcvt3sWWNnOqx2A zrp~0PGimBfnmUuF&ZNmnnw+G`Nt&Fb$w``=q^UD$a*`$|X>yV#Cuwq$CMRj?Oqx2A zrp~0PGimBfnmUuF&ZNmknrx)WMw)D-$wr!Nq^UD$>P(tClcvt3sWWNnOqx2ACL3w8 zktQ2y>P(tClcvt3sWWNnOqx2Arp~0PGimBfnmUuF&ZMa`Y3fXxI+G?FY3fXxI+Lc( zq^UD$>P(tClcvt3sWWNnOqx2Arp~0PGimBfnmUuF&ZMa`8R|?%Df;0?hB}iWMHy0* zAw?Ndlp#eKQj}4OKI;Als*@R|$m(vDQHnlDJ?F_NMc(c?Plgm_l%lURcIC-%OqU^1 z8R}0)x$^z}iy0Z_jTv&4Ay*l4l_6Ida+M)h8FG~&R~d4ZAy*l4l_6Ida+Oi8{QRyz z8FG~&R~d4ZAy*l4l~JzzKK+ja8Rg3Ae;mkAe=^jc3>nLiu?!i@kg*II%aE}Q8OxBd z3>nLiu?!i@kg<$1rgx=`S^ZnA88Vh3V;M4*A!8Y3%(r?*lp$joGL|7@8D&iGP#LrO zm;W=$m^Fa93T2cuKf~Xme`i(Fq$Djv(lSb#?n%-zBrQYIG9)cSUCJnL?=~{Zo7L+% z8Rbo`DQ|i<@|GcQ8S<7PZyEA-uIq>2ZJcj>NB2D6@Gmr;>pDiOf1B}K*D+edT3a~h zo6hHa)A@WO%9a@FUz<5sN_|hy%+HlltItWDE2UOnjekx`&q?VyDLq$8ed}{>{d>kv z>ACXh?VgjLE1!Oc{+`{r@@e(=?9R#Oxvn4fIEUs@{}%DNt{=9RQU4P7xvp}wc2NJ~ z_qncewE7pn&vlif)!%VGSI#~5)%fSixz*P?o-5~8U+Z|ToLfEHKPTtsg&qRm2<0S`{&fpbL!_g_48ag_h<31W}WLgVXLorJXhMS z|AhV=^-;jNu66YGFHj#5oGbrUpZ_{1`RBUI(f9E$d!LH}>wDDK;h*a&N9*sc5OEF> z`g>Tm_!k$?#f6?tS2=q8$Bg~$<8v|M?f%8ZbCKe)NjcY5j#mFF%ek&>w0_%rTfF!_ z{>H~SmHC{?d`@LPrzW5C-Rg7oZhdyXTYawUfqj1ybgt`xJvK+@x*phL({v6^=i*4u zuWKN+g}QyNYal&NqyOOhiz(md`;5KPa?bax&&8KsQ3Pp=2(tbL^@_^52>P&bA%eb; zeuwd2qn>+Qh$Cwd4XHj~z|jR9UBJ-=99?Xfql*oHiVJb{PP&i!yV4h;=DpO%vlq+| zF2sw+{+9HG>bW0v!r0$ixezaJr784`Tm2uP7t9kb#Eb9mZ$@A6&FBlh8GRvMyv5&% zzR=aee&^R{2koLgw2ux@^Kv0x{JJA_jQYFJ7vjb0?>=9M7psqaFO+lZr|4(sk5T^z z=!J4_{ck+;PuT8nD_`&+s7A5veies z7t9|nbiJ(UXTBhG43nFzP~ekp$vQM z-@m$0hOGhg|Ke8v(%=Odz97RF%r`E`@CCDu3o?Ac+~b0|$AvPi=ixfu3uV}2pI^98 zU(hQm$sT7IJI@!&v+v_PU#L@f{684`KR_>(XKhiQt-nEki+&}|Y6kK_>T>~E%|JZ< z4%`14_4kgm%C^JI*-{;pP*Sx}Z)P?lLxR@C@&{T%h#jjXzZw|s&6Oh;DT!TZ+TAxn42 z>PmQz|AqVf4)s}&tjO|XeeNTx9^vutJ*G!w=@D6aL{?!yAbrbdPa%9Dw z)xW8jRqycqNv62dr>1vg#hu6Q9a(Ybv3p0BevxJNm8D-~nS*8N8d+vyS$?A*kZFqntIJPhVxFb{)y7|g?9 z9tQI;n1{hU4CY}l4}*Ca%)?+F2J*kZFqntIJPhVxFb{)y7|g?99tQI;n1{hU4CY}l4}*Ca%)?+F2J*kZFqntIJPhVxFb{)y7|g?99tQI; zn1{hU4CY}l4}*Ca%)?+F2J*kZFqntIJPhVxFb{)y7|g?99tQI;n1{hU4CY}l4}*Ca%)?+F2J*kZFqntIJPhVxFb{)y7|g?99tI0ASb)I- z3>ILp0D}b>EWls^1`9A)fWZO`7GSUdg9R8Yz+eFe3ouxK!2%2xV6Xs#1sE*AU;zdT zFj#=W0t^;lumFPv7%aeG0R{^&Sb)I-3>ILp0D}b>EWls^1`9A)fWZO`7GSUdg9R8Y zz+eFe3ouxK!2%2xV6Xs#1sE*AU;zdTFj#=W0t^;lumFPv7%aeG0R{^&Sb)I-3>ILp z0D}b>EWls^1`9A)fWZO`7GSUdg9R8Yz+eFe3ouxK!2%2xV6Xs#1sE*AU;zdTFj#=W z0t^;lumFPv7%aeG0R{^&Sb)I-3>ILp0D}b>EWls^1`9A)fWZO`7GSUdg9R8Yz+eFe z3ouxK!2%2xV6Xs#1sE*AU;zdTFj#=W0t^;lumFPv7%aeG0R{^&Sb)I-3>ILp0D}b> zEWls^1`9A)fWZO`7GSUdg9R8Yz+eFe3ouxK!2%2xV6Xs#1sE*CU=aq3Fj$1aA`BK` zun2=i7%akI5eADeScJhM3>IOq2!ll!EW%(B28%FQgux;V7GbamgGCrD!e9{wi!fM( z!6FP6VXz2;MHno?U=aq3Fj$1aA`BK`un2=i7%akI5eADeScJhM3>IOq2!ll!EW%(B z28%FQgux;V7GbamgGCrD!e9{wi!fM(!6FP6VXz2;MHno?U=aq3Fj$1aA`BK`un2=i z7%akI5eADeScJhM3>IOq2!ll!EW%(B28%FQgux;V7GbamgGCrD!e9{wi!fM(!6FP6 zVXz2;MHno?U=aq3Fj$1aA`BK`un2=i7%akI5eADeScJhM3>IOq2!ll!EW%(B28%FQ zgux;V7GbamgGCrD!e9{wi!fM(!6FP6VXz2;MHno?U=aq3Fj$1aA`BK`un2=i7%akI z5eADeScJhM3>IOq2!ll!EW%(B28%FQgux;V7GbaigC!U&!C(mnOE6f1!4eFXV6X&( zB^WHhUz8&uXuDTL%g|RAeP3uC zX1jljyDa*wJ_k`2eICad`>a`6^jZDCx@FPlu~$UPqR;B}|FRhL^Ly>LEC#=ldR??E z2K^|nii@qki&H;?&#aYo#=+0& zGizmjk+>{oJ^m^BGt{f8WymdyT;J-IoHFE=MXtB}5=VZ;_}A!fP_L$zA-61YeNV5Z zmPM||UQI2FT#ZGp#v<4H3F_6s$Ssjb)LmvBKP!nEOI^el}=@mYyF-dC2~FXYHC^J`aV7rSBA|pY?fiO z44W18$M+i*bw=yAb&o&f6#XGSP_Xy}3@#tH9=B^?htv+*C5sy}%xvRiq zg}zy#Z&v7=75Zj{zFDDfR_L1*dSXSa`IGv0zbj(Rx<=oiKSX_=qC!us&=V{4#EMw+ z=k<46DxAfx&>1UY&7bsh-qlYT`@0wwbxG^bQJ?Rth%&3s_f^D^)hnVEab)#biHbO~ z`m98S4p^ZBR_K5gbwF?bkA9!x$m2g|>~nt=apdhj16UD99)F9m&jVKAs3ML$Hb)h4 z!iM-_3Td#VF!yE>rNSBzBD`*a`i zW%Zfviukhn9Cwx8SEct=>3vn0s?z(a^u8*+uS)N$()+5ARfVi7y{`&cReE1lWWCoj zyZ2S;eN}p2mEKpS_f=u7O7E-E`>OQ5Dy&uMeN}p272>M&zAC-1O7E-E`>GIE6>;zM zTJC*SdS6xN!Tsv)eO0k$b?>X{cjv6`eO2bDRamRSS{2r+uvVq_Rq1_IdS8{^SEct= z>3vmLtJ3?b^u8*+uPWC3{O)~KdS8{^SEct=>3vnrQGKg>UzOfhrT10oeN}p2mEKpS z_f_eAReE2Q-dCmfRq1_IdS8{^SEct=>3vmtUzOfhrT10oeN}p2RkK#Vx_e)h-dCmf zRq1_IdS8{^SEct=HEZ?#-TSJVwOZZ#s`S1py{}5|tJ3?b^u8*+uS)N$()+6PzACfU zD!s2t@2k@Ls`S1py{}5|tJ3?b^uDTQtzT?ZVYW)|tHNxR-dBa$D!s2t@2iSg<(%GE zrT10oeN}p2mEKo{*($xS3bR#uUzOfh6|?%J^u8*+uS)N$()+3~Tc!6^VYW)|tHNxR z-dCmfRq1_IdS4Z0tMtAqy{}5|tJ3?b^u8Kw)?l*+n>E<1!DbCMYp_{^%^GahV6z6B zHQ21dW(_uLuvvr68f?~Jvj&?r*sQ^34K{1AS%b|QY}R122Aeh5tifgtHfyk1gUuRj z)?l*+n>E<1!DbCMYp_{^%^GahV6z6BHQ21dW(_uLuvvr68f?~Jvj&?r*sQ^34K{1A zS%b|QY}R122Aeh5tifgtHfyk1gUuRj)?l*+n>E<1!DbCMYp_{^%^GahV6z6BHQ21d zW(_uLuvvr68f?~Jvj&?r*sQ^34K{1AS%b|QY}R122Aeh5tifgtHfyk1gUuRj)?l*+ zn>E<1!DbCMYp_{^%^GahV6z6BHQ21dW(_uLuvvr68f?~Jvj&?r*sQ^34K{1AS%b|Q zY}R122Aeh5tifgtHfyk1gUuRj)?l*+n>E<1!DbCMYp_{^%^GahV6z6BHQ21dW(_uL zuvvr68f?~Jvj&?r*sQ^34K{1AS%b|QY}R124x4q@tixs_n|0W% z!)6^e>#$je%{pw>VY3dKb=a)KW*s)`uvv%AI&9Wqvksee*sQ~59X9K*S%=L!Y}R43 z4x4q@tixs_n|0W%!)6^e>#$je%{pw>VY3dKb=a)KW*s)`uvv%A zI&9Wqvksee*sQ~59X9K*S%=L!Y}R434x4q@tixs_n|0W%!)6^e z>#$je%{pw>VY3dKb=a)KW*s)`uvv%AI&9Wqvksee*sQ~59X9K*S%=L!Y}R434x4q@ ztixs_n|0W%!)6^e>#$je%{pw>VY3dKb=a)KW*s)`uvv%AI&9Wq zvksee*sQ~59X9K*S%=L!Y}R434x4q@tixs_n|0W%!)6^e>#$je z%{pw>VY3dKb=a)KW*s)`uvv%AI&9Wqvksee*lfUN12!A5*?`RkY&KxC0hn+@1(z-9wB8?f1c%?4~XV6y?64cKhJW&<`Gu-Smk25dH9vjLk8 z*lfUN12!A5*?`RkY&KxC0hn+@1(z-9wB8?f1c%?4~X zV6y?64cKhJW&<`Gu-Smk25dH9vjLk8*lfUN12!A5*?`RkY&KxC0hn+@1(z-9wB8?f1c%?4~XV6y?64cKhJW&<`Gu-Smk25dH9vjLk8*lfUN z12!A5*?`RkY&KxC0hn+@1(z-9wB8?f1c%?4~XV6y?6 z4cKhJW&<`Gu-Smk25dH9vjLk8*lfUN12!A5*?`RkY&KxC0hn+@1(z-9wB8?f1c%?4~XV6y?64cKhJW&<`a#pb(>OR@R2^siB0^L8mJy(Nf- zw9<7cDnClS9(5@ytv-&v6qQyVM_)qarKtR%vA>&e36+!o)m==*p*=Tbacy`FO^9<5%_xfGAq z3ZKZ=re4D1B|Kij{;qg*D`ki}y z^%5R0;qek4FX8c0Jo?sq?zuw!&4o+xX!SQ2F2$quN4)x{=x6AUQGY}5QaoD!8(X}- zdMO_LNk3=oHJ?j(ycCcAq(4XfU4~2X=q+EM{w~9%c(nQ$^Aa8};qg*D`kuc-y}o)W z9=*lutC!-@3w^JnDJGqduc})E4n*{Vn>H zvs|!ef*E*i?V?7Vm*3JT~F636D*9Y{Fv`9-Hvk zgvTcRu?de&cx=LB6CRuJ*i?V~TF-1Ao9d5N^Vn2>^!qW7O?Yg=V-p^m@YsaMCOkIb zu?de&cx=LB6CRuJ*o4O>JT}!I{khCz6CRuJ*o4O>JT}!I{T|F?Q~l9u9-HvkgvTcR zu?de&cxJT~F6Nq=m@V-p^m z@YsaMCOkIbv8n#3*HwSitH5Iu9-HvkgvTa4HsP@ek4^ex6CRuJ*o4QX`lFxCJT}!I zJvNU`cx=LBQ~gn&7ap7N*o4O>JT~F636D+nN8i&tHsP@ek4<=N!ebL2oAB6#$0j^B z;jsyiP4!2;6L@UGV-p^m>W_MF@YsaMCOkIbu?de&^~aAJEqH9fV+$Tz@YsUK7Cg4# zu?3GUcx=IA3m#kW*n-CvJhtGm1&=LwY{6p-9$WC(g2xs-w&1Y^k1cp?!D9;^TkzO| z#}+)c;IRddEqH9fV+$Tz@YsUK7Cg4#u?3GUcx=IA3m#kW*n-CvJhtGm1&=LwY{6p- z9$WC(g2xs-w&1Y^k1cp?!D9;^TkzO|#}+)c;IRddEqH9fV+$Tz@YsUK7Cg4#u?3GU zcx=IA3m#kW*n-CvJhtGm1&=LwY{6p-9$WC(g2xs-w&1Y^k1cp?!D9;^TkzO|#}+)c z;IRddEqH9fV+$Tz@YsUK7Cg4#u?3GUcx=IA3m#kW*n-CvJhtGm1&=LwY{6p-9$WC( zg2xs-w&1Y^k1cp?!D9;^TkzO|#}+)c;IRddEqH9fV+$Tz@YsUK7Cg4#u?3GUcx=IA z3m#kW*n-CvJhtGm1&=LwY{6p-9$WC(g2xs-w&1Y^k8OBt!($sB+wj%Hcx=OC8y?&6*oMb8JhtJn4UcVjY{O$49^3HPhQ~HM zw&Af2k8OBt!($sB+wj%Hcx=OC8y?&6 z*oMb8JhtJn4UcVjY{O$49^3HPhQ~HMw&Af2k8OBt!($sB+wj%Hcx=OC8y?&6*oMb8JhtJn4UcVjY{O$49^3HPhQ~HMw&Af2 zk8OBt!($sB+wj%Hcx=OC8y?&6*oMb8 zJhtJn4UcVjY{O$49^3HPhQ~HMw&Af2k8OBt!($sB+wj%Hcx=OC8y?&6*oMb8JhtJn4UbpwcqJY`Y+Q*)tB)VA#G}VS)Ykx9 ziAQhuH2_!Q(dzzwB_2KYeEUi~`cb|H;7asaeNE043|_(Dl^Fbkw)h%=E7525H2_zl z&+2Ocu0)?-(dTWipzlibdF=VX74%&}-xc&-LEjbhT|wU!^j(QQKc|ltub}S=`mUhw zO7!{G4(hZ2SEA4Av;SA3&+4mju0)^5BXo>T&?!1YZ%`izUWqJ!MxXt^5?NNC{l5}f zR-gU95?TJF{+8mE$g=udidQ1bpVVjnuORD6Wck&7BzPsVJoe1 z{$Gh2y`remqeP9ih#ITU@?VLX4;$ATzKZ60!&lKE()p@>Fr?C2$B(IfKtA9!IT3NOF zO0aA4d98eU{5kjkDP!mJn(SSZx@+=wt-NWw@@D-6b$+guAM1Zc{{nSduF1)@s;gd6 zIkEZ|Bd?VctA8=_n(BH@UA;gIGSDFd9Wu}%106EZAp;#U&>;gIGSDFd z9Wu}%106EZAp;#U&>;gIGSDFd9aX>g8y!_Yt259c106EZAp;#U&>;gI)ji+G8R#&h z=#YU98R(FK4jJfZM)5)SaRxeMphE^aWS~O^I%J?j20CP*Lk2ozphE^as!@I|XP`p{ zI%J?j20CP*Lk2ozphFGmkbw>v=%{Y!u~du>8R(FK4jJf>fesnykbw>v=#YU98R(FK z4jJf>fesnykbw>v=#YU98R(FK4jJf>fesnykbw>v=#YU98R(LME*a>Ofi4;7l7TK6 z=#qgh8R(LME*a>Ofi4;7l7TK6=#qgh8R(LME*a>Ofi4;7l7TK6=#qgh8R(LME*a>O zfi4;7l7TK6=#qgh8R(LME*a>Ofi4;7l7TK6=#qgh8R(LME*a>Ofi4;7l7TK6=#qgh z8R(LME*a>Ofi4;7l7TK6=#qgh8R(LME*a>Ofi4;7l7TK6=#qgh8R(LME*a>Ofi4;7 zl7TK6=#qgh8R(LME*a>Ofi4;7l7TK6=#qgh8R(LME*a>Ofi4;7l7TK6=#haQ8R(IL z9vSG7fgTy?k%1l==#haQ8R(IL9vSG7fgTy?k%1l==#haQ8R(IL9vSG7fgTy?k%1l= z=#haQ8R(IL9vSG7fgTy?k%1l==#haQ8R(IL9vSG7fgTy?k%1l==#haQ8R(IL9vSG7 zfgTy?k%1l==#haQ8R(IL9vSG7fgTy?k%1l==#haQ8R(IL9vSG7fgTy?k%1l==#haQ z8R(IL9vSG7fgTy?k%1l==#haQ8R(IL9vSG7fgTy?k%1l==#haQ8R(IL9vSG7fgTy? zlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy8R(ON zJ{jnffj$}NlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N z=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy8R(ONJ{jnf zfj$}NlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy8R(ONJ{jnffj$}NlYu@N=#zmy z8R(ONJ{cI0fdLs9kbwai7?6Ph85od(0T~#OfdLs9kbwai7?6Ph85od(0T~#OfdLs9 zkbwai7?6Ph85od(0T~#OfdLs9kbwai7?6Ph85od(0T~#OfdLs9kbwai7?6Ph85od( z0T~#OfdLs9kbwai7?6Ph85od(0T~#OfdLs9kbwai7?6Ph85od(0T~#OfdLs9kbwai z7?6Ph85od(0T~#OfdLs9kbwai7?6Ph85od(0T~#OfdLs9kbwai7?6Ph85od(0T~#O zfdLs9kbwai7?6Ph8F;A-yxn-ox6fWG2_AnN_3s_M-1uwM$JZ})?ZkWO7F&X-zYFtH zsqpqV`iL!0^lgHdTHW%a_SoX%>zB%j?|;DaC(%Q;Jm;Q&j~=o8n6ZzqUn)O-l+XUW zWOeH$$JZ}e-Fm59`91r$fL3Mv$oJSdd;mJw2Su8 zJ~}{Op(AvRPS7bjLvPU6?2}u@b98|&(I239ysLZ0EA#5BN zzV7$s|MF*kKjO>dKWFUkyu8%Wy0`l{{iP`LmcKza(eI)G)MsE{iZA6>eED6GUh(Cz zzuWRsd}%Dcto~-!OYx=W)KR&|X~r4GJ|2Im^((8-w7&e``4r+ykL7s$CCB40IUaw> z@%T`bz1tXWd`I^miZZJy8?uTuWEE?uI{Z;vd~7~c9sWY<^@O2_^A@jS4aJ?uJ~kh+ ziZ!Gf4_U<;inaIJ?sLaORxhE(_=6@EyCA5!6mRQMqkey9rXcj#5DA*)zJRJooFaV^r^*&)vH)Tbt0=*v4-kI z+W)L#4b_i4CUxS)?~~Mt7mt0d!ce?uEMBZ$7aEEey*jH{L-FFV*M)}krXj0XLpszD zc82OxdKFf&hEOwvnjzE-q2`sk)rXB&>Q?Whf6Unbf$~b{Q@)YzGWL}}uS9{>|KsyY z`M3JYpI17E;_(rBjQX0NSIWQDUFH>C=9TjAEnZ`JrTlyB|3G=AE@OSg7XK^mD<#u9 zL8s^py+QpC)UT9J-{+oZTcHo=8uj%yuQ-44O8N9XKSe)7{r^F)IDheq+Wtz(^p?-j zpP~QEtNa4}C0o8k{Vy1=ls)V3txBEM|2_0dsk5?IIm_^h^9!#yv+zpk@~wY{{yF-W z=wG4#1@(Uwy;6Rx-$etcYwRnf#oPT~MX!_)sebcNs$api{wI|EtZaD8_fVfJe?={Q zrFqNSjaQntSpB=)uT)*N|5aV3oFjO}If7UG{_QKy6ujb0!HBesNXv+{j8rE-Zj4CF zh_sA2?=~VWBhoS=EhEx0A}u4*GE%klW1W@}X&I505osBbmJw+gk(Lo@8IhI|X&I@G z`LRyRh_sAU$2@jgMyg|0r)5N1Mxa>hV%ZRj$NXv+{j7ZCfw2Vm0h_sAI%ZRj$ zNXtm|N6(|mV|7|asy0@qWkgy=q-CUP<1J3hh_sAI%ZRj$NXv+{j7ZB!^+fk4EhEx0 z;>^*Aw2Vm0h_sAI%ZRj$NXv+{j7ZCfw2Vm0h_sAJ%b2u`Nz0hDj7iIww2Vp1n6!*Z z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hDj7iIw zw2Vp1n6!*Z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u` zNz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hDj7iIww2Vp1 zn6!*Z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hDj7iIww2Vp1n6!*Z%b2u`Nz0hD zj7iIcv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ z%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{NXvw@Oi0Uw zv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{ zNXvw@Oi0Uwv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{NXvw@Oi0Uwv`k3L zgtSaZ%Y?K{NXvw@Oi0Uwv`k3LgtSaZ%Y?K{Nz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9 zOi9a>v`k6Ml(bAq%apWCNz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9Oi9a>v`k6Ml(bAq z%apWCNz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9Oi9a> zv`k6Ml(bAq%apWCNz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9Oi9a>v`k6Ml(bAq%apWC zNz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9Oi9a>v`k6Ml(bAq%apWCNz0V9Oi9a>v`k6M zjI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0 z%t*_Ow9H7$jI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1 z%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0%t*_O zw9H7$jI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0%t*_Ow9H7$jI_*1%Z#+l zNXv}0%t*_Ow9H7$jI_*1%Z#+lNXv}0+>nhM@^C{QZglMbVdF-ru=-f+hV|GR@^C{Q zZpg!p^59#2)N?}~Zj=X)ebjTKJXn3Cb3+Dh$iNL5xFG{KWZ;Gj+{k_3|3~Pj=x6AU zQLjzi;Oq^~-r(#F&fehQ4G!Mm;Ef#A{pFz5=iF~_>ISE7aOwu9ZgA>GPWe9m#hx2E zW&JK1Kt02}kyBQmTfdQ0QaL5XqZ`&yZ*b}cr*3fS2B&Ut>IN@v@Ztt9Zt&s;FJ43L zYnXivm9L@lHGBTG_Vyn(UPIh#SbGgGueHa#-Tz_wS}a)oAEvL#@M|*snhd{Y54_eV z^{xJ2(bxK<*6*VJU(wg3@il3DO&VX5#@EW&yN%b%nAN`vajSQ0^?w%M>OFhxs9O?sOQLQ`)Gdj+B~iB| z>X!X^OQLQ`)Gdj+B~iB|>Xt;^lBin}bu0Guy0CvsqHamlEs44%QMV-OmPFl>s9O?s zOQLQ`)Gdj+l`mgz+{zcL|Fig3>}&s!v|EyPOVVyh+AT?&0c(=g21>P<2Zh?0Tyj$Si0`C@hx4^pv-YxKMfp-hMTj1RS?-qEsz`F(BE%0uE zcMH5*;N1f67I?S7y9M4Y@NR*33%pz4-2(3xc(=g21>P<2Zh?0Tyj$Si0`C@hx4^pv z-YxKMfp-hMTj1RS?-qEsz`F(BE%0uEcMH5*;N1f67I?S7y9M4Y@NR*33%pz4-2(3x zc(=g21>P<2Zh?0Tyj$Si0`C@hx4^q4-YxNNiFZr9TjJdk@0NJC#JeTlE%9!NcT2om z;@uMOmUy?syCvQ&@otHCOT1g+-4gGXc(=s6CEhLZZi#nGyj$Yk67QCHx5T?8-YxNN ziFZr9TjJdk@0NJC#JeTlE%9!NcT2om;@uMOmUy?syCvQ&@otHCOT1g+-4gGXc(=s6 zCEhLZZi#nGyj$Yk67QCHx5T?8-YxNNiFZr9TjJdk@0NJC#JeTlE%EM7-o4+rlXq{W zz7q0IGwKgg|J&@H&Qw}Gce;~zUrUpy|84CK2k$hm_I-Tz#a%XheZ zhs$@ke22?-xO}HMv)`e=&vmCcv)})h=&#UUTjjEzO)gtMLH*B+cbY9*{{;P0)Ym=U z$$hKOGTh01t7l(#_Se~bQ|RlZ9#Pu6?D_dEHn=aKJLpG~`y z*V=pX+UgbHJ9%yW6YbA?c)W+ldw9Hu$9s6ZhsS$7y@$tpc)Z8Wdw9Hu$9s6Z$IW}( zyvNOZ+`Pxldw9Hu$9s6ZhsS$(yobkoc)W+ldw9Hu$9tT*$Ekaqy2q(|oVv%Udw9Hu z$9s6ZhsS$(yobkoc)W+ldw9Hu$9s6ZhsS$(yobkoe7VP$dwjXamwSA<$CrC}yobko zc)W+ldw9IZmwR};hsS$(yobkoJi3R+dw9Hu$9s6ZhsS$(yobkoc)W+l72d7zZiRO% zyj$Vj3h!2Ux5B#>-mUO%g?B5wTjAXb?^bxX!n+mTt?+JzcPqSG;oS=FR(Q9-mUO%g?B5wTjAXb?^bxX z!n+mTt?+JzcPqSG;oS=FR(Q9-mUQN0q-90?g8%}@a_Tc9`Nn~?;h~(0q-90?g8%}@a_Tc9`Nn~?;h~( z0q-90?g8%}@a_Tc9`Nn~?;h~(0q-90?g8%}@a_Tc9`Nn~?;h~(0q-90?g8%}@a_Tc z9`Nn~?;h~(0q-90?g8%}@a_Tc9`Nn~?;h~(0q-90?g8%}@a_Tc9`Nn~?;h~(0q-90 z?g8%}@a_Tc9`Nn~?;h~(0q-90?g8%}@a_Tc9`Nn~?;h~(0q-90ZjEM4 zx5m3Q-mUR&jdyFjTjSjt@78#?#=AA%t?_P+cWb;`M4x5m3Q-mUR&jdyFjTjSjt@78#?#=AA%t?_P+ zcWb;`M4x5m3Q z-mUR&jdyFjdxLjx@a_%Xy}`RTc=rbH-r(IEynBOpZ}9F7-o3%QH+c63@800u8@zji zcW?0S4c@)MyEp%nq<4#LEW6WtRb!wb5II%iMK8JlyhsGjR0@JdgBgjfCi!4^i~s?S z=MoGu@!Qx2667fl2YPTGd=CO-W`KC?IFsA7+n2UGaXe#MVe1l7o0np-SQ@qpYEhd6 zi`s%SK)v+C)R90CJm2@5mk$e@o0rA^|NE`~T6=Ah*c}qPLt=MG><)?DA+b9oc8A37 zkk}m(yF+4kNbC-Y-663%BzA|y?vU6W61ziUcS!6GiQOTwJ0y08#O{#T9TK}kVs}XF z4vF0%u{$Johs5rX*c}qPLt=MG><)?DA+b9oc8A37kk}m(yF+4kNbC-Y-663%BzA|y z?vU6W61ziUcS!6GiQOTws}j2^v8xihDzU2)yDG7(61ys~s}j2^v8xihDzU2)yDG7( z61ys~s}j2^vC}`qs&=XpyDG7(61ys~s}j2^v8xihDzU2)yDG7(61ys~s}j2^v8xih zDzU2)yDG7(61ys~s}j2^v8xihDzU2)yDG7(61ys~s}j2^v8xihDzU2)yDG7(61ys~ zs}j2^v8xihDzU2)yDG7(61ys~s}j2^v8xihDzU2)yDG7(61ys~s}j2^v8xih4~gA} zie0eqA+h^VbB8x-`@ar9)ZD@C-$ngzh9Byi_nEHwKUB@{N8d+(g8mf!0R1`o*XS?M z3i?a*5UryAf3Xi$$y@!OVjrrKx4z`arB$ok);O9(m#wO?b*B3MvD9mTAFA(C^EkhdJf@Gw^zoQJ9@EET`glwqkLlwveLSX*$Mo@-J|5G@WBPbZACKwd zF?~Fyk0ES##3uch9%d@7c@?HT>4disg{N91anJ5gMc0p|-qm@k@8MU{-;+;I zncbg?v_9h5{VAk96>0sbXQrp(s-N{QX?rKwsp#tC@1njl@lxkP=x?WyQ(y|s$o`Xr*a)xT7Ks(9)1C|*{t37jfk)>YJN z0;i(7)oTK$Q2kU?*XI<~ty}0ex`X--(^K)>>fe(;70;#00ewQKek!W#xuUvWQ&hKl zpV%o>KUJRSi1Nhx#;QEAdWYC4R6m94r%?SAs-Hsj8d+2$i)v(1jV!8>MK!XhMi$i= zqibYQjV!8>MK!XhMi$k`q8eFLBa3QeQH?CBkwrDKs74mm$fBBj_whoFEUJ-3HI31) zb;MazBa3Ppquq8E)ySe6SyUs7YI3NLJBw;^sMT3iBa3QeQH?CBkwrDKs74mm$f6oq zRMS{L(X*UIHI46n9cNLEEUJ-3HL|Ei7S+h28d+46qkX2cs74mm$f6oqR3nROWKoSQ zs*y!CvZzKD)ySfnY6HCjSyUs7YGhH3EUJ-3HL|Goz*$sNZD4g4)ySe6SyUs7YGhH3 zEUJ-3HL|Ei7S+h28d+2$i)v(1jV!8>MK!XhMi$k`q8eFLBa3QeQC(T|dZDf?>PfvT zwZ4$o=czCFA6@J0>#l2Gx7)vo{+2#-oqgSP?duNI_J7yb7v5G@*R`+P?RRLKX?5sb zhu(Fvv94_NE0}3@<)Pd5NL_jOiPU?%>#)79JoItXtgbwC+dIAMsvF(*zbe;NF)OR_^*_4S$?ZD1 zT_?Be zRk^Oc-){R~mFwF3?Y93_xh}u>S!<|WQ`g>aA2EUJ+WYOcIb3J&cU?a65i(P5()S=Y zS-tnWE;m`d_q(pW--?>*ZJ$qOYVWstEtmNSnJKTi?SECS%W-P6_q#5a=^eHA+eb|7 zy7qp%ZEn}u`(2mseB_Jni`?h7|5drJ`dn=}Q5h&FTHjdZM5}pTmlJi4oM;Wvq4W$7 zp2>qBt8EXSF}FICcRo@3cl0^WVE7sHtTVaBM?Q!CF6Vn^_!;x8Gv--maQjSt@p12w zIAfl5CWiZn_eh+{HEw%n_!+J_W43k1Z0n5K))}*{GiF<7%(l*$ZJjCG{n`GCSMbj8 zGv%|jf_i88ney4{Ut&B{KKs4AGyF{XZ1rB>Gv;My%*)Q0mz^;$J7ZpUCT{y(yw~?k zdF%5(LcQ1bjQQFb^R+YOq>d;jt=<`arfk&vDi5tmbQxXc(RI{&eb1Q3ox$oeWtWe5 zukV?%%esy3px%jbrd;xI?+iav{zye^sfca$&hRtlac9iq&S3Q!tUhBNccwfE7S5C> zR$mu5Q=TXa>bpF!+^YzZKCK(+)BJAl{$#10^K0I>tzi8EOUAa($; z1Be|!>;Pg15IdlL2q1O*)5K;Pg15Ica_0mKd< zb^x&h*)5Kszt!p)WdnR@Ou>*)5K*)5K*)5K*)5K;Pg15Ica_0mKdsz9YE{=Vh0dAfY<@V4j^`b69b4HKj1299jN?*{yC!0!h9Zouyb{BFSShCK9IuV8*R;CBOlH{f>zemCHE1AaH) zcLRPm;CBOlH}FscemCHE1AaH)cLRPm;CBOlH{f>zem7K)_%oQ_4fx$qcDrqUH{f>z zemCHE1AaH)cLRPm;CBOlH{f>zemCHE1AaH)cLRPmSZ`~zemCHE z1AaH)cLRPm;CBOlH{f>zemCHE1AaHing;xC!0!h9Zouyb{BA<)CbVus>n5~rLhB~9 zZbIuOv~EJ{CbVus>n5~rLhB~9ZbIuOv~EJ{CbVus>n5~rLhB~9ZbIuOv~EJ{CbVus z>n5~rLhB~9ZbIuOgl&g|0rnzmEDI^tM>)Bfp9M zmYCm$rETs(Z*vcNTP*dNz6ZT6mb&e=inj8{>XnJM*2(-XUY}^g&$hB?suZBCA&>+R7roqwgMWD~tTxe@5Hu6K##rKGS!ix49F&&7J6N?nG~MCwiMZ(c9dK z-sVp9HoR@a+cvyy!`n7@qPMvdz0IBIZSF*Gb0>P6JJH+RiQa~{ZFt*;w{3XahPQ2a z+lIGoSlU+Jx~Kj<#kTU+>fcjrD{rm-J;gRGZNt(wEN#Qmw({0}uc5vZy$w;@+=*3lkh3jv`rGqrM4LO&+mN#jIopu44LRG~ ziQZP8>vM7^dRy7fuk1U~+uVuXhMaBgL~ldRHg}@8A!i$MwjpPmJJH*a zv(268ZOGY%oNYNsp9FHYW3m8bfa{HS;R zKh?Kn^{)S?`j)JoPd|klPvOQ>xY5Dy9sJ(G?;ZT!!S5Yvrw)Ga;P(!{InlxI9sJ(G z?;ZT!!S5aX-ofu3{NBOu9sJ(G?;ZT!!S5aX-ofu3{NBOu9sJ(G?;ZT!!S5aX-l1OV z;P(!G@8I_ie(&J-4u0?8_YQvV;P(!G@8I_ie(&J-4u0?8_YQvV;P(!G@8I_ie(&J- z4u0?8_YQvV;P(!G@8I_ie(&J-4u0?8_YQvV;P(!G@8I_ie(&J-4u0?8_YQvV@XHe& z{NBOu9sJ(G?;ZT!!S5aX-ofu3{NBOu9sJ(G?;ZT!!S5aX-ofu3{NBOu9sJ(G?;ZT! z!S5aX-ofu3{NBOu9gTF;g${o2;P(!G@8I_ie(&J-4u0?8_YQvV;P(!G@8I_ie(&J- z4u0?8_YQvV;P(!G@8I_ie(&J-4u0?8_YQvV;P(!G@8I_ie(&J-4u0?8_YQvV;P(!G z@8I_ie(&J-4u0?8_YQvV;P(!G@8I`m^4IHyXY!ZTYl_eC{xiJ)4DUa~`_J(HGra!{ z??1!)&+z^;y#EaEKg0Xa@cuKr{|xUx!~4(h{xiJ)4DUa~`_J(HGra!{??0n2&*;lD z`qG64U1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^- zg$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQ zU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{ z(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS z23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwF zXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwZcQU1-pS23=^- zg$7+{(1iwFXwZcQU1-pS23=^-g$7+{(1iwFXwbz$T^!W?dj~;-E;Q&ugDy1aLWAcJ z;5h_%4gsD+faeh4IRtnP0iHvE=MdmI1b7Yso+q9!|y%(-ox)b{NBUwJ^bFo?>+q9!|y%(-ox)b{NBUwJ^bFo@4CuGFTBF7HGSG% z=kDS69)4G4%8?H0Ur*QPMMtQAJ-vtDd-%PF-+TDIhu?eny@%g>_`QeUd-%PF-+TDI zhu?eny@%g>_`QeUd-%PF-+TDIhu?eny@%g>_`QeUd-%PF-+TDIhu?eny@%g>_`QeU zd-%PF-+TDIhu?eny@%g>_`QeUd-%PF-+TDIhu?eny@%g>_`QeUd-%PF-+TDIhu?en zy@%g>_`QeUd-%PF-+TD|h5Yq;;f4HV_2~Zs@4vwNFYx{gy#E64zrg!1@cs+D{{rv7 z!22)o{tLYS0`I@T`!DeR3%vgV@4vwNFYx{gy#E64zrg!1@cs+>@`Ap+pfBelKyTq3 z0-QsDa}nUFj`&L5IUG2L1Lv%uo{IxM-@iO}4hPP~0iW+#|G7Be_NO&xKW7E?oE6k_ zt)TkVyzA;*WbmW^n6`Iao$LFtdZ*;M$lyo4m+)NQn2&ok;9Pw0qkpJ>b~=X-=kVcN z-=rV)YQVX^PoMu4KFL?nuc2Q@zkz-e{T6C6oQn+p%zuLZDf(xq$#703a84y~P9<Nc&qWWb_eGv7XZ&p(p~vV6>a~J%=y5K3I4)bl{Hvws@{7JJ`Ng`0ZlgP>f7$LF!kj~xa}h>aAs_j3lGSpP+a->BSK7GW9m1T8Fm8Ky!?_5fR~BLPNkka8{Yz%&5at}hoQotnB9d4`bSUlP%|71j>a_GX_^ zyN@^fc(boj`>BrGn|(&@KHlu(%|71jACi1U!%6w-t24C zw%VJ0yxGT_eZ1Mnn|-|5$D4h;*~goGyxGT_eZ1Mnn|-|5$D4iee5hBpH~Wn2eZ1Mn zn|-|5*U0W(+narj>~7neeMa^^-t6PeKHlu(%|71j}&MbyWq_}-t6PeKHlu(%|71j|wZ?BmTo-t6PeKHlu(%|71jUHu9{!RKq-gMhL`!3|op7gi%om}9}3%q$DZ~7HHZeGZnZhsp64Ej5Y%Z0q@jXQ}hG$=cvcc3whJu#xKwc`b+c> zt)d_DZ5*M;=m~ntE7Z_BuX%*)3cQdveU5hpUdWqjp#ArrUAa-s^NBZ~C}* z1zyOTZm;q>YtA&hc_DAQ?Q!!$-gMjJ=7qdz-Q;{<1Gj-t=eoxOpLOy6tiELf&-S-n_t@7gXjK@}{1JH!tK(w>@rN$eY$L_*wF%+ujv; zfj2MYO}&o1sUz~H)%*S~Qa-YJ*Z)iT$oe_- z_c;Cs=s!VSbH0>!e2(|}y_9#Xt~p=IJ63<%m)a}hGyNMjFO|<$|DxwhjWt&PqUTGE zHCF$k=Sz(ve%6Pmf5Yab#t5r_!{(*N2x|>J@JDjC9%6Cc9+ENQset;y^CXaN$f6(-6gTR)X477;MiSiG`Bi-m&EQ;?pB-FT@t%X zVs|OG`nY3vN$f6(-6gTRlppn8#O{*VU23fK5y$RQPP969m&EQ;j#Hc1T@t%XVs}aG zE{WYGBj6=t-zBlTBzBj??vmJD61z)ccS-CniQOf!yCim3MCyu2T@k4(B6UTiu87nX zk-8#MS48THNL>-BDx*|qb#OR6`T@j-zVsu4}u87eUF}fl~SH$Rw7+n#gD`Ip-jIM~$ z6*0OZMpwk>iWprHqbp)`MU1Y9(G@YeB1Tul=!zI!5u+<&bVZD=h{YALxFQx;#Nvur z45&{A3$9NF3$9NF)F%V#lL7U~fcj)WeKMdv8Bm`Ls80seCj;t}!GcLXpgtLB?%=lT zlL7U~fcj)WeKMdv8Bm`Ls80seCj;t}0rkm%`eZXU);&7bEz)b+_g`DS%}GSJ+?>iT4$xr5d9$v|@ltLu{ibB6)-$$dCT%Qc6PX?MhIF7DQ2Gl15>XU)y4nD{A$$XQNW$$`8HVy z;baIWLpT}2$q-J4a599GA)E~1WC$liI2ppp5Ke}0GK7;MoDAV)2q!~08N$gBPKIzY zgp(nh4B=#`H5Pw1b25aJA)E~1WC$liI2ppp5Ke}0GK7;MoDAV)2q!~08N$gBPKIzY zgp(nh4B=!5CqpJIhj4NTCx>uy2q%YdatJ4faB>JIhj4NTCx>uy z2q%YdatJ4faB>JIhj4NTCx>uy2q%YdatJ4faB>JIhj4NTCx>uy2q%YdatJ4faB>JI zhj4NTCx>uy2q%YdatJ4faB>JIhj4NTCx>uy2q%YdatJ4faB>JIhj4NTCx>uy2q%Yd zatJ4faB>JIhj4NTCx>uy2q%YdatJ4faB>JIM+@E~I$H1^(UF+>vDD-5NX)c)?Q0}j zy8WA|_lS-}OCR^uq7k$liIzU%Rj-j~>9+TXjud69_lS;Q<495Vd-)#Lk=QtudW~zO zSX+HnXrx$My+?GUSo&IX!Sj;Bjus{>ph|)anHT*RpSv? zjYrB!x0@XIZvc!~TOP5tJYrRO#H#X$b>k81#v^5~&-68&k#g7?p|@6LvOcpi+3Gu1 zN30u<#58?Q){RGEn%lmnGZNF>_BEZ6nC7pZGeP)<864TuF+SEu)bK7fEBQZ@q zk|W&qyk;a{sMqp^)px9pW!O!Kq$`JCjQ{Nm5-e=8cvHEN4# zR<8(+#56q@rj5ijw?EJEKlb@@kk9!dZSN5s!L*Uwq%$>x);U~h9dV^~#8u;wT&6SS zGHZwqrDOax#$RLnHO60K{58g3WBfJ7Ut?7xZ}cqtYmC3f_-l;6#`tTDzsC4$jK9YC zYmC3f_-l;6#`tTDzsC4$jK9YCYmC3f_-l;6#`tTDzsC4$%&v^FY7c)N`)iE9#`tTD zzsC4$jK9YCYmC3f_-l;6#`tTDzsC4$jK9YCYmC3f_-l;6#`tTDzs6#?zsdJd`)e$Q zTkWqg{u<-2G5#9kuQC1_Xt z^mWxS{u<-2G5#9kuQC1_QeIhoz5bQ*%IfR&ueg5qifeYS zxMufCcbE9Rd{zAwSMFXZvT7@)R$l>sr8r7;uZPa0*RSaHD|-D(>vH;>>icA20z)P+ zWCBAbFk}KlCNN|ILnbg}0z)P+WCBAbFk}KlCNN|ILnbg}0z)P+WCBAbFk}KlCNN|I zLnbg}0z)P+WCBAbFk}KlCNN|ILnbg}0z)P+WCBAbFk}KlCNN|ILnbg}0z)P+WCBAb zFk}KlCNM<*-LB|QV8{f9Okl_ahUh;XH7-nG$OMK=V8{f9OjHN@xn{@&hUm9?`JO#S zPhiLdhD>0{1cppth<@Q~{wtm1F?s?+CNM<5S)*v`*GW*1(fXYNUO%ASpzSew0z-6n z3rD=OYXUT#z>oT#z>oT#z>oT#z>oT#z>oT#z>oopglasxwdV8{&&xq%@!Fysb?+`y0<7;*zcZeYj_47q_JH}v|3UfbalFeIW5iKs&&>W~PAL@*?x4vAn$1VbVi5>bal zFeIW5iC{vO?^s#A6CWmOe@0{9oxY8s^s}_R`{ho=uzJ_%orvLcyff`i-_=Lb-{aBW z=ULu0dIvY|#0@{|4>{srx4IKItiFPOCvLdy-7k0gp8ZL_Oxynfeg_loV8R_txPu9I zVuBz2HtPQXzY`Oz-$lQNdS}a>Xkhh~qdU>S>J`yD(ZK2}M|X;;-~D~`C+JVn573{Z z-q~`e$hxP$Kr84k(L=O~e#n_e=rMYN`nOWSe-<%ZwO z|M-0;N?2cTMg zKJL|tdu9Hwq~7^(FIMSUi`88R|fCJAFFq^+$&f8+5B6T_o9&1|5I@< z3R(R>755t5e5Q9$+-r2RdiTq{MmK8>^$v=A<*L;?DDIV?e)I+E->tkCyR0uca*2AE z#l14n>RlH1$~`?xxo3@`{@u!Z<(t*NTY0Y>vwA)1UfJbmWzZbzeHZr{gRI^&bFVST z>U|gY8hxzZcX6*=vU=aeJ!`P{Vx~T!GD@$hT(Wx4%)LesoukZA6qGqu|7O)aEWKCe z1PfDT$ZM(Rty5))+j(WwR4ldrLuJuaEOpzv4X0wM)$2l2)nk5^f30n*O3doD)~T|~ z&+--gsj|y$Gj>W?Qfp1Awe-(tyt1#$Pr2SSRmQsQ>+(}&tkra#Dr4P8?;D&dW39d}KUKzBeO+F^ zmCTu@>r@$QHC?C5SgWtgPpQPF)L>JpFWm>v@eb-;f>Y7eXZkAqRGI7}z6w884!iAL zf>W+8X?>J)d=*}^f4=hxZLh>mMOPp9O3@U$PNC}*x=uw`Ju15DlZ&oydzau;6`I?= z3O^NH-S#fQsWM;hs|w9W)_Kh|ZPRrsy85{3I;BFJ!q_Pl+7!}Gc!8szhCFlBzzGsy>veK9s6Hl&U_Isy>veK9s6H zl&U_Isy>uzM3$;Pl&U_Isy>veK9s6Hl&U_I>gv2yb8xBV;8M-OrK%65st={A52dOP zrJ8+9HT#yTK9p*Fmuh5}sy>wJI*atnv{fIft@==^@k^@lORDips_{#z@k^@uP^$V+ zs`^l>`cSI+P^xS0(sxl^6I5H*1f^Qfmufv<`Xf~Jq1qb1q#D1Zst={A52dOPrK%65 zst={A52dOPrK%65st={A52dOPr5eAa8o#8f52dOPrK%65XS}c0`PJ4{LaFLQsm3p< z#xJSrL#gURsp>O-mOL#gUR={2hQP;HH0QjK3yjbBoYUsBbFQq_kKK4pJNHT#yv zP}PTOt3H&fK9s6Hl&U_Isy>veK9s6Hl&U_Iu5m>5q1qb1q^b|4st=_(+8eYr2iFm@ z(f(3f^`TVtp;YyuRP~`$^`TVtp_FX2ztk?GWvl%qC4cNMwaFs;OYJ}AQO(NL{vvJ7 z&DB-!WYzri)%VQQI+HB&LhRbdi`Y z64OOux=2hHiRmIST_mQ9#B`CEE)vs4V!B977m4X2F(orVokcLtTs1b!+OGhpJ&-tL+-*p=uaw0eyR}UoBB3 z<0J3Tc0Kcuy5*tb?)K+UyZ9loeyAvaqPEA8hl->1E4yNs1e+nMzg5L>xYcg4;5>D z8;Z4c3*AO{&|S{t+tyV!ecOt=UyW~D(RaJVajkzoc&Jg^YDz!U*zLB*xQC3_4;iT+ zYK+#qD-*1LhrY2Y2VOsTq#XEIs(U%5aoSoTS6laTO0_C3_4xaU_&y@Ok8t!O#n+E& zJzT2$0i_;!AK~anIQkKeeuSeRkpqw9XrHN7aj90trCJr2YE@jSRdK0S#id#mmpXQj zaO)%7`Utl^!mW>R>m%IyND=h;TFsVfHCw8cYN=MLrCOQjV-z73+3I8sUCrkKui40l7zf1Uc z3I8tP-zEIJgnyUt?~*b^uaAG@_&1J!s>8^^zK;u|NvapD`tzj6E< z$G>s>8^^zK{2Rx=ar_%62jciQj(_9$H;#Yf_&1J!qj}-z5G`;@>3xO%mTE@l6unB>qj}-z5G`;@>3xP2%4q z{!QZFBsq}8ze)U?#J@@Wo5a6K{F}tTN&K56c1ir3#J@@Wo5a6K{F}tTN&K6{ze)U? z#J@@Wo5a6KqLw6TNurj-ze)U?#J@@Wo5a6K{F}tTN&K6{ze)U?#J@>mlq5Py;*!L_ zN&K56I!XMS#J@@Wo5a6K{F}tTN&K6{ze)U?#J@@Wo5a6K{F}tTDLk86@VJm#@OofM z{onlom#j0RRj@EDa$;uhr|!e~11F`lslhpv`mzpvL4Q>-PXSW8T?mY8BK zF~wS9O8M+>L-&A7bq}~y_kc^imY7mLTU}SAl+{+x3sTB$tLFtNWw_O=iz!wYQ>-qg zSY1r9x|m{hF~#a)iq*vwtBWaC7gJun*K@tPn37ZcYF=GT$uDk4v~S&(Yjj+$v3hke z<<)zsR~J*PE~Z#rOtHF{Vs$aa>SBu3#gts;*U{b{saJ|pBBa}1T}+9SZhLhxC0bfH zIX_QZ_kin&expXJd%&f-2VAOqz@@qeTeV!bgX zZ|c27PCbj+YfAid+q1=#C~EzJpCy*M{UzG^t$4M)>X>3(F~z!Kigm>l>x#=zbQy{+ zL(yd@x(r2^q3ALcU528|P;?oJE<@2}D7p+qm!aq~6kUd*%kXm zGW=YIpUd!b8GbIq&t>?z3_q9Q=Q8|UhM&vua~Xav!_Q^-xePy-;pZ~^T!x>^@N*e{ zF2m1d__+)}m*M9!{9J~g%kXmGW=YIpUd!b8GbIq&t>?z3_q9Q za>8~t~$6<6@i3KioD4qBmZT){^x@Nh-dqtEwsmKC|l>gy~ka+B59Symw7iah0a zF$q^hLO*MtBV?~!=0{5$*MBfRSP==Wfbt~`nL|L{;fmmmAX~sp4F>!s~UOzn);tu z>ECdU?)*|)yB4L|wJ7!VyH(|q)z|D+$)Z)VXjLrLb2XmoeU&-ZB&z>?RokmWtK`Ni zS+S~2(CaG`tommVss0&6s(%KNI^wIudR0VKTSS#=wN{T3-&G>Jsyb7@=}a8g6i3|! zL>$+sE!V`%*E;g+sF}GYX8MTk0hj)kUUQ9k;u_3cgPCh$reD*{ToW^`Ud>yBjcbg6 zYm9(v$^q?2gNTYhS?&g;2Zf>dW=9cPCF{$nplj?46sqW^M`r6GJBkvlO-WoOD8r9vJIOaz? zsDANVZT;f6bcBx42^v|IOIEK2uQ4vKsX}vGcWO(QXzNaGwG*^;r?%ReZ(;M)Ni1uxrXaeSYPhRrh5}w^7}ft+wm2HAeO|D73~*c8yVfjhXBk zWBnR4*)>M|HDUGvco?pIu|zUxPwxjQ(rPZP%FFt}(Y=Q&uZ0 zxXQ3bZLmgdutrs|Mpdw`od5X2x^mtcM?JEyi(T3usf>Ls{YM<}`tv&MT8CZh%3Gi5 zs|@Sp?K%WoSN8f$UvXF`d)LX{b+UJz>|KX!>&jlgud{cZF?XFYcbzeJoiTTvF?XFY zcbzeJU3~LrGr`uCd)8l|6;yYm>WJ=0l~z$-aadRGS-oPpuH3Ua_twe1b*jE~M$&bv zzID;e@A3lmIJnLTxX#$O4z<>y);iQ$SB~i%QOlY{mr-ZbI_z49UF)!GUAg4rz7nyn zEVBAa#JaM`>XpoO@@E~6t;4Z(IJOSQ)>Rqm708x#XtoZ`)|Dqd{w35a+w01WpGp4? zePdN_=$j`u)|DGNN4a6WMniNcO+&>rR7^v~G*nDO#WYk*GviJ}#WYk*L&Y>yOhd&q zR7^v~G*nDO#WYk*L&Y>yOhd&qR7{gyX|gK~71K~LOd0|HTC-`ZshDOqora2O zsF;R|X{eZnifO2rhKgyZn1+gJsF;R|X)-fSW~QNH8Y-rtVj3!@p<-Hfo!{3~Ohd)A zDmS-H#k8t5DO5~D#WYk*L&Y>yOhd)A@^-2-O~tgb*KJcV4HeT+F%1>dP%#Y^)2!*G zp<)^;rlDdQDyE@g8Y-rh&%e^EnTlz$It>-mP%#Y^(@-%D71K~L4HeT+F-@MQp<)^; zrlDdQDyE@g8Y-rtVj3!@p<)^;rlDdQDyGT&G*nDO#WYk*L&XeK%s|BqRLn5n$w0*n zRLnrd4D;CxRLnrd3{=dJw;A#_0~Iq+F#{DdWN(J-&5*qrvNr=2Gf*)@_GX}B1}bKt zVg@Q^pkf9pW}spQDrTT!1}bKtVn(_5=0QfeXEhZwP%)$2`$TP1F#{DdP%%U9Wyrk@ zRLnrd3{=cO#SB!;FfYzP#SB!;K*bDH%s|BqRLnrd3{=c0qx2cbs0>uhK*bDH%s|Bq zRLnrd3{=cO#SB!;kUtryn1PBJsF;C@8K{^cTQX2F0~Iq+F#{DdbjgNiw*n1hNrsF))+a!@e`6?0HA2NiQraRVxD zC`0t`M^JG?RCL={XEsDdt9NT}=<1By-m|?SHd?)BdqY%wBQ2ob4Z9&K`p7%9KaG9{ z)!oxN{#n|dr)((qe7>*9Y$)rjx^G&l`=+J8&-s7A@qdDPp0c6b^O>GyZ;*Q%$~~X& zS@wo<&yRWqW<$B>_E%`@-#ygUzk5ja?;cY9yN6W&?jhB`dq{nCW<%ukt9hsQhRA94 zPVWto(~o+m_XbyIHn=*o!PS`!uFhMRQFj+b)U7=tC1V>g4L^$8}fqH^QH~Fupth+r)M13 zzk8_Npsj!RP`gFjS7$avX6rMwi}uhLsP4Shqc3S+qSvUe&TMdXW<$<$+gE2cjrwyN(^M+z{2>CZFX{Kl%>pD>56Ry46=?Hbiyn=bRy; zy4!z*{xkIRsONVZcy>cn*DK@P4f#~xxqPZ;;nNL#x`9JCaOft)-ehHRla#2uTEc@r{kLgr1#ya|~% zA@e3=-ei?>Q>&DI<)5HGML$4)j(U#2sa*AYd6jZgxoY()<)(7g>Q%~3n7j#-H(~Oo zGR@ERYUC!Xk(=5z>i2qyUZS4YZ^G(LSiK3WH(~WAtlm`q==GI3Rm{dQ-XKM@_9wIJ^mmH{tLmYmb|vvCe_Rn{aqj9QKhfS&87LBB-_^XuU>5bSTZk z)jV9y!__=o&BN6^T+PGPJY3Dg)jV9yFF42Ya5WEC^U4YzF<0}-ilNk8%`>Lw;c6bP z=HY4{uIAxt9Lw;c6bP=HY4{uIAxt9z)@`#iuPWDSmgZq;o-5sX)w(`nmgbf1j-XkZ*Q&eq8Z}Gvurv=# z^RP4zOY^WaFBj+>Sel2Wd03iXV^f6WFW2(@{RH2WlLLbAf$FS=$?0O8l9xJAPuCLZT zriOe>4f&WF@-a2!V+iv^mDtA*o~RNFq+Zv3!Y6;iCx5~xf5In!!Y6;C3dd)9CH4uu zctS6p(2FPZ;t9QYLNA`sizoEr3B7niFP_kgC-mY8y?8<|p3sXY^x_GXS21dBQy9iN-j6PHNFD`nW|Ox9H;*ecYmtTl8^@K5o&+E&8}c zAGhe^7Jb~Jk6ZL{i#~4A$1VD}MIX25;}(6~qK{kjaf?1~(Z?BTm^*rpfT^kSP{Y}1Qvda+F}c8J9evDhIN zJACpTKKTxxe1}iI!zbS%7CXdZhhFT^iyeBgLoasd#SXpLp%**!VuxPr(2E^MDz?vvX3-6yH95AJFd*026)6!sDQ`jgaq&vrHP`nY%F>}t&QkXML6< zp3CfN%=M%H53m0@^mjS(dz|_E=pS(0W9}|v?ykmMKg)BOUB=v9#@t=T++B^i{>+}s z?CP6$`zz>I(XXLjN56r76a5ydUyIWDzGAq`D$p*gK)b90?P~n>qx!WdseUa=s$Ywe zei!{7`j_at==ah0&>x^bM1O?-nD69$+CM>mihh9p9Q`Xk)nC*81zJIWi5{X=^h5Lr zJw{JZ&ti5Nd3QDP`rA0;ctE>ByGgr6yN&AiqjcsoKB0a;N^Sjql=KBh{)X@8B}XpN zYgE49uQi71_oLK)gnDMZtL(M9+TT?UTlM=<(q(j& zXRXop$h)hN*N=MS-POqJwr4TBjJ&%Vd41#wx`l3|JLsOjC5^VqSdF&+RAjG4TerQJ zY*(YL+8S-Go_FtRwAE`e+U{z!b=#xuE~D)(qwOx^?5_N!N98X)moayjF?W|Scb74D z58v&{cdsAp;k!L~$L-IczDIRW-tiG%Vc(N?-1ha#J*w6{s@6U6=T|!7)qp)w$j|x% zj(C6Oo*d-o{vnTgUb9Dyx+lN5{bharJynlxzl(k!eGmNs`a|?b=#NqF!PpbitlopM zC#G4w2V;-waZhCPr}CYTdm@|FceCz^Y*ydRx~J;VpZN$qMo&=h!PrxkX!Rb9J!PiV z_do85f$rl+sP|y(iGfz{!PryPXT7yj@9k0V?NRUTDc|(I$~3F*a@|vQSy$0@p50N-{1?XLX-UaAgfZhe@U4Y&N=v{!`1?XMS?8&cVdKWZ%vYOrn&7Q2LcR{l!zq{#O zfZhe@U4Y&N=v{!`1?XLX-UaAg(Co?2HN6YUe5>hQ(7efNdKWZrvYOrnjpiRoP49v- z-)ednl=)WEyP(YXr!u_@%6zNoT~Ov*P49v--)ednl=)WEyP$cK)$}ev?*jBLK<|R) zO@3w5yP$cK+opFx^Cqk5U4Y&N&70gdy$jI0AiwzgF}(|Niq-Tk=n8_>^e#Z}g62(b zo8AS@o2;gH0eTmpcL91AG;i{8)4QN~lhyPtK<@(dE`plX)`5e=`0KE&) zy8yil(7OP=3(&g&y$f=jpJjR%G;gw+-UaAgfZhe@U4Y&N=v{!`1?XLX-UaAgfZhe@ zU4Y&N=v{!`1?XLX-UaAgfZhe@U4Y&N=>4{Q_wj?b@!i|^xHW4 zZC>+j9KFwT_x0TBgMFU65Bc{Y|Gs?piH@86`;dPh^6zuiY+vrvFD%P_R+E2U?(>-@ z|GwPk<0k(;@zOxGcN2iF6=Wd>?_-Sj>m<4#)W;xg?+|_edV)0 zmGapdLp?6+GcN2iF6=Wd>??15j>m<4<*L==!an1|zOq!GP+4l-LbuT!)LFW({PZj6 zzbd5qmx>4b8XcsJ4*QG_`^rz9$>^}p=&;Y|u&5SBvCokz6g3 zt3`6PNUj$3$@Saf)GbAFwMecO$<-pcS|nGC5SBvCokz6g3t3`6PNUj#i)grlCBv*^%YLQ$mlB-2>wMecO z$<-pcS|nGC5SBvCokz6g3t3`6PNUj#i)grlCBv*^%YLWS7kz6g3t3`6P zNUj#i)grlCBv(u1TZvpPk#8j`nG%&uiAttK4O60qDN)0el#`POCFSJDQm^!ul#_1z zw~tE7Nvn77m#CaeRL&*k;DpND&eLQHA#t@q(n_pq9!R(la#1QO4KAJYLXH)Nr{@IL`_msR{NEG*HTGYZG8{* zT}vfpwbgemm6X+fcdzA^l+{+R<(8DyR&Vfs~Z_el=GhCFQ@{u0Tq1f!cC`o<${Jk_+5+1yYh1^vS6}N^*qTo_Uqz z3%5OgEXf^iuktKcASFCfq5>)5loAz43BQ!&7r&#gf|cYK>lV6=?x6bpVI6nnU!w9a zQTdlxn=Mi8m#8;NIHg3rQNk}J`9;r_U#x#?g}@~UT!O$Q2wZ}|CHY0?$S+p^x=~3^ z(Z4C+lrm&4f~$x!WG+MIGGs2}f-+<-L*_DME<@%rWG+MIGA<}X<}ze1 zL*_DMF5`kSWG+MIGGs18<}ze1L*_DME<@%rWG+MIGGs18<}ze1L*_DME<@%rWG+MI zGGs18<}ze1L*_DME<@%rWG+MIGGs18<}ze1L*_DME<@%rWG+MIGGs18<}ze1L*_DM zE<@%rWG+MIGGs18<}ze1L*_DME<@%rWG+MIGFew9-^yfK88Vk4a~U$1A#)irmmzZ* zGM6E988Vk4a~U$1A#)irmmzbRd@GY_WyoBH%w@=2hRkKiT!zeL$XtfZWyoBH%w@=2 zhRkKie4u&d#}5ufn;cE1Uq0S*ujFY%^m34Tu=HA zZLf74C^M~I**H*UPNc4H56H{|W#&|E*S81CNvkW{1LdUE_YoW@C;g896#XNf>%HX% zqF+P5j(!9ECi*S(-|(8AOCG@O1Gs$vw-3Z^zvH*jKS#fVdY9~hxNY^l z0|#XO0hxb5<{yyx2W0*MnSVg$ACT1t%4+w~cNrWgtF6Av;6Pbz^<4%B%4+x2cNrWg ztF6Av;6PdJp8Ec&1I-rw$z35IXtwCK>*NE?7TxwL$^m=H4#aA=y~FlEl(zc5g9CBc z>Q$5jaoBo;MyOX*4#@cfa{hpvKM;p~+;<`zh{JAs&+UOY?6&vZ9*Dzk`%Z)ddBN>9 ze`XwUAP&3j>iR$&cH1@f0sGAk??uDG9Udt&~- zHSGZJ9B?)500$j#HSGW&9f;V^(b>o811QKZ!i$_W$v_ z$XPm5-q8_x$LbxG2Xf8p2NhBJFQlI9RYYmGH#8Tn;G+sYs!-KbxW-+c!k((wu z^S4po16z@stX`9>$W3m)L;KVEBo*qPipW1y+x1UH&hl~Z9jZ|CRH%6>c&b9pQ-Sss zIm_?mYNsN$TV2~!pn64A_d9xBy~4^&g_W5KD>D^VW-6@AR9Km*s0wo5?WPKDs^F#y zZmQs>3T~>X3i6qDQ$6ahwNQmxs6s7Np%$u83stCvD%3(1YN3i8=TG8VsKS~|MK1F@dQGMx zm$~gVnTlNIcAL*{msO~UDtN7e*D6#*6)K_%6;XwXs6s_l!HE@|SdkO`YIb5pPITK& ztZ4L6TTayHp(3itiEi786)K_%POMN7Rd8a3il~AUD^x@kMx~0JsJP3C)-;+yvuF<8 zK=Y{Uq6&3UMILn9bx}ngwC zuC6O`pY@N?FQWg)&!S$cP%l-emnw{66^&xSulU`;YsOo&RRp(1p=Sy`ru2jEtD%CHYO7%;p(ht!8 zj{XnyXXyV#^$VyvM=LPWzeaz7R?uIfhv@%8tLTU55qgZCpqd5fb^bT1xq#aG1p}#O z1kwO)piSw&_>>4B^|$n|^sRm@{nx0*U$r&nN`211`qaOrt$l-P|NZ%*f!hB86%Ew> zkLX{Z{|Wui=zl@~EBfD1tzYT58hbVS!Oq`H`)pSJS=kE-1I{qB8lsY*n2 zM8rmsVu4^mk)}eZN;0DcrVs^!Bms${MuCu6QLuN4h<)q=Rbv2*|H zAJF6Z&b{Bg-}Bt#bAGJ6vuE!;>s{-=*Za=9_mIz!nBBsDo+F6}(iO(us;B(w(vYMW(rYEcE$!dDC znx3qtC#&hnYI?Goo~))PtLe#Vda|0HtfnWc>B(w(vYMW(rYEcE$!dDCnx3qtC#&hn zYI?Goo~))PtLe#Vda|0HtfnU~WENjYFV!&9YnbUZ@aG1-hM8W&ZEBe5HSnsmOQzSr zt3t{28hBMGnO+003MJEP;8meydJViPluWOISA~-4HSnrXGQ9>~6-uVpFw<+8={4}G zv`D7cFw<+8={3ys8hBOOCDUu*RiR{h4ZJFpOs|1gg_7wt@TyQUy#`(tN~YJqt3t{2 z8hBMGnO+003MJEP;8meydJViPluWOISA~-4bLg=-^inOnxZky9RDe1vKphpJjtWpm1*oF})KLNIr~q|TfI2Eb z9TlLC3Q$J{sG|bZQ32|x0CiM=Ix0XN6`+m^P)7x*qXN`X0qUp#byR>lDnK0-ppFVq zM+K;(0@P6f>Zky9RDe1vKphpJjtWpm1*oF})KLNIr~q|TfO>dxvtG}uQawB=wp^9! z;Yp!fmFnS1pfsipPwWIa7uPfymoVU^(xqM7I_Iv5b|-s~y~v}vO&=bM5r}c6ysIBu7=h}sw2x!^ z@nXxY4v6R8fW@*Oj4Q>C)5i0cU?*jJnIi?$wDEl_Y|QF_n3;Ef$7m5YMvKB7LW~x% zH;fiRnJ)#gG6%$(91v@A+&_?Uo57Ys8E=9ZZ-N+adIqv@E!cVIcJNTL%g$F}cip)I z?8%nipb!OW1fa4~Qr8fLO&1A}hh6d==k+!Nyz= zID*8JE?|%1tGE{iHopG?$MWdNP1smJ0AiLE#QYdo!dEdr1{-rk;3YhhOUc>f9C9vM zOU@%P;=}e=@|>?CuO{b{sJHPdW?4bhhaf5$5c5JH>O&Cu2;RkWUPLY?myk=zyUAtb zJv`6lB-XCuy;!>r;z?E@)~`67_fDDy?I6LKb!*C6s5L|%i)YY=%2Vz$;Z zBy&MzE{Mzpk-45J*D_FY$CPUsh^M`QP!ezydc;JIh>hzPh^N7T&=U~X2oTo@5Z4HB z35jb2Y+NHiTq8h&%`%SAo>D65p@N{5AC3St3g~fK&&SR@y!v4dILng0pgn@5GyJ{R2?9y4)92} z_d!3lgVqV52O*0rP7wUe1}*rIjq(95!)$=t&%+W2+}E%$T5#4J?-D?NklYL@75X3i7Am&@ZmuSCC8?_2rP^*Bilc-o=qhbNyBHv-}tmC_| zS^(`ENz^m2QO|&%lc;B4Zy{07z}_ZA%;Ve;^FohAJp&t0@BABcJe z#1s5L(Y{FvMX7BEi>kf*C*OP&_U`Tq6KjmEr`2lLEJ?P;x1Yc&-w%LtUnOX`UCN-KM->-AZA^_ zmr1!67x4O9!0T^;g1c+cvW`bwPkzoVw~*U})Yt-QYysj8dqAY&xQHVWK)J>b``K>YfZ zC(kznWz7aC6@@(C3|q4AI>-tQuLH&l@E*nsLj2O1*MWV?XPSAk>Uc9KeJZPt#g;xT zl+`|<^l2gcw2*yT$UZG(pBA!D3)!cI?9)Q_X(9WxkbPPxYkRNvWSvWS0Z^)@B51p`%c!sj(IUjENN^PQ zk5!Sd$8i5+Nvse+i(H9{5F0{#y9#230EiU=Anx4&XOp;h12*p60CDdIh;=eggBQLteFI*3MxW` z3pbK7`YVzZ0w7ihfHL|kk`)4=jQ)yH1;Iu};9bZFp^W~DIQlC>Uf}#W`YS?qh%KYP zBIJnJGWsh*rik5MdYq%bBIJwMGWsh*)(B0Z96EvQw-g}Z@}{^Q_Sm2vCQtG z1?%)csTqoSeJQ4T6!ZF03{OhCjH-%xeJO^9h6&KAT< zJP<4KK&-?Au@VoIt5q?tR>d-B3wt&B5-Is!%zQ6qrWZ5Qi#d~1%v>&J78f&rixDl@ z9?>H7NSU`OM&{xin7PHsT(Ko{i;=lvOXe0MbH$drr5KqD|08FGSXl?kNW7S{G{v%} z4mQ@*fml-qVoe>`gX~4hEKM=5eZ`!mDVEt+wDjZt84rj|ITmJL!Q;h7&I+Z%DMro; zC2NY2r#K>KW{PDU9c-DIDdx;fF|U=yjOSv;b8&M#BXi+TUMq_^Z&S>9n_|w}6m#CD z1TnwCD?!W)Taq%9Q-bT=Z{QG|PYLI9N?0A0FyBjLRgaPM`$Q z`vWM^Tf*oqVf2{DieN;nHtg4$Tl zO*Etgu_t_tl)1+e#GX**9!n5=LYWaNLF@@-MyP}{LM4p762@K$XNO8SJ5(ay4qzKR z?-zWFl-Z#Y&JLAucBq89R6<=Up)Qpm#;^^dOW2x}nZOc8R0*yEV#};i36x)Wpm+vR zg!4fZ31#l61W_cExuX)sPYHFbggRD29V?-Zm0#W+#W+#W+ zf~uIHDki9k3C@`(sEP@yVuGrepeiP)iV3P>f~uIHDkcz7I3Gq-f~uIHDki9k394d( zs+gcECa8)Ds$znwm|*-QsEP@yVuGrepeiP)iU~$bf~uIHDki9k3C{Q>7#j(yVuGre zpeiP)iV4O>f~uIHDki9k394d(s+goICJ`ZPy(CpJ2~`wZYJ((HQHZqxpw#n8Xrr(< zDRcEnsNxQ=FImVIsaKOwMR|1qIgpf5XOg4NBx5g$*pqE!?3qN=31#e=MAXR`A-K(kB^vNyMJmaz#!u_L7J_*lar-N|x2wpj$@wJKtznymKdg%9u2XToB5bG>Kdg%9u2XTo6iinq)2{ zp~Lb?Uu64g+G}XPMEhmhuaK{iGCoa0pM`5l8J{LOK236bn&kL2$?<6t>MgH+Mt)9i zCby7V$!$VpnNY^3No1KYB4vDLo^;>ng^A8yHbhN?@uj8BtLb)k$;lTdY`j8Bss zpC*x~h(ONLCy}kv9w!r|R5D5CY!a%DqcC%m$W!zM@)X-MPm|2kBr`P03{6q7Q&8+3 zUW#+_DP+)Zu<>L|a46el^qQh>r;tI?E;I8fbh&IhM@Hrx2?`nUhZ; zR)sPrpQ0wGsL3g6atfL(@0IVqQ;06vo6NnZ5Mx3-*%FirHbt#YQL9tb>J+s)MXgRj ztFeDXj!@>_Q-~I!jJQ+O>J+s)MXgRDHsn=NtrT@QMIBC2hf|zmPeF~b4Rtt09Zo@q zr6nU|52nzAu+f7;JlPV&lPy6!+0si>Y135NG?g|@rApZ5lPIe0EXVG@@51N}ERX3Powt zh+d&6Z5q)lTu$Cg%Isg7N}HzArm3`PDs7rdo2JsHskCV-ZJJ7(rqZUVv}r1Bno66d z(x$1jX)0}+N}ERAD;^M~O{4l1Ta-498dxYwo90Ylno66d(xy2Rn5NREskCV-ZJJ7( zrqZUVv}xpp>_L<^jqDJL(x#CkAeA;vrA(ArqZUVv}r1Bno65yo~Eg^X)0}+ zN}HzAW~j6oDs6^Jo1xNXsI(a>ZH5(chDw{E(q^c%87ggtN}Hk5W~j6oDs6_@k)hIN zsI(a>ZH7vlq0(lkv>7UGhDw{E(q^c%87ggtN}Hk5W~j6oDs6^Jo1xNXsI(a>ZH7vl zq0(lkv>7UGhDw{E(q^c%87ggtN}Hk5W~j6oDs6^Jo1xNXsI(a>ZH7vlq0(lkv>7UG zhDw{E(q^c%87ggtN}Hk5W~j6oDs6^Jo1xNXsI(a>ZH7vlq0(lkv>EnbhDw{E(q^c% z87ggtN}J`lK1*HAQdhGa*Jq)t+r2DxHA`L1LRZ(KqWDzIwF8L-Ui#U;%(`cWL9Lz#v zrAqURpGtledPUQmXr!M zi&zzJ$U2iOVpS;XOtOeop{z5>LRZBb_~l#>znlx=mvg~qxrgUTnP1H!s)aJknni32 zWmX}J2p5X3W~r-LM7y*|1)HU=W)b<)BI``DhWG_-?ZnMx>IhL%i%R*!2oTZx0LSx02 zYBmdv6A= zf`j<3!EBNF-UcYPyozUyf_PdTIFc=+xaDXPPpd<_j4m5k^E9C5k$1`HvVk>E18bfJ z);tZ!N7-IRmkm&LvE>`j2IQttzVU28ZVKfa&j#eCP`>eOKyJ#r~5^^ai-*q-1D}{Jk9k`q}o>m7NPpbp(C$l7;R)-cm ztq#P~>cGdzC&(wsr%74;)qt!N%IdEMWTjBXl?|+R8c^-X-d<$8eDB$Stdwo!d(Q@B zrP!~KuaS7xC|dBW7!XgZ1K(oHJM<5pR)?1L5Tt@@4QYhoE24tlW&x!%tlI{5}$;t*~CHjk5*}!V2fmzwW zYNvtKP6IMgwv^Rh4ah{Hto~|1wIh@fWdpOX0of<#BiYx0>=RqEuL0Qy8`&q6nUDr% zUjr+g24-IaE1U*aI1Q|D8d%#ju(oNyl@ae{ZPUQorh&Ch18bW`=3OK5ZoAjWylX`6 zh&_;$)gz6#qDhNH}5S|c(@-g`P< z72Rm$^{Wy2BK9nNu0~v0#9l-$CYO*)Nm&Edh!_^$LoO$A*B)AMe=c}GnI+}Q(uf$A zvyyctjfi2PtQ~5^l|?9PhZ=EZk#k;2t|FfyU*vw)kg^7>5!VZ$tTt)HH9|h4tRQN{ zl|ow9lb@4Y$ZbMi3mSPXXymn^5%GrOBGQDi{-hDnCB(BvK~eig>U<*=z7eqm?;)0O zo`@x3cd`fBixl;4q;5A-u^Ul4p@r*D8c{o853Gc(0$-u_iIS|!2h;>$A zFOo3>g_IUX4&q#FC?tq)mi-?P?I3hg$e4jn;#G-u5O)E95+Oe#R+oaPD?rp0AZiH^ zwFHP-0>s=kh!H4=xfE~!+Xs?^NK_PPM=b$jJvoT=`O|1HOZ(Jl>BN!wC?~hw+s#<2a`jP z(M>Yr0Tyvf%x}ZSN(m5Ge{eKyjAvnsJ~!d&FYm(DAH=e3n(hxBr`C66XF>*;#ugC zqS8%>XL(grx(V?twy1Oy;#q7_=_aVO*zIYHN;grZo2b%FROu$Fbdyvgc(oI^IZ*l( z--*lis7ye);x|cU0-`1XkCr|{gp18clUf&cKa!D#XqOgI@+K%bh?oaav0(p*e6bm0 z)bl3lc@y=#iF)27Yy7ZHirc4YXJ|Lb(UB2&71ay&hU!JQk^Gq41m;-1$Lb}=>LthOCCBO|hwPAdN%fLr^^#-tl9SmUv`F=mWA&0_ zcH~&SPcfKt8Wpz}h>iyZPo-Ya>LV_xJ~z2sQELthOCCBO|$Lb}=n9s3#$+3FLv3kid=5wrG za;#o*tX^`gUUH1~9HTwQXwNa)^Ni9wqcqR>%ridojL$r^Jx^`VQ`_^5*gUm8&$!J~ z+w;`+JheTKxZUCBF}~XXiniye?RiA+X4sEN^VIe{qF35Q+w;`+JheSfZO>EN^D-X9tD^0BYI`2hE4FBR z9u2J zJx^`VGurcv_B^9K-yH4K_B^#cj~PYy8DmwPo2-BWMceb#_B^#cPi@a*egoTJeq%$> z3feBjbqYL`gsQ_vMFgTE0*~6c7DPn^;yMMQ;sQ|-fya;oxFu#q&@za`tO#t(D1y*@ z5G$WS)I}h22OP;)Q5V4;O&hrb8!JdbR74*L(V1V zk+>pY%LOFHv#>Fq1u>olF`fl6o&`}gff&_-i^#>~5)#)1wBxz}E+aA10vj_eAZA)X z%(Q@*X#uk&swUWv(teD5oP2_Ol6;y(W?@TY7Ko||L}r1Q!v`^k557R+8UY*E2oU)N z;u-;B1_s160>lUx#B2=s4vBdf*qDa_ag6{m!UZwH1yMVJxJH1uMu50R1g#{$K!@~5 zTqDr3hwMl43v5XnwG-^tv{5_3ZcDp8ZCoSJg0U@#Q7za>ye%_lwhN}08uG{ zsFXldN+9OsK}I05Nm}~xRYss>6I!sE8bqZOw32KJS|OXTf5|40Q7731J5DBLdzl*q z)3mW}7B(^n#GHK4O6CT^kI0SW$KHC4Yvho$V7?Q?tUNe| z#26Yj#uMP_p7R27A$c8nJ$VCp z6Dir#8rdU9$I1e5F}Z}q$^x|9O)eub2Z@#yy!WE2qF-q(pRUL^OJb5#5>*-5L=s z+ek#WMnsD(5#1UQ4I2>+%Jl&(BpCyUXq1 z(dGI8qV@+jlDIy=#`U4~hYIeA0de0Xh^N*;x0*W7F#gS4SNxZd2ZNC$fYFaxzU1oZV+`1hkQ&vXYfTH zYYmBcZnR*83Sv|WV!aiJ^;Y0I9ufCC!^S)}xP{y%M7&{p#GB9~vEB+c)?0yCZv|q# z6^Qj#Am#!=%mRWKS%SFN8N|KLAntVraj!Fod!0ed!-2Tl3BJCVTSL9@zr(eGP_X9zoupj8%T^Uf*}BWt6ifMSm#r%Ys>62KhT^L8cG;%V zUVUwsZ7GiW^Df&_bj{sm`^sTjYL^`vZw6g=*^$zzlh%J=n_qwu;^3ASxT^XusyKF;grS5*OsT`?Zv#Z@w zTBu*_vK__J)Lpi(jMc(jcIe)u&EI85%HS5i(e~t6EpMUi!*0>)HrfHt^J>}=?KJHc zu)S7;X}5;ms?|fZ+i;sbX}5*FPs^Wa?Qi)rsK+q4=@yCd7D(e4C0YPp@|6(8UFE)N7^RI3C{AKsRyJN~gWg7OFf;9?9 zkUh^(O4%l_l`B=s6eWq4N~H{cO;Nfj%8BJuXHH6`D`PzmKfGrbVK4Fs@@TS;u*c!C zfzwi{*r@V!<&4s4so22sswv6R%Chn)*v;-EkHX%kC>3bHwxdd?z&aHtl*9q6l*#xb zl`N~mzj8KHa31pSG$q4x?uqk}Pto_^K1uT)o7;OReUz^Jzj#bOwKA}LO69=vX_-{4 zXSc&+eRrKD4h_3UpRRqn%DMl2hT@xlImcM@Nsh%COv8CM`z5AyQbwX>I{x0>CTGWjsIken4*kLO{;(dVx2~&rk9C@Lw4)cyLYS;Ui?4!WRNmU8KWqJh5-}dhDwA( z1wMFp{8xd~o6b|50#3vsGjLTE{%v+ucWgTi_SrbW33z7(-jil0OE5LNwL5lOSvj?$ zZ};vMrPE8NOevk%Eia_B+QxhsHx~I`aX*drXkH&H2qsFkua`e+w9Iuit ziT$8DT1*+jEt~hf`z&KP(m%sfoI4Y3Rrq%T zKYNUyNaCgfdzglQ$L~5PIS)CybYc>pUAz**IhQla(%8@LEtQ(vPA{=SIRw!znZtH;Bk`Jay-vu z_uh90!~bn+N|LAeN#(rd6HMp7yTdVtK-}E}yN~hDbCW$Z`{rQyN<7x=VcD0+&u$So z1b>S!#cz|i<$pR}H^sw$qyLJN<`~T2%u3)e|A zbOyGZM6ZvhcdO{-G`u^BQr8>V&;PlGiQ|HlkBk5hOq za`a|z59Hs&u_eG9fwyX^CWh~nnW*1&xog*GjRf}GX5(4PVdfT(a~dfd89wHT0Uh3KBMSt89uY9K}tCff2IBU5lEgVqfM+M8MPf=mqbTkKFot$Hb5URM;cl&LR&v>Uv(m}2Cqq@5WAwjnxjX(u z_2gWem9BZ~sW`r9cJt*;j`X+o{quOuxmtC!V zIEh{oeQ*B6e;+~oRl&%Ub8L=+e?O{hEoarN3=)0KirD-K|EaeBlNgkk8vU35|7$-t z_u@Z4pXAF7oO|<`H2Y4j-4a>Ng;sL}G^?w`>25V|ju5#H%9W%!9we8VxA;#HGa38L z;QbOk|37^&F|M_{FU)#M8Q6f>r z-Ld!gJLL>SOQnQw&hx*0^PfJaR58ux@wWy@JtWoEZV&#~t2`>}(G$xmViU?IPpzs< zO^Zpr7DL0-(rJ~k@^lOpBnw_Cg1g0HL-?W;cCm_Gb$Z{}%<`((gwiRoX{fy`DyNl= z$DU$km9f$($?oOTVw200W$BsHfO;N>sGOLJ;ZTz+WdHJq9Ai*wN@`l^q*zha_(^3G zVyBc%NKL6o#Y%A|(o!)om5hy_$<6Feb@WCc^-X&IyN({bh3Ek@6VNtl}+JUOe~*@k1-K@!v~vD zHfd69d@5E|kxExh>JozoVy6umJ$U$-(Xsx+#>GzSKXPRMVWY~x4J1w15J|)8shQmwfH2Y1WB^{emUfCs9fivqT;{^;CX3UuJ z*GK_9ExlaP{aBnx{|X$kVrpta8NwiS-h>qUr%S9X-5g-kQs^XXk}RK4H93VSoiVX& z!bEX-Me}hbbh}8<#Zr^U;{)(y7|;0BRZ~hQp^wo#wS1a%{I2N3`8J3Al*)2?Z};xI z{LA~3+qAyG81vG|4(Ot zu97s~m8*Zbu1j-k=}h!UWeTq4D}SFUJ}HxFcgpR`=;p4FERdbbU|zgejzrGjGhi>} z_>54HZW1E03I38TW+2i3da(S~{p2Wqh{9m^H9PgAtqGIf8^e|2~1{ueI|J}ZaT7tn5V#Ya^A^Zm%JqQ@UQ2m;0#cJsUfyI8?Q9N zFUJ_i!sq>r!;M1Y2;&&Mqdz{+G!%JK0L$mq@PGVoC!RFdZ2gmM?!n(Gw$c?tF)^oV zV~*9uaK*>`WT-^S9+`?Af?pIz_UREA}eWp7OTxj`ARS{(EJ< z@`3WcvJMgOHD+<^&>v;WIp{r!*E`Tp=OU40rb`CH(-D7Pp;)U%6rQilQZ7)QRPIzR zQZ7_3R%(>(%D2kXDxU1D+Nz_vs;B&+{HgkCpoVIs>{JzX54DBbQdL!ai>bCz+p2r2 zd#UZz0(Eb-y}FOuLHSwvMcr53PmQVjs~yz?)K2PwYG?Hz^PU5zI$9lrS$O>ZfU->;tDdHwu8vcS)e<$X zCe$<3Gu5-yQgysKK~1VDHLYgUiE5d8wt9}TLY<^eR;Q@t$`{I)>Qwbyb(&hCR;pF% zbajS$9)9hyT0LLAK%J#ts9vOAtk$TPC`;8#)!FJCb*@^g&Qt5udi65(a`g)JO7$xB zYIVMPje4!RKwYR_r(Un#px&t7q~5IFqTZ_BrrxgJq28(9r7ltzt4q|S>fP!x^&WM( zdart)dcXRB`k?xd`mmZ+A5kAwAH%QNJ)u6SKBYdbu25I1tJG)IXVvG_=hYX~7uD73 z8ucahW%U*HRrNLXb@dJPO?9pMmio5(j{2_pp8CGJPW?b#uWnF3R6kNTsvoPH)KAn; z)z8$=)y?V_b*s8f{X+dxZBQH4uhg&A?dmt`x9WH5_v#Pok7|?plbTa^sCo5g^%wP5 z^*8l*^$+z=btk@pP&G}{HA6EsOS3gcb2U%%wLlBCNZUhep|#XnX|1(3T3c;TZ7;2z zR-o;zwb%C1I%xZ9`)M(4f32f-fYwPnQ0uH6q#djsq8+LorghP}YTdN%+TmIct*6#Y z>#ZH39jP6q9j*1z`f7z*KkXRpSnW9Nc&)#7f_9=dKs!krs14EvYeTf5+R54}+Ns(w zZMasXjnGDFqqNc57;UU}ns&N2PAk?*w78bg&d|=(&eBS?@!A9}sim~EmeD3^W!l-= zIoc#`vNlC4*QRRcYSXj|tx~JfrfV~_^R$^-wRXOCfi_FKP`gOGSgX-4(Js|yYjd=@ zTCFxutJCVW%e2e2E3_-MtF)`N`PwzwwaNzNb8UgPP`ggMUb{iNQM*aIS-VBMRl7~Q zUAsfOQ@cxBq-<0^RyHZ0DIY4IYKyfc+EVRqZJBnDwp_bcyHC4cdq8_odq{g&%W98k zk7|!;k84k8PijwTPirf*mD(!p8SPo^IqiAv1?@#`wYElkNqbp)MSE3yO?zE?Lwi$O ztG%VYt-YhYtG%baudUNQ(AH}kv=6n9w2j)w+9vH2?NjYD?Q?Cjwnf{jZPUKczSJ7D zM(r!@Yi+ysjrOhfo%X%jSr`&s)%`&Ii*`(67(`%~MgE4r#{x~?0# zsav|OJG!fTx~~U%s7Lx9dJDa!-b!z+x6#|`d+K}X?eqeDZ@s;~kKRGwSKm*M>HF&) z^#k-y`hj|9{UH5d{Sf_7{V=_Y-c|3Wch?Wsd+0s&UV3l+2>nR?DE(-?kKR`=)cfhj z=*Q~E>BsB+^%L|H^#S@x`apeKQ!UZUKt$MuAMhJL1gmR_ol*C*&nJ*B7hj6P8>!!Hk>qfgQ&>r?b{eX4%0aDGyQXYv%W>&s&CW3(7)6h^hW(F{cC-@{*C^v{+<54{)7Ib-lYGe=ky(VUjJGD zMgLX*P5)j0L;q9XX()zjXohYWhG|%aZ8(N&c!qBTMrcIF9!3kJrP0c0ZL~4k8haXh z8SRV$V{fCqv5(OK_0)bw%-G-PXdGa4G7dC48wVK&8;2N&8iyHOjIKsEqdRJf9!5{2 zm(d%Q#gWEQ#?eL}qc7@=eylpA*6VMaV4P?SFitWCqBa|B3^9hHK0C!Y)fk34u*eu; zj5J0Wqm41B2v0LkH^v#oMu`zO62=+EnZ{X0sWIM|U?h!{kv1~MM5D|&+c?LVWK1@u z80E%P<6L8!QDIaXRmOBXdwxp9SYrE!&UwK3ng#<W<(Gj2ETFzz(&G8P$& zjU~oX<8EV_agVXwxYxMPxZildc+hyrc-Y7qj~I^{j~R~}PZ&=cPZ>`eD~y%KD&raB zS>rk5dE*7+MPs$G#(2qi*?7fx)p*T#-FU-z(^zY~WxQ>?W4vp;XS{E$Gd?iZ8yk!d zjgO3t#>d7c;}hdk<1^!PW3#cv*lKJuzA(Nt8jMEcE8}ZpyYY?jt?`}lz43$bqtRsi zWaNw;M&9_@_{I3u_|5p;_`~?q*l8-JYHFr#8m4JlrfoW=YkH<{24-kR<{oAXv!&U} zY;CqN+nRftdztOb0&{P(y}6Is!Q9u}&y1P-n;p#q%ueQkW@qyt^I-E3^HB3Jvy0i) z>}Ga14>x<5JQW?pVyVP0uoWnOL0H?J|TH5Zr*&FjqT%^S=c&6~`d z&0EY{&D+e|%{$CH&AZG+=3;Y+xzxPdTxQ;5E;sKr?=$Z=A21&@A2J^{v*sh_qvm7g zQ(He>HzIe>eXy|1@`6ilthbrCWw&T9##7 zj^$dOj0~h zb)ePRI>b8EI?U=~b+x)#-L1o|9#&7Qm(|-k!aCAA$~xNWWA(KPt$x-q*0I)c z*6~(<>jdjWYk+lmoQ>;_1Vb*Y~$Qogdv_@H@tufYE>on_hYn)YV zl~{2rVVz-}X`N-2TH~z=R?jG<*b)j{Ub+J`rU1D8o&9>%PbFEryo>gbnTbEgvTUS_DT31w4=3>qhG)>t^c~>sISF>vro7>rU$~Ymv3sT4F7=?zWa$_gKrVd#(Gd z`>hA82d#&!hpnvji1n!TnDw~zg!QELl=ZZ=!dhvqvYxS?wVtz{w_dPbv{qYdte32p ztyip9t=FvAtv9SUt+m!$*4x%Q*1Ohw*8A2v>jP`OwZZz(`pDX7eQa&AKCwQvKC?cz zHd|Y)t=2Z{3+qd(!D_U=vc9&qTi;mUTHjgUTR&JoT20nZR?gaC<*lEsU#wrP->l!Q zKde8kowj1Dwr1szRtehzQMlHzRAAXzQw-PzRkYfzQexLzRO-@ zFSeK1OYOVuW%fPxa{FHUKKp+A0sBGwA^TxFYd>N?YCmQ_Za-l^X+LE@ZLhFb+N}T!g?C0$l>=*6T_8R*o`(^tT`&Iij`*r&b`%QbT{g(Z<{f_;v{hs~4z0Ur?UT<%( zKeRuxH`*WDo9s{QPwmg_&+X0j7JI9`&Hlpv(r&OD?XT>w?d|qA_P6$T_V@M=_K$Xx z{ga)uci4IRXZsiXSNk{ncl!_fPkX0>1x=3T=#Jr-j^)^ng+ar?Z#S&M9#AcG^4pI31jQo&B7cv%k~PIl$@U9O!g*4ss554si~34s*IV zU7c=Dcjs`Yhtt#P<@9!raE^42a*lTTIDMT$r=N3-bF6cmbG*~vIl(#68Q`4c40HxL zgPkGHQ0HXl6z5cDm^0idaz;2Kol(wcXN)t}In6oU8Rrx`B~IK)IA=I#I%heh&Uj~n zlXOx}+Q~Q*oigWa=NxB}GufHqlsi+MbDe2Ug;VKNIn$jP&UwyEr`kE+xxks_T!BsmN-kDyPajuJ17=OyQ5=N0Ew=QZbb=MCpgXRY&= z^S1Mj^RDxr^S-mr`M_E4Y;ZnwK5{lXA3K|zPn=Jk&z#Sl&CV8QtFz7d!uir^a2lPj zoUfhj&Nt4t&UeoD&JWIyPLuPKlXG@BdFN;67w1>!H|KZf59d#3r;CMduIB2l;hL`H z+OFfeuIKu0;D&DG?%}p@Te_{>)@~cOt-GhYm)p)QaQAlGyZg8u+4DW z7P}>G+)cP=xM#X&xux!ScY>RAQ*PSLxD(wn_iXnZcal5Vo#K|eQ{8jjX>NsE=~lVZ z-5KtA?o7AZJ>R{+o#kHWUgTcv*0`6rm%6jvIqqDy)}80px%KX4?&aptQ>>OST^?mpo@=|1H??XGZFx~tr0+-KeA+~?gF+!x)|?i%+c z_ht7L_f_{b_jUIT_f2=L`FmU>F&gu0@c$z9lwHRdX{H*TQS*wenhfZM?SLp59*gO`!sB zZ?C<#4}PO$UvEDz=I!rw^bYVkc?Wu(y@R}iy+gc1y~DgNURST1*WEkZ>*4kEdU?IQ zBfKNMqr9WNK3-q1(Cg}#c-e7NtH`F`XJHA=-Mc&0;jdzK6sW;o3%8l|8@wC6o4lL7TfAGn+q~PoJG?u+ zySzo-VsDAJ)VteT=H25h_wM!X^X~T^@E-IY@*c($a31j<^&ayc_nz>c^q%sb_EvZ+ zy;a^b-m~6w-t*oI-izL9Z;kho_pHw!-|}tW@m=5ZeLwI+Kl1nR zTlg*gR(@;0jo;Sa)8ET)=NI^U`|bUG{0{!U{(gSU-{0@(AK-WL5A-|x2l)s4hxmv3 zhxuLnu6{SayMMUf!|&<$@_YM7_(%Fj`A7SG{Jwsn-_JkBKh{6aKi==}pWvV95AaX& z2l|8j!Tu0`sDHA5ihrs<%pdL-`6K+1{wRO6KgJ*HpXQ(LkMoQD5a1 zf4o1zPx>i8?PvUnewlx^e~v%NpX^WZ%l)bTx&Ac2!msqJ{OSG-|2%)DU+tgoU*OO3 zFZ3_+FZOHvOZ-dy+5Q}Vu3ziV^XvS2|1$q_{|f&~|0@4#f4+Z>f33g3U+7=wU+>@G z-{{}u-|XMw-|FAy-|pYx-|64wFY*`rOZ=t&-TpHF9)G!iuYaF^zyE;$p#PBnu%GoG z@gMac^B?!0@SpUb@}Krs_$&QY{xklw{&W8G{tNz#{%U`X|C0Z*|BC;r|C;~0|Azmj zzt(@tf7^e@f7gG{f8Sr{f8ek8H~1g=ANd>okNr*lC;q4YXa48@W`B#n)!*iS;eY8j z_>KNo{@4C?{~P~X|2zMC{|Em^zsdi}&-u9f%>UW{#sAg+&Hvs1!~fIY87P4oXn`IW zff-nV9XNp-c!3`TK^R2A9!geuBxn(|#62^QD^DnL$Hk+{W6GMKjdF?df>Il_4fYK7 zQtl1f1qH$0LHl5zphK{4uwM{UUJCXPItB*>oq_{{&cQ*!!OAnrv%w+3p}}E6m!NCV zE$AK`9`sOF20epbLGR#*;K<;p;OL-F&^IUy`US@X#|Fm*#|Qm`6M_?i0l`VZz+g}? zI2aNP4NeYD2~G`$1;c})U_>x77!`~T#sp)7(}L53aY1oV62yZVwOI%Y!R|D}$?otAqK$HNmyPf?#2AU2uJHLvUko zQ*d)|OK@v&TX1`DM{s9wSFk8p94rZz26qR`f_sAH!M(wK!TrGl!Gpm=!NWl|cqDi< zcr184cp`W*cq({0SP`rYRt3)l&j!y0&j&9AF9xfFHNi{4%gW`!E5WP5Yr*Tm8^N2w z+Tg9=?ckl@-Qd08{a{`2L9jm95PTSX6l@GW4mJg!1fK?<1)m3-gDt_2wQ|L!&YJIuua%D+%w!OY!?=Udx!1AeZmgmzTtjhEZjfr z7#S4;oxvcI5a#tJS99e92O1_i7!MQS8R41A-QihbX*gcFDx44|l?BSeFcqf5OgJ$t z3(pSE2`7bX@Wb$Ne-Hl%{|t9VN~A_wq(??%Mpk4;PUJ>j86LpC8jrNOT(f(1#=zyqGbYRpuIw(3g zIwU$YIxOlEb&a}3-J`>!9#PMzSJXQ?B04fUDmpsq6ZMS>qkhpb(Xr8S(eY9L=!EFR zXh3vQG%y+z4UUFHL!*jxsj7CMHqcPFg=(OncXk1hrl|=C<5uFj8 z8J!iCM&qLiQ8G$J=_nITjLM?3qjRE3(d1}KR31%@&W)x;6;WkW6-|$3MCU~_qw47V z=z?fgbYXN+ba7M@T@qay&5q_obEDd5UQ`#=N0&vHM^{8wMps2wNAsg=qHCiC(Zc9D z<*DfU=!WRV=%(oA=$7c#=(gzg=#J>l=&oo{v^ZK4EsgGumPPkO%cFav`=a}!2cid~ zhoXn0Z1hO%a%5|Hciq%+oW(6+16Q>9Lc(iuguKM%Q?1ji)2%bCGp%b_XIW=k2ds0f zYg*T`u5De%x~_FS>-yFWtQ%T4vTkhM#JZ_$cYItg^LaEn5|!>-N?itP89=S{GUuSr=P(vM#YMwJx(R zx9)7+#k#9?g>|KMH|y@!J*<0Lhpc;9HLGqltftknR;*QP&1zeRt#zwoZCG8aXKh+n zS$%6@ZCOL>h;`Ju+S;~`S@*W?W8K%fpLKuh0oDVp2U!oc9%4PzdYJWa>k-x?tw&jp zwjN_W)_R=vcphQ)-$bVSlM~3tyfvEwq9es*7_gob=K>xH&}19-ekSmdW-c|>uuKmT5q@BVZGCO zm-TMzJ=XtO@3r1%z2EwP^+D@H)`zW+SRb`MW_{fHg!M`5Q`V=g&sd+eK4*R2`hxXE z>r2*`t*=;LwZ3M3-TH?0P3v3Mx2^A3-?hGHec$?l^+W4N){m{9SUrd97t-n}*wf<)P-TH_1PwQXSzpek+xJ+b^+Y|PFd(xh= zr|lVg)=t@Jd(NJ>Gqz>hwqv`tXZ!Xk_Nn%1_UZN+_L=rI?6d5%?F05X_BHKm+1IwO zV_(<4o_&4$2KEi@8`(FuZ(`rnzL|ZleRF%k&e}OUZwGd07wn?FXqW6;*tfKAW#8Jq zjeT4Dc6QlbvX||OU9}_oJo|k6pnZG$4)z819qkM4i|mW-JK2}mm)e)vm)m!??_%H8 zzQVrJzMFk_`yTc^?L+px?3!J-8+Oxf*(>&{y=J%V!}hw}u{Z3l-Lp6CtL(l#u(#}? zeZ)R$Uu|#O$LxFC_p$G5-_O3k{Q&!c_JiyP+YhlHYCp_=xcvzGk@lnPN869FA8S9( ze!Tqz`-%3G>?hk#v7c%`&3?N54Eve(v+QTv&#|9tKhJ)?{Q~=i_KWNn+b^+SYQM~W zx%~?JmG-ObSKF_#Uu*x5{W|;g_8aUs+HbPoY`?{RtNk|nf9<#1@37x#zsr8N{T}=O z?DyL5v)^xj!2Y29A^XGjN9>Q^!HI-cV@r#PoNr#YuPXE}rO2RaXO9_&2Cd8qR+=i$yHoJTs3avtqG#(AvsIOp-s6PzbH zPja5@JjHpc^EBt_&NG~6I?r;R?L5bMuJb(S`OXWR7dkI;UhKTYd8zX<=jF~ToL4%p za$fDc#(AytKhEo%*E?@;-srr^d9(8t=dI4$od0#+?!3c!r}Hl7-OhWQ|8w5!yw7>R z^8x3B&WD^2J0EdA>U_-kxbq3;lg_7{PdlG+KI?qW`MmQ5=ZnsloG&|HalYz&&H1|X z4dio?4x$_I>m(H)8Upv2Xe(U_s`MvW8 z=a0^xoIg8%asKN3&H20Y59goGznp(N|8a52&>eRt-2LvPJLOKhGw!ULa?|ddJMU&( z%e7s{bzRT(-Ba9C-P7FD-80-X-D|jKxo5iv+;iM(y4P~A?Ow;du6sTA`tA+f8@e}g zZ|vU0y{UUM_gwep?t+_jb8g-Z+|Vt!MR(CHxwmj{>E6n{wR;=)w(jlRvb*FiyA`+U zM(%m;`R+mY_U;|r3*0-p7rGa@7rS?IFL5t*FLN(<@9f^iy{mhLd!>6f_wMdJ+yo&vu{VKG%Jo`+WBW?hD-)xi5BK;=a^k z{U7&r?(5w*xNmgdC=?*F;(b>HW{-~E95LH9%M zhux33A9X+Ge%$?p`$_jx?x)?)xSw@D=YHP(g8N1HOYWE5uee`zzvh13{f7HZ_gn6_ z-S4>Hb-(9+-~EC6L-$ASkKLcRKXrfR{@neA`%Cv%?yue7xW9FO=lKoACB~lirj!?ag?zUdl^*bKbm{@hs2w9MAPU z&-YI8PW4XnPWR66&h)O~o#mbF9q`WauIXLNyS8^7@4DXgyz6^6@NVec$h)z36Yr+p z&AfBHn|ljh*2{T$FYrRI;1#_^ujJjryQOz4@7CUJyxV%W^UB_mx9nBCsuy|ZdFOiv zz1w?t@GkJ~=w0YtQ(YH!;+=H1)7k9S}1e%}4P z2Y3(k9^^gPdx-Z??_u7%HB3hxbnJUEaIB_jv#3z1Mr6_kQmK-Uq!8c^~#Z;(gTn znD=q-6W%AiPkEpAKI47X`<(ZA?+e}+y)SuR_P*lb*1Pw0?;GAXy>EHn_P#Ur-m&+2 z-}S!dec$_m_e1YT-jBVXct7=i=Kb9Jh4)MESKhC^-*~_Ee&_w(`-AsK?@!*Jy}x*W z_5SAl-TR04Pw!vezrFwXWBxvW+@J9G`;-2ZKkd)>vwq4?`*Z%hpYbi<_8s5#J>U0F z@lW+n^H2BB@Xz$G;h*K7?H};Z@vrG$%fGgN9sj!i_5ADmH}G%h-^jnQe-r}Vz z{hRv>e%8e~$lL|9SrN{TKKz^k3w^*nf%tQvYTC%l%jQuk>H#zuJFIO5F-r+umGjbtgC4 zjec)xqup%wwx-J)HDKN8nz&QtdLJj7r)t`nF85Y@-PZbaP2BWyqus|T@0CvL>U3iS zrnqJT7Ul}&DB;$1w$kYW=KppMuzW~zj@8D$kZjmLtmUrCDlMX=}SjNmmZAZnadiu>eA`dX0`}ST_(x5w6p&*Rh3(+DleC+ z97j=}V>+g`{nF3`==&C$)%4d{k+3v`Qg7wMMhmgz3hU8Y;1 zTcsP#RW}E1aDwYO?XGy1$V7?6OC(+*@e+xbNW4ViB@!=@c!|VIBwix%Qg#1DsJF?B z)_Q%M#8JOOxJ;?bBwQxpG6|PSxJ<%j5-yW)nS{$ETqfZ%374yrmus5C5zQqEyF}Vc zq`gGiOQgM2*ndTDbxjyuBH<+xULxTo5?-qAKf2weRLiW}Wl~xurDalDCZ%OkTBelC zlyaHGmPu@x#Fj~HnNluO%4OE=ax~S}T}61VkbH&YDl96n2?$X3)J~v1pLOCmK zBA1mmk;{^kEIG-NlPo#Oky0*9mk-4QV!AehCEuJ>L@p<7FP9^o9O>jpCr3It(#erd zo)YINah?+A^E05@X$=O4Cu>_nj6bzOqu<`#O4C(-ll8S;Z+)_%;YMTF?@Tt;jlRjI z^52hpXGbOnjkTk-S^cX#=UR!u)Jh_V?Cru;f>U<+H9EaPtC>Db?$ju`s^U$r3V*Zb z4K`{W*aDlW)f#LcJ!;S31|_Z+g5x#K>zYb21M^TP-QPwovuzl4I`Zs6lf!HWcB9sr zlbw32vo+o6$HxoO>d~ITFuOc(o&t)s-Tk_D#mPA{i<79(_Kk3d!fm7e-GqR z7gY_O?rpTtfwWvRn`>>&#AIJ(m+9}wJKa~g3Y{4fG^ssj`zyG$rh?~U2qijuiJ>wV zL+BTiD2(3vL~F3-np##S&w5LFr{S#%YYXY80qc6*QdFn6DE|-=%ncJYIeA2-oIIjp zO&-<1+v<1r3PXSTn53ONrt+Im1&DtNPOo-)TPXX%R&Ucuz#tD+GYKD{GYv4>+G?!L z*HKV)+|q2|{^t7ZlA$xt_9Eq(lGdP@n?2t|Ngal9KEMS&v{YT1vlp14$*WY_BSEKR8z||zJ;UGD6gq4-4&#NQt{@fcym;|IV#>96>qN0ep!yD z)&|4PRzIaHQ-f27#pz3cZW$W1H7MmOVV9^vm)J+e+1Ad?X1~4B!oA8g#z_OuT{Y}& z;d0~376MWuvv+<3Le_aTsIS#JD}8mLbIxEYS+bmv#i@y^LPFesZZ+XOjSG@pjKfp) zT4Nnfzt%>;bO*OeaWU0WgEX{or_=5#1~X!m0&1_cTm5;hGGa^*@dk5~Ns%4==Onct zGdlKQSfA0E0B{>UbSPX7uXR_4omw9$PTl3DB!%}WMoulYn(HZMedDX7H=eVY46YA1 zF;t`#)a)JY0-oON3dXG*OZopI7Y-_h0+9 zHB`im!W1yA07Xx^kb5qU21IC9sS~Qy3A6}uvTaQ)JYNPN2DK7Cq>jr5!-$g&FUJ1@~qG5DpSz>XwJ}pzaEZt45@1P zrPUQ@)qDWYXl)N*E>@aA=9}#r>Tl3iin%_o`gpC5R0^9`b&5Dva(1I~(l!|>PbHiyW_*1Q?B1RfsfZ)ok>YMP8^)u`Im0yb-d zc1=NOwrUoyIF{xJ88jUzrQT6wB)!C7wrZWKDH;#m4Dwm2jyy~er3w{&CAx~N8a=v) z=6SfeM^dSwd^Vcb&Dmspnkvanr8aRf{1{9v@^gyv$1vURsl^lHtExm`$YeLsyH$jrjw&<0^STilj3bsoQ>YR)#(6L?!YrLix7FGu2!`pUtfHc-XD3MI_Tlz z{cx}=?kV)%8Ceffx}7Ad^;9XI-Nlg^Ts6eSc*DCjXw@(4&5rl72|~A?b&tACi7Z z`XT9uq#u%gf%FTcUm*Pg=@&@9K>7vJFOYtL^b4e4ApHXA7f8QA`UTQ2kbaT*7sL7O z&E9GY7l&WO0|4IZ+ zfZpU~Yk>AEf|GZsZEn`EFt|}~*2eER9KUcle%CgZ=hPx^cl_e^#3gIJ$xGX-8?}kc zYQt%AGjZ`+dtw>?E*`Y!R6d3iixCW-s>KChCMuf!88Dy$JxkD#PxIF#)t-|&{r)dIz%3x`EygMAfx;@6u$rz`@A6zK$wvzr2y`kHga!jB-d{ID+Rc!!ti7e)ADB*0`c&C=)+){TQf#;3D$_N}upT2UGS?bC}jF<`QAZC1+ zrp1KrP>aE8X9RAHz^(yjFEUW-;!)n!e(YNv#NcIdgxSku&+3W+(|5qKj;WQ)265!{ z@<@R6rK33Wm##HNn0+}|N4k#YgGKLQSrB8A!p+@ox)Q?hNsr3 z_*zmuiogg0V^>_NXA)i`%ip>E@_QrB_Gr?1=T|sK96A@=k4!z)`AnCjoay@Z46i z7q5>3>`@J}7Y}#zqPb?G=I6BrGg8g#5z=6KU<-<(=7VB(E^5PYW&zBtBoJ5Uven+| z#D(C>V4L(xT{P;+y%@CBLtO(*BTUXP#1i?y5IZBbzx6A{CLTgg*As}%ZVMYdBi2-a z(y;A40z{@oF+qYwF+qYwF+qYw(b2(To$0e4LT?wSPLH3_(D5|l{4MEYgYFN+BlaPuVK=1IWK zlYpBi0XI(qZk`0(JPEjl6L1YD;2KWAHJpHJI04sif->nZkv=z20&buL+&~Gqff8^7 zC0G&@Fj!*wa}Oop9!kJHlz@9E!4k`ViRHgU`Ikta+bRLKRRV6S1l(2$xUCX!TP5JO zO2BQEfZHkow^ages|4Iu3An8ia9btdwo0%}`W4F0eU*UwDgpOZ0`98>+*b*>uM*H$ z2)M5jG}->RuM%)yCE&hFzKGX@fsO}VX|&vA3Ao7;aFZqACQDEi zdpxMJGODZ$ZnFf~W>FSRz(tjSiz)#ZRRS)m1YA@JxTq3vQ6=D_O29>xfQu>t7gYi- zsst;fze4(4R0+7K5^}2|+oHQ7E;j%|ZUBUN znWuz#G0nofluMWwzQVll73O7-2=h`dVP57bVP57bVO|<(n3qNx=B1H_d1)jer;H(| zj3K9tVLSvhItl`y%VU$ht39(nngm^I-jRUq4*T&TY4k?jpX(MzF|6u*gQR zSg=r7d&DOri{;tcO1m8vi=`5w#f5APEyPeRz1HrxuUbm-N1YxRQTOk?4NRWeFhGjzarlQJu zZjeASFvB)$gCW_>3^%bq5J$zFwY5TGn0N}5Ud3|1VZVtO^v9kTqaLXpVbo)_?RJ;G zn3fXSilOaZQ~WY3ZMpvZBdN6{-=)2s{VTW9bzV3pfX8gsiHS5oTloff2pk zrdWE+EOOtvxFG$g$bIV~_pOWEw=Qzuy2yR&BKNI}3(|jz3({LRzPi`=FzW~JX2v!u%v;UYJui`<+pa&x-K&FLaH zr;FU2F6KnB7ju+5C*wykC*8Hk&Ff-Lx@$2fI-{5)eQsJ8xoKVGrgf2<)ZT%fQ<1u6y5NH>@8KDAFXxCUcP~c=sr>^O& z(nzZ|EOeaSC{9n}2%&Z13&xf9C7akGROmF0f@trCpwMU{6)UnJw%< z=;Y0&cr=?PW>+L^s4&c))g~ri^!w zb=;1iI98|7nGS)eBjS%iKt~^7q+(R@XNGzpjK@sPd;15j!2#~ksW@S z-VW5N?PNZ6q>XiGDMDpNmx9(*Z$lMIYKVu0P2qJ%h-?X}7_ud(An6ogICYiIX$Hze zfK>uh$230MjN4IPVoa?F?QN<2`MA_nw)352hdIR{I|LHaG}=mqU~;t%&}Hq z_mgSt!)hkCjtZ{jq{&v|GJXlm_=EP51lmg5#XutBFR6lqt zu6wAhz;;`KLj?}?Z(ntI)n(7|Hn4!E@HG&aC`C-6NehrOaxKPMp zjbO0Q5w^91wlR$$HBu;F3=|4g^{XRwb;2!)D!DWzq978Ey#pk|u%M{aHG)AwAshO4 zTmSa;Z$}5CzpEtZ?kbl2uGMA$>%Oi_ja_{fp0(O~t=3n;Z3QT=wuY3~(0C1FsILQ6 zdG`fW@meNcEl!I4YRRppld1%m+~TG7nt+{^Lt8b?0M>f?>xyLzXxb40(BQ?htsE?` ztH_<0Iy@8wRivsNt2k)J%0VkuJZ-IEF<%9*;MIEV;(2xzj#jL~2Ur*EYUWidRuNPq zR?LCT4Rrb#tm9DuaECK4I27Msj}g_r6@nu{eYH}WO(MA@l20Oml}Mw`tIa3yY(dum z_Dvz1>WAfpEDjFgbouJAzcE~2lkKqbLVmVpd{VU-oQNcY6e*`xyT@ z)rSm{Mn^L6oa#*mNkf+!I5kR~PNYqZlBN?WQ;CF|aUN;(x;Vdj45rclV(*O+IAR^M zr8q(-2BkLh`4l=Ii#Uy1HgIY%0!O~{y3d+8P|KLgjdIW6YC{5rTHb+Y)GF#IHq`P? zTs7xpcx`8LtB1=2JHmIS&tS72{n;?5<*S9+Ii=f-=bX}S21y-@!8H1M?7b3$bE+#F z|1|n@45L#UcwYBxgUzY#JwnjO4U$GjH}Jgf?J=emm%-*#zc&aDN^EY%-C@3l#(kEJS8%)%^vuXfzodhgafAF^QBK4J5vd2FynF zdV1^8fUq777)6Z+^wy&Rz13(yZ#^0i)}sMoJsJqi(SQMZG+=;?1`N=nfxvn+ptl|k z=&eQrdh5}E-fA=;s73?E(4zsp)o4I(JsQwkjRpkOXh2Xk6oP6r5HJlZ-N1T8ptl|o z46KF(rc8jULy4~$9R!mBW~t&OjCT{$9T~^Q%S#yX#?KwuzQ)T-81u$YC@tsb;Q_79 zIos*GEq4>$9a-we%S%}6#_#mq7P|>>M;5yA@)B0M@ym#%Zcv;KFrX9jXndqsv}84) z){@nLS}V^1h!vm*Ai{b8VzF}o5{v_oLG%E`GUl%m`PnTfi+azFxNguGdZA>h&79dc6kj665Lh8sK`Z8?Ih=g&Rq@ zYzSo+WJ3rp>C1)?aMG6zA>gDh8$!TIUp9n*lfG;S0VjRg5CTs6vLTdRkPV^if^5vd zWjV;k3~-i%Y|H>>ImpHgaF&B?%m8OO$i@tCmV<1}0B1SK#td+lgIsvYF34UCT$Y3E z#QU z+i{-lIL~&RXFJZb9p~AO^K8dFjg-x^9p~AO^K8d?w&Oh8ah~ls&vu+=JI=Em=h=?) zY{z-F<2>7Op6xi#cARHB&a)lo*^cvU$9cBnJlk=e?KsbNoM$`6X)4_w^K8d?w&Oh8 zah~lskoD{RFZ;4P5Fcko9TcQa^!QrvfhZ z6UaJsHjs5{xYEx9S*Hdr{XCF$YT(k(16ijAF8w2rb!yWt|#0<(JD(}rneObQ-PWrNboegCD8ZPO}`ZaLU zm-TDlq%Z5&z)4@$uYr@k?5zT4`ODraaF)O9t!4w+TZPN=m%UZsEPvTs1sB-oaHZjt-vY2?6m@?{Ib^yobt;V+-x9wu5c;8EZ+gA{Bi~tIOUi9R^XIh7Vm&l zemR2+obt;VT;P;n_F1z$90Zs0%VHgH$}eYhfm8k>>C65q{7GLH_kfeW?5_eR{UYTr zl75l$%id}>SS0;L$}iih@TdH;tqPp<U6ed=c(0D?c|r+(%EAo!C$^)n9uWdrKxfclvSfZ$L0sh@cO2>vX8>gRy^ znFoLnPWsf(JOBiL(x-k7sGkGsXC45`@&FKA(x-mr0U-F3KJ_yX0KuQ-PyNgTK=5b% zQ$OoA5%b)t02Y}$u@~3_dsGkGsXC44TJkqCr<^dr1lRoux zK>f@!KUtpnflK<-&ph)3f6}LZ=9wS(v;3)_dFBWHEPv`}p83i0%nw|)f9hwR`GG&_ z)6NX!A{G2eU(WmhXZg!TD&TDYa*+x+>B~hb;39u0`_tKw`ah)p52^n{>i>}XKcxN- zssBUj|B(7Wr2Y@7|3m8kkorHQ{tv1Dc}6MAGfHq}{NWiT;39uW{U1{Qht&Te^?ykH zA5#B^)c+y%e@OiwQvZk4{~`5%Nc|sD|A*B7A@zSq{U1{Qht&Te^?ykHA5#B^)c+y% ze@OiwQvZk4{~`5%Nd3>VRau^`f=l_S|9Q3w{!;%uTLoO|pJ%IpOa1d~6>zD4o~;7T z`ltTq*{UqhR>772A5#B^)c+y%KhIVno{axITLoO&KhIVHm;T4IRlsHZ=h><(&sM>e z_Rq6bz)7F_pJ%J!FXK;0{U1{Q^Q;xZNuT_Nc|sD|A*B7A@zSq{U1{Qht&Te^*_#5Nq*G-A@zSq{U1{Qht&Te^?ykHA5#B^ z)c+y%e@OiwQvZk4{~`5%CqQvZjXpNG`{A@zUA`FTkFA5#B^oS%o({~`5% z$oY9l{U1{Qhn$~>)c+y%f5`cHNc|sD|A*B7A?N2I^?ykHA98*kQvZk4{~`5%Nc|sj zejaju9#a2@)c+yp=OOifNc|sjejZZ)ht&Te=jS2ye@Oiwa(*6C|A*B7A@zUA`FY6s zc}V>qQvZjXpNG`{A@zSq{U1{Qhn$~>)c+y%f5`cHNc|sD|A*B7A?N2I=jS2ye@Oiw za(*6C|A*B7A?N2I^?ykHA98*kQvZk4{~_n+A?N2I^?ykHA98*kQvZk4{~`5%Nc|sD z|A*B7A@zSq{U1{Qht&Te^?ykHU!eXkQ2!UG{|nUr1?v9-^?!l-zd-$8p#CpV{}-tL z3)KGw>i+`ue}VeHK>c6f{J+5Ye}VeH!1;fH`oBQ^U!eXkQ2!UG{|nUr1?v9-^?!l- zzd-$8p#CpV{}-tL3)KGw>i+`ue}VeHK>c5!{x4Af7pVUW)c*zQ{{r=Yf%?Bd{a>K| zFHrv%sQ(Mp{{_zf3!MKKsQ(Mp{{_zf3)KGw&i@P4{{_zf3)KGw&i@P4{{_zf3)KGw z>i+`g{{_zf3)KGw>VF(b)%u}8{a@hxzd-$8;QYTp{a@hxzd-$8;QYTp{a@hxzrgu_ zf%?C|`G0}>zd-$8;QYTp{a>K|FHrv%IR7tD{}-tL3!MKKsQ(Mp{{_zf3)KGw&i@P4 z{{`y*0`-4^`oF;We}VeHK>c6f{J%i`U!eXkQ2!UG{|nUr1?vBToU_grIR7tD{}-tL z3)KGw>i+`ue}VeHK>c5!{x8Vk9^_Y-`jW#vz?;NdbXT;ySeNy|#k%PK#k$xZi*>QT z7VBdFEY_v|7wckwE!M^USgecvw^$eZbFp4yzCwSo-XJdY7wbZQu}=C8(r=J{gY+Au z-yr=4={HEfLHZ5SZ;*b2^c$q#ApHjEH%Pxh`c2Yrl75r)o21_){U+%*Nxw<@P10|Y zev|Z@q~9d{Ch0dxze)Nn(r=Nz?2Kg>TcqD2{TAuBNWVq;Ez)n1ev9;5q~9X_7U|=J zj@sW^Y?1y7>93If3gurR{T0$*5&Bi?i|Rr)wG=;}k*dd_&b>;lQKiW(UPN0qvxO5IVV z?x<3CRH-|v*-9#kSxc?Npm0GAQq5&k=f^>*wHRb9DaR`HNR@h|NZF>FQg@6cPHn`Xa7Cq3rBbO}l`54=l}e>brBbC*sZyy_!!UJm%xY?L1YR-%)h&u-qojhVQo&TIV5(Fw zRVtWj7^N>8vhR zQdh*qliH3!$(2*jDyN=RPCcufdR960ta9pE<z*_8im z%|NMg{G?E-7K3(q^t_BN1iQA|BN0OvS~7zu_R55Ge6A((`h&(=?vM7Bs1u&dL3C>ym}m2 zL#b+ps_N{fTH3Lzy9>Fs+anP}N<9%nN<9%Hriioj@q5s*XOfzbPsGw5 zULr3ehnI+C{89(wOjGR`oIPm5@x-MmkBefcXP^|GishqLDZCd;(7tHIvb4b7ZjVF^ zDT_o5DT_pmIAh!g*rO~GF{LaLv7{^#F%0KkB9ie_()8usW+jaQwXbGMd^MQSzAhe_)`(0sC z`wENNH%^z)Au%dxghd@9Eb26d0ldAOU~%dSo$b`Nc4pNuC>=$Og3?j07-hd5gHu=N ztf#iMquGyW^F>@Eh`2@&ag89NwHMLai)igdwDuxedlAe4j*w2A8`&J zaSk7G4j<95ifC9xG^`>TRuK)Wh;#UebNGmJ_=t1(h;#UebNGnnR77(sqB#}OoQh~p zMKq@(no|+YsfgxOL~|;lITg{IifB$nG^Zk(QxVtfBd*y;T(gh3W*>3QKH{2vMDr=4 z`4rK7ifBGXG@l}xPZ7x{*X$#%*+(>-A{tH+4X22PQ$)ilqTv+LaEfR+MKqiu z8cq?{>?5w(M_jXyxMm-5%|7CqeZ)2Uh->x{*X$#%*+*QnkGN(Zam_yBntjAI`-p4y z5!dV^uGvRivyZrDA92k-;+lQLHT#Hb_7T_YBd*y;T(gh3Rv&S#KH^$^#I^c}YxNP= z>Z7IQ$quge4>Fs0dv^33+oXPqC5;Q+?ZGAdkw~x4PA93A2T3$|Rvbb>CuE~Rwy{p?bTb_m4O_i(o5m)geuHr{r z#gDjZA92+_;;MbbRr`pm_EBXC7e??Phfvj^rYf)0?54`K`-p4z5!db`uH8pmyN|eb zA93wI;@W-0wfl%`_Yv3bBd*;?)#XfF(3&IlMyQm#;%ZX+NwIU;KH{={#AW-4%k>eL z>mx4LM_jItxLhA`xju@P_v@^+z*DU*o?dKDwKkM9-RcfDYgoT(ZD`lhhoaE{h-cKj zj1fAIv(O_fy`nBsv~)sybJ)du+;U@3AEATpKcCFU#Ybc{Gh8)Gy)@vGdW3=1r z9`51(Mql4%RG=yWyw9%Zm~f+6`K$`gZ_f+VRUg5qt*3+sh_*JXpA}Y+dLz<28HtCJ z=ZCod+Q$>DcuBY3nb*WO<^M+O>DJWX`LLE299QG14M2QHs++Xr9>pQXly)=uU8G>>QzIydesoF zUNwYUX8a|(dgTrNdgTo+D;Ena>d|bpB#9>)9gptoRYSOX)ex>;?SiXU4dIf$XmsGD zFPa@V>5GO3PWqzhfs?*yd_3;2S1sY{RZF;}FB%_spzjsvN0HmTzA%gTw^SD~o_K%j zNXsDV>XL!w>Qap9n*#>ZSC?W$z29sQdG$8NTIjO!WHabHXlSZ!;-xh8ZZ~{X(`$A0 z3#`U#RvzU>pys{ZMbiMHE@j0q+O>h@QkKEAWFrKU8AM5DV391wv}6X;lEsLU%pg*F zi%aubCgVGj$@nB>GG3BY?1kKd*b8u3TVgK&59aj?+ZzydtJdG1Y4nH3TJ3&se+Rch z_ix~-N6DyMnA$}5-O>v!Io!3FINIy-eH84B?Qh~m-2K&IpIuh;H{!ANh~CceZUtQO zA$l7)TdnN1=N9UVj=X%_-|Y1;)l{!}yL>e_;U&C@%EMVX5ETf2 zb^+Nq08XJ~;~MeV1!UtIIE9dnYkZc1T|ksyZb3E*;Lk26$__ZYyeK>1?DC@QfV0cX zMm2DDdD*B2t{2gur5>QCeA3qy>Lsg)XT3ggX{_SW?I@ed12_`t&8t?-J%WaY?;Cw+YGgXDr&i?u=5IJq)vH zjI>AE9H-Tzx0`EdtTXDN!*&De;!5Or(b~oYzU(k}WkQx2_0Xz%aDT3e=XLScX{&=T z7R+E=S8q6POfLzkx#dKf+16l7T@1yR4LO;{Q=96;8q<-ulab1D`i_Fl;_aTzH6&P@ zQIGp5U{=5FqafH*>SZ4V>UNryNn$RWm-d#;>y0Ad4Tj6mp3UnGq8v`li@!_?flK?w zNpAWxpMd!UP5QTHRCmVPNzGXdTN)Th5VZmhOA(hQnx$62VIcaKXOV>-rPk)OwIlEV z*31$559aheF9tB3G}$b*M3!12OD&P5mdMJyFqf5iAzbn!^FrX#MYA$51YVZ>WnKte zx@cDBg}|kYW@TQO%gVeEE{jm+g}_;aGA{%!T{bK8Lf|Y9nHK_QdC0sFxOCa9%nN}_ zm(9vDJMd^0pP;}K<4`!$8X9hdP1EZogn^O-Y4GLWM~_7#lFBP){eRR_x&3y&7IsOr)<5H*KA>#=#k$oyWar z9c2g`O64A-DvnD`2T2Bw&OkgQ2b+;%?yZD}%Ed&`iIj(k4qHqiQg}dyn-m*1onj@9 zr815YRiJS^g&c7;M|eoRy^6>5b<$Z_&1(3lb<(Y?+c4oUeAYTMt&PpCZK$|ZMZF4r zuI|-pRBa=C8siS8e_JVecUytFK|;gL42F$06xJ4AV%vg2iVv4`2PrTG3hG-o5>FP= za_H>SFoubyk#!Us2F7dmtLp0=xD7o^5H^lBabY~G+$K>L_~fFRN91I&46ZclT&{}g z3EIjErUZBo1;zko39z6cSW7;bCAP_iMCO` z+K$P9!vs2uLR;+*QKT6>w%zYtjo?u{?W0j8;|2x=Ei7yW$(JHC48 z(tzsQ^N?w?r9L^Sz6mo6BSL+W2FB+W+6+DuwAGq7Gg28C45qTP46-6k$`)Kl)Y4_} zrs4Lem&_;7Uf)(&QrubPAw34Yc+^3c3sd#pQOpi)UEQce6uOiiYuw;=Ts16C)d+W$ zur9y+!a};y!b8CF4Ujp)GJvggdOb{)F+6HWd!`hl7_T~8n=x45n#AXQplt@7VP7^O z^w=RItIAm?6@sz`n9Iu=AY2&+^0Ed9Ty#6{)#iAw7OvRxyjKfc%oE}kLi-OPKBz(qIn-Xn0)&Aj&rTy!(l0maL4@Mj^>fC^|p@p2r(OEZ^Z7f1c43E;Mg^3Xo? zkYeX`lN_&`z!kB1-2}LZ&Fdz>#U#UZ6J)rM%uw15@0%cEq#~d_8x~|UDaQ*ZaPukx z*016SA{1|&AVN_^K*Nb6NY(So2_k47784Q3gPb`<1ZlgxbCTno6Sz{WxO1W?;ORd@ zK{lKafu$fDPQY0Tvf%`rrI6Dc;7o6v0XdKzCqyI%vg4HFtrNK90H5>&2Y9s7WFT8k zh(Hcx%LzC+;B11|PT;ROz^$S<19BjHPKZDbWX~zbdna(o0jC$dcLIOb0#~qj?*#s2 zfGb$McLIOKK%nax0Qx8X1Au!*1au9lkKxGZFB6g9iaa2B#`6d_&_qroUO+qrBLA#`cFvyu#F70Wge!lUW_mV|fk z3@%m#CiU-hb6s3z=ka0(T+)_JBH%K>@?r;YQkP94;4=B)#SY-4P6dIB9kVM~Fv9Y2 z@9HTrFH!*eSh;AnnzI100*tw}FJag-Zy!_kaz~|d#S_M*HrSNc0r7&_yQV%Yg^vlU z4+Fx|Zmg+b8yPA^hMfVt!2{2XA~r%DpgKhy!IliQS*}0MWFK8?qitSP^F1L#0c0*%Gpg9hH1--#I;M3bB`n61egY|v@W@9;QNFH30k zyor@ZeB5}|#644Uy=TxVJMz#`kh6Qd?-|EuugSFfX+>tWkIy}}y0Q7B3^8P+!<5+o zli%BsDLfFqQzrNc8C6TWg*ZbCu~&${BV!cVs%#t%6wMsH)d(ZAPv24-h#m0h)mR7@pX% zV43ExsRZVLN$FN^1Hm+hQO-b^3;2iwx<{1&&H$ee6cTYsBz*9JH8dRAcR+Eg`GTtp zR+7-mQneGO8gA~yo88&&QMJv5FS5;cmDQ>tJ>e0^gie836-i_O6kFZ{#rOz2s>Hy8 zpK2;yg~UNx!n9^lxSp4eN8vaVF=fU{iq3+tro@h{YNL+NRW`QbhKV|h8!hvs%}-kw z%-})nKE5!c=PP0Z$x-ZFC`Ym3a`aOz}v{vSA1qC7XT zCSkbJBt0<+!xb?JaaCm!dwtE;>{_cPJul7XsoKE)MrT;h=m>*hdrKGIq>hO-0Nse^ zRg5@H)4;U|%yqFuTEoWikzy+RcPZ>@oS z>2r^+B8Q-J6*+YSSIVoxJ-Q0_=qlW!t8g{8!qwOc_vk8IjjeDsw!%HS3is$L+@q^- zkFLT!x(fH`Dx5r2xcXY*eXAgy4{s|GaWAJ%M1-T>B|faIO)p_ z4LIq`3=KHx%PBPAq%Wt?fRnz=5`dGw%+Si5CBUWpaw-it<(EkUaLO-}1mKikCJDeP zznn?~PWfe_4LIeOIYOB?)8SHn=|8|Jzw{sAlwbM}aLOVzpO6;r~I;e0i5#7?genlFS{4ODZlJq0H^%2 zdjXvC%kBkm$}gwf%ACBwrTlWr4LIeOQ*OX1znpRdPWk1O8*s`mr`&*3emUg^obt;l zw=!?0!=?PPYYm+8%PBYDlwT$=z$w3+asy8JWdZ}7^2-VraLO+e7~qs&PPvtNGaWAF zms4)QDZiX@15WwnlpAo$FQ?pqQ+_$+2AuNCE;(?@FQ?qfyqOM{^2=^HaLO;c<-jSw zoOT0F`Q@}5aLO;I-GEbmxtR`}^2^P1;FMo(rk8m$9WLdUlWo8$zuZg*PWk188*s`m zC)|KjemUU=obt=fbl{X9qm z`3uzlyqOMv(x?9C&2;#S{JfbCT;%7?bl@UCZ>E=dGaWAFr~c>7boi4#^*?W>!=Lo2 z|9LYV{-mE}tMGNo+TdLE5$}wK^x}&;k|(Gpt)^3g>iL)2 ziJ8}t)kI2R=?n2KpgXqC#eJ;B1YAndAKy<7?q_ z_c#*Xd5#0rJI`?d$|{C;BuEf$j@ayuz|B!Ylt(Oxl$YiJk2}ZS8zXRg1j=UubY!VI z4Prqq<_RBSi1SE*i5PebJ&uj9e#9`ofS^7VpmXFm33lSbDPH8))v3|}h~c_`Sw($g ziuxf!1lawg9N_7og_o)ojuW zbp}Y~ry}VOG{DuAbYvBx;;N81DmsVuP;OSm*rdm%$*fL~y7Ew@HK5~ez(=LoW|V>9 zX)s`jauq%0>LeGJ~t3mLf1~bA4QF1DbUmH=>>BTVvfw~c? z`~h#6V0#`s3FLt(gKz;L1Pw?0AM^)VSp%xiYJAmQ%Jpb6)brJL>gU? z8q!0g_5>N#=nSk|fkxtlsA4UI>c~oRuqpiNR;77V3PFOTPz=w?)up?Iv0g<`GHA|G z7xZZA%penrPnD5^M07w>6$)UBX|iD;wh7anP8FN-LsCspm5e52S`u;)A6-Ej^cDvRk>mc0NqWxQcs)AVUuOQiG-?vF?=DV&SH&0bu>nmRULg*MS%-8 zR1`oWN}UB?R|PL|WjsKcOWkgO50wP2#MnS?D&_{0Dpyy|#-UA31}=+OL6RLHDHa8g zi49ZP3V@%gY=X>B%4owhw~aWnj-e>BZ|LDxG1bAqBCfQ^jw%#Y2MQqFj%f@EfS<&d z(uS9o7OqI!flx|(xFUc8;zUv<9r6WjAOnH|WIzBU#Rot-8~_mufRqhJe;ExGz;Ym{ zhjhRcLLlACHHgTnmm663a*aqY2gqIyXj2!10+33z1_g>`pdt7wIRVSyqXAtHianh` zbEgVZ_|%;OASG2yN;Ck%ij=vkS0w@{Fuyn=yBk6gC^_qBniJFDAce4I8k!PDD8;hG z4NVIrImPv)M3NlY*#@TM;c6*RInpmxEvfdPDoI?aBUM*AX1`AbxXz(#6|Tx0T1d2C zgC1JXs631YK?z7yv^oJWB1;+*0<%RtObk7SC|Nb2i%+Fd1eL2jHkk%}SO=gpNhat_ zx}4y$c9oB=8u8M}J4}Z5D9HxKLq(QCkc?FXd^rj>0(yXa$V+`cO|bZrTxvFiuV|@; z2{TU+l}ICrpiVLfNE`&yZxp1FI0%hn6r>Ryq_S5QpM)u%1k-`4F*GGa@q`{f%0eS? z7HX6pWg%Fc1;1RT8ngQ1n-WoA`DB^awrIvWKyi?uq%3TrI#|U;%N?LxdbW^i0WWfs7$9yA(>$Z zHLc_5e!n)#91V;~ROW)kJgU)9qB78ktthJj%A~auc+AQmK`~J|Fst_Gmnt+nc;MyaO zP#50g2*7m&$E1i`hP%T@M^cQfW6q~Pm8Td(k0qvpRt=(pFpMQ4!lF(@Y#2mE#PF5~ zI&2UXbT|%D7);?rju-@qsnS%Fxf45D&C<4y>I)||+12eKm`R81mPe@EDM zOgU}=aqQS9mO^p2*&A$W1wOOd+1^~kbG`(M3kJvVTdONO&L6-nAi0 z3tu8tpN!p+l)>#21Ybj^-aF~3@*!B}sv@3?C84edt5v5GYFfC{cKXF}&tO#j9jrs` z#vvV2?;IT*kdGrLGRFX}^F6n=zScb;pFvIrV?wP{tKieIBwoq|he|<3@w9RX$hqpq zS{#sH(19Sea_$jaJ<|dCLLx=BJW8Pg{(FjiI7$&NoghW-L;+#-L@CNA2*@uUACS>S zj|v-}tBTQzQNgvC*)SnyZc#IR4OrkhF0Prf%y0pfVVIDgD2%POQ1Wz)b<@anu}eco z&a5ZxDG^t9_(?>NIX+@zhabt|8-|+P;T?gJ3zkfhxriqkN7D05`8@KWy@bUK^+dv+ zDId$;E7@5(4d#1$1(JvE4jx1T3<>Nfs+~$iaFFyoOE+dV&CW^=jad-Ype2Q(o5)78 z-bs!nx5$dx+>tTWFuESaZq%^Adc_XfF3`-j3wEgVYvmJkTQ2juhFGxthG0rm=_0G;D$;Q*a{6>pppL2&(-B>(amnRiv+hlCS0%(Hm)lhdqkt1t zLheK*mpf6(GG34LIA2vwV_DCa4f*aFO*K+!wL9t@I>~7`k+GLQMltQJ z^5zH^7xC`gbwE}PJ-f)N0@3avX5k6LS@S0jmj)1rpM|Lm zN>Y+>2lFXz7M?-1(m4lnS>v%+_<_}v2A_i&?n#q3P98k^ z9{pa#&%w<1WVxRMTm9tWqYupQmH&aQlP8DnJ!$r6$R`Uw@L#BJo;3A2sPU8LUO#E@ zIhfL(G&!DL;K%LvESi&-?19cnQ=fxL>`8M!a?;>)FjYKR@^i3ocCzpT|0Ve3xhu_4 zE`^86%audrC7Rwqq`wTy`)SkHAB)9IV|YtN?D(S#EZ$q93)hBN&zB#sgMX~ zQe{}`B|U_f{#$tQzobvn-z)#}e@VZ5^6;`QHx|ww`Ir9-e>=)&uk` z-d_1vPaeK>((=Pwn}^jClcTwX@zApwAK0PY%ire=O`Le*VmwBPhQl~edn!H0Hp;Rt zjh1S4z;4+xiZ)gkYqfJX2U`P!w%Zz&{7`nglSzQ;2-1w>ws@M#Z!}|3pqM1b`L9X9 z84?iBQq(S&gy^hBa~gFHWt7zpeSV8Br%a^&Ix-%}u^1UKs zZe~o=a(U@^it{R$cyU^ns={P#8qckuo*KPo>rnns_E4j#I{3*th#q=&4gnH9=3%LH zJP*1!R6yLY%d(iVM}QdAy9b)`u7T)yK1$N>6d$@G6Vpx97t2l;X}n;rwm0RSBcc-T|PocL3zwGe8Y+dk36|h8oiLPH{pS zC+djhJvyS46^5-nX{hmP?|>7@v8(xwDr!f-?)r$EUa728xa=2VsP_6SZ+E%pe8x;qK!bChm7N%#S1wUY#& zqej$|gdf1MypsfD@#!R?2Tsn~*(c@fz{wdq`{aBjCOmr-X>z`EeDK+c>CW+?2a>a$ zy9za$f8IS?o?_BIGgJ!M zvs9h;H-_tL?PRLliL#S`UFKeHWtT^O0j5(QM`>Xn;`Kfh7G5UYY-@uarP_yWF5YTa zM7(X~4ci~%#kw}s9qn6M|c5Lmu_vEgG(8-j5}v=JRq6JjFCfqClySmSXDWk)JR2P9K(Cj9G(1nBjn z1hDqw#AH}!ghN%aKg@Xrv+b5UFsZw>|jsG`mTeUR_v1@q$5;sus7<4kKT#UunSMGtN1c?Ewu%7Viu}aG!kgVm+|f^W@9@!2cqe@_Ypo<|9jP5j;?6NuU`Zcq zYbOy41)L1`S5yJ7*LHHY3wQ8wiq?)~)<$b1nT^%OBWnrSTr{25`dZS<+iYoCNk4p8 zBZ)d&*kErbeXOf`J2ekL8$)JeVdJsT@=TYeW+6tS~JOmwKb9m}C z4$}3h<(7oHMMY6%28}hlfY$&GkTpQg0C@uh1_%vMFhJ1&iv}nepk{!&0U8Eq8lYu> z6#^y0Ps#98GW?VbKPAIY$?#J${FDqoCBsk2@KZAUlng&5!%xZZQ!;GS3>&x=A_Y}5 zY}5=JHN!^Duu(H?)C?On!$!@pQ8R4R3>!7WM$NEMGsRLf{L~FUb;D2H@KZPZ)D1s% z!%yAtQ#bt74L^0m53YWQfOW%9-SAU4{L~FUb;D1?@Y68-Gz>ot!%xG|Y8YC$t0}Y^ zhE~JSY8YA#L#ttEH4Uw%q180Bnub=>$lj#vc!N@C1vsUwi3T{OOn|9^MWzZC<5VoM zV38#jEK-VKkx~SUlpvf&)CG+KKNzE#-{pH&jU2R&xX%~@$Vt{8y|b<*rNeI27lvYj~#nF;3wd3 zeC&y1PX+um{Ed%2ee5}apNqfovFDAw81PH*H$L{#u~!3r4gSW*UOVw{ME5v0si&aZvg*x><@td zIQA#Nf8J+}?b~PXbHKH`?`D9{-FI`q3;Sw->-!pjoBK8aU$w6fcrbp?v3=u*#t)56 zjNfbg`G8+A{&v9c7=H)gcaFao@cYK!5BLM)zXtr9@!tUc?SwTpF=0=9ZfxJg=O?}j z_-p%LI<{~B%l5x)Y<&OA_rC)0EBC*7Y-0agCa*KLZ}Pg6*BzUfyx!#X0AGLd`hagR zc>};VoV+368%?eNUY%S6+@5R$K0J9C@cLvIaBp%G@Kuvn0q##80ep1w0b}En51f1u z;0I5l{3o9<`9%0UY4Y=czcBd)_B(Ib?O-4drv(O@Pnov0{Ed*4+Z?N)HBESrJj{~;n;ZUMJcp_)JsyY2K<`T zn*hH#^-jR=N_`0Mhf|*d{OP%^v3+yHxhIcJ%spl9>wv#8_pPzKPHkFg&E__6lW0YAfj2H3_D*?aCeih(X+i2DH8|*g#exvow*UV*=h|yOJ^R@`?X`A=#7UAQNs@Gvgpedrk|f=ZF6bn;kdVab zxa4x;kb80uNhPUH?#cCpILYPU>-Z8v(*D24nCn^X#5um__xrwH|KGD-Ypl;6Yp%KG zWy~?h9COa~ECxSacpAK<@FMu7!b{*4g%#kJ3onCL7G49tUU(h+M&TdePYR!aKP`L; z{;cpB_`eG4z+V@r<-#|GAHf?78^J#nHi1iplA$?7RmMg6C=ae3(K@0yiowOG9=Lu) z%a68+nt*qSkc6md)B?Omgd{{Qqc-4uqJ6+^qqg9EqkX~cqITf@qW!?_Bg#DL9rXqu z9UTqs6ZHWf6CDFSHaZsEH#z}4FrvjpCq{$7Cq=Z%XmCWUjD|!*z(XVIB^nk{FVXPm z_ux~aQ@|smQQ*09Jnejg6qbVXIwv~JmYQR?Z6G<2H@@E?ZFLWv_ae??g~CIJ`mh3 z?hZaQJ`{XdJP>?hd?I*IOy1*DV)7o3jM2LBCGjQT$uaqgFOA7pJSCnAzC0%V@$`5G z_{R7q@LysyZG2~ZC-|-yjTGM<-wmD>uL8dnzXg7~xSw&w_Qm$b7CRINgHJ9}=EdPf z-djASI2QbeB5@XPEY1YqTD%Q>d+`qNokij--d#lIi}w_lf&W^h6&IHmUje^bL<<#P zE25=~tBR|@ZxufTe^mSk{BiMP@IUI(qtuP+B8PS3y2N7|)9d6+Y$z*}DLW}&`CZz? zHHZ(6?~nfuGJ1NNbM4Tyb-NwhqmMa<0q+Hl z&8}v5)5`3f-u&-Z3e+0(l4zJ^F}7 zrezPMJ$rO(WZL#reDvW*!%v=ykdNObPwkXk8>MgDoZf$j+MI+Z!?u?lZ?=olgO&D> z?OnFF(tb(@iucm;om}WCO8KTccs%qEc7oDLN~b8DcJj%iPqWjN&QLmY2%q1wvl!f- zY#+d}I?O(*biUHX&@pzo(icZa$XAuFlCNdi_h6i4KUDge(l3>+SGtkU!;f-KTwSh~ z(rTr3WoFnlP})doGx6lQR!ZB-k^|RKX;-D)Gn$ZQQAgnZKX(0Y~(wzgdfG;U1nZ1ubb88 zL-RS7>_(fhd0W>uv`uUa+s1aZ-E0rr#}2@D9c9Pa3HD-pg`IA1vUk|~?4x#}U1ndj zuiMr3L;Jb?#%^>Omv?ntL)XOl7HRDgEeB`UxW>Ljoaj{2m}%vIXWAscyCuI5^Vje* zf6cz?ueDxGu3z|TWr1rgV=I$*EBht<5y|ze-pPOfA9HDB$owa@q0IuH44G%>ke$(4Ach5mP(q${58`E^%%e%&?x zT0ePy+oa^S>+Jar2KZ~kB>#=C^S>Lf^Vgko$+exo?m9lXNbAy?Ud`dr&M@pT$OU8f>Yd|@S zFW_8J#`!`ySXMP*7(GfD?5mX1QaOLw%#raOVeTm7U_ZdQuZ+W34-R&98V~jZoVjHj z#(Hp`RE{MtO=!g}G=JSpcgjd}X`3Ps^~rO8Gl9|RVzbs}D7l;|z-^ejnWyi`&4k{b z!|Hc4bJ#)d*0K=uG{k%jA#b0V!>ZpR#Pb^BMGf(+hFJcy5VvRuMiRV5N@8a2#-D|F zLPIRj5RYq!$9@*#1r5R2i8!!LiQ}1{g_xxwW@`wnHbO`lm*?dk4S|(Q9E@cMai@l` zl#ytu>r_Y0)iJm=*%<4W(Q_Wk_(9s0$;j9%SR{O<+1!O-7rr9nQF}8w?=aKH3^XIq zd=rqUE6ohze89{zOVE06nlsf5ID|qBB!;R*KF}(K#tPH$@XtbY67o~_clBDXA z6irUir71!uCgCni5mtS|W2}-OT3CYqn4)PZ`csN%cS*RbQgn5Su1V2!Mf9@SKG`!w z>(KJ+&{|s3D!S562ANZ6{pXu0=4vBtZa(!-xrdZ&$oLIJ$tH-B^(g*Gk!XhMcs<^R zfp{+{?c{Eg6zx)jLTVt1g&Ii0G0Fw`Sj1-`u}~{XIBF#c_i>77^$D+Ug6f3(h3&%* zVW+T5cwpEqJSaRkJS;piJUTofZWS{cwI8Dyj@=@kH>EjUfq!W&J@I3Ipp-aELLE)8oyV4^?2=quWKj9Ofu$_K9!L=`s6_TRhMM{pcr2u_yn+{ zbsWEC$hb8Ud1@%!OuV<^t`ZV?>%vufXs;9JbMK9iaWTHPSVzQQYt z??a~+*FY~W{vCQPVKc?G338chGWeV}>ss|N-YT(X#4bp6aIqh$y+rs~yoQ_k@hzn7 zRN;qxpgU?R)Q%|h;f{DzGbwW6lJHYF>j~GD{<0@}yFYDYm>GrcJ_~(tv6+hgz7EUv zHZuzy{wSJZF`n5M&8xJT_po0-!yoH1Z)T7SC^AvEN-z|hd6KcZ%Pdm*l+wjYpH{j= z=~AVCRk~d1GfJOT`kc}il)j{Nh0>KuUs3v+($|%~q4Z6qe^a_7LmMCsNOR^{rLPFZ zFY#6J8)J&!;ho5ASytk~$lNbwCH{-dLm-z~p20`CxunILk$Db|%{*DoPoJqFNp!kM3gl?|w_u%&xzC8fioG0^0 zawBl2cs-J!_FwUa6#Y3tL3Vpu!A@Jmb=OMaX6%Y5h}ld<_!sS#tM;6b($#i7Be#RfV&{x#8pCyl{TFAY2qa zh14z$kz0Eh-j$B#U~Jd^W{4Ss#7Qj||o?G#m~s7{IsDME&c#hD5;Utjd*aoOWcCVM>EFw73l4l%W| z!?L4IRrXY@hGOwR^d=rVm&bE704;Hvj%=qfX1EQ@eJ+~ec}BJGnNQ3*#`dZ*~<6g`n5X$3x|(h58h+4qQcmLO>bo+quq zqX8+BR^WM4q<^XUSo4mhm~aQB=%f@4PSMFJ8j_-+DH@id;VGJ)qH9xhU5ai<(VtT^ zBSl!Pc(A2zMko)-p(pHY40cx!lMQ=@CzxW~I&Ncjj@!oVOw+hK;dhH4i6230iC1Em z|9NY*hv5quXh+zwctR%IEA0&YAP?Ail8%Cuj_=i^bUc#M@kmO?BPkt^q;x!zGVw@q z+kKDeU#tZ zCC`75gyJfpNM(pOzCQl_ZABw)na^S$Yzt-}(fXZI)F44Y_Vnx-G4pjUga3SUuR0a~ z;LX@rbMU?_|FwRrtRyG(2+^%(2)t+Jw+{2ME{%IrDY|E z)|MdJSc0y@ejbzbMQH4Vi`Gq0>l7W4qMj)_GDZ8Qs8@>6#7Qh@;sntHBnX|Hp!zA= zCPmbJa+g|6(6wc0EtcW!(+~|)v_pz^OwsRB)F?$erKm%S>M2s$E1tl6PAnc*9Kdy8 zl8(m7{oK#`-2wEw1GA&(kH==mGJ+YG9cQ+QzmI=3+s370#xyKui?vMSV!l`hOKYS1m!kq9iIFHj8RfWsw>*|M} z(aSX`%rDGW&A*AU*N&!*>4HCLa5~;trCv?n;#<bqx+!+`yv==Ev8{4WFYcq)VZ}Cj9a_W>LHwiisa@%BWu%`e#^@BI=wNumw-|FC zz!S%1FDZ89dOFu*2yuF`FZ8(Lu^L)Zo-ZB`9$4%TWmN)k)&=?TOP2)Y(N8C42W3yn z4voJnnqp9_U92u1Of1$`4Xke)(c2He_c+Tw&rF{m75uyuC0Ea>S4w3-SBOxbn)~vy zm2d};<{nxOT~j3XXP30(-=!3ejp?N+-!@Qh>G#yozg{~MH$8R|_almY3f?Ea-m=Oi zxhJ-@Pr=9(T?`W6TP7Z*Jn@u>g|?$<62GnKc^x_^9xZnnQAiE7g;L6z%QwN@;y0iN zCY*N&f4#1od5%>WI>#e^7ku4q;t#kt;5SK7>bHx>5_iY=bZCe8G-&%+?0ou!e<5R4 zJ_p!^t?&ePtnse>XL1(zA=OXBSV~%Y4b;=!Jsf~+9TXoD_n?fAM#_$%?)t_3$={&( z)`@@eE3j7B$583#@}0@HNi!*gbx;wNuEWX%bpbt zwzz->Bk%8l=cKVBrQBHyeY8LuB6nNo>7N?rbLiZ{e?cG96@u5wnn9lW82U)zBaQn* z@Ek9#5mg;7jx6*S%8BI|^4?86b!*`#@Kc2i(D{WQ;LIp|2Y#Zk9(r%#Tj*@sR?@D} zXI=2a`T5p?Xth)D4UIPwqHPGbT-F@&*1FIIQIWWAlog5L{HP%DM%CaaqT0}TvTCt# zeN+j4JgNnKEUJKWZIlH+8imkDq70mCq5wSS=j}V%5$^J62k6qMA#_2sJ#=x@0J<>R z4*GbsEwrXQ8iAKazf;Z@G8fUWa;GWuDOo2;YIoMuHU>Wt?F4;LWG-q3TFP9S_DwbY z2{WL*unq=bAB?~+IWFqJvv)`B3An^xj6^Ffje0^C zM@K*xL_MI7M~6cnh!|@k@xP)CWql}54bXHQ4}LQ05574%4!khx2b~-Bg+3yyN=eJn z;5oALv~YRU3q0#LNZ=WSTPiC^dDB>Z)9K(Rqtmp6Pu2I0fwNFnoRa#H(0Q^F6*(LZ zeq2_l^6rztbE3h}dt@yuDL4^arYmGMDsMU)x;Q!ux*$3eI#;D+0%*3j!Ro?7ohe#e zSfE$A-ynRmFsLxNaB^WtVQ67Q;grJ2!sx=Oh0_aT3x6n#E1XdnUpTXHR^i;jgu;1+ z^9vUgCSr?PYFXw1n$q@?-nsY&wnvNNozPv2w?bKaj_yF0%KA+1ysmd%+u{y-i#vDe zo!j&dYo&_U7jG!CB9=Zw<}b9blQpE-2}R^LdoEl*^MrJw@n~z>8zM8|kXU4f@>0&t zbS^Vvk!sePLiAFM!Q$f~I8%+G!Go2{Sbtb~#oSXmV?+1|j+>q5K2uCeP_?Nr}2 zbM0LZH_)BtCb{YEF87dI;$C!bx;5@I_f3%1zN}4faL_Lp9E=Ml2R8(>gN39Z6P-tj zaz1s@O{D0h=zQhKy$ez_F+~@qXi|zUO3}qBx+F!D6>0vXyY&rI(tDSs=<*c(F-6l- z^rsYEsmRCnG_kFS7E7F(m+58qmg<|XO`p3?QBwaA^&h?*QP<@6hO(#Lg0mu8CH$mJ zq_0{LyAhEL zO1ePV5=z4VcZ$AG(T|FJ{XHm8M@XL!AJr+l_prwQkjC#rKc<{V%Q#OcXI>fSDdj9u zj!5v5vU|_yz2#+`=alno8HZXYMI*}6@rs67Sr!I;LA{aRvKaL^`jtZC2qd3Ja& z52pGiI;Fw8GVe>)B^9qi`cTEM{VH++Mh| zaJTHFV0XkTg*OXd6uv8Lh$^G%s6b!1YqV$7DLOLh&pv@uqtn<2U|H$q=Ry6t07>_^ zQVYd<80GGo?W9;FNw`7yeYS2^eARu_zwF1U?KI5JXtZvMnxtr#6g5>O?TE1i>*a%D zzihW6C06WLq=(Qa!)*8Lq1nT-hi4}e&o@}YvQk@SCdV>&zDO)?i9c>eYGi$*tbJ#U z!^-_2z9noL(@Nr7VrfH7V`)R;+so)${#!O%lrec>wLfi!u(LGmZW^|H%yhqoxlhAL zTWT6(ImCMudI`TQE|KiN#1Ck=<`RqUDe`I4F;k4J@}AwHdxYqqu&L~`Ar48|9{OHE zBCk#1Rfa9XLE&I_G@TNT4#)7M*hgFV|BIw2+gYA3lD-6yUPVFpW4JMtb@k;v4k^o? zQzVz!v$$h*bw+>s6o;!is+8y*)LP{Rf@h& z(Kjhtm!dCH^v@K1o}dCA#}mSH!wKv}*(JVEJc;pp@!#V$@!I&K_~ZB={~Pmi(R;jI z=bxg#r)W)z-cQlm6n&7Q4^#9}iat)!KT;&+>E9vc>5-JXM^f${NlADlrQ?y5m`76X z9!a@-B<1drl(9!r10G2Yc=TQl>u~0sF zBDN`VihgZgZj1I8qsdqwBoe!8ilh&h_8WwIh8O7F^7WkJPc$ZHXSzOH?75jzw&!N1 z?zy>7_uMR$JvU~h?71-?%AOnZrS7>gy5~kdLDJeb)IB%Nbk9v|-E-4J_uTZCJvVlk z?76XHWzUU0U-sPCsc0?!*hj+pE=GJczwB?o0lHpx&eS{;5|Q++73_ieSG@AL11X(f zdDp+XN4X`tV5m6VF~lwjz512oH94wEQ&Rrc--@f*$uim;t8@T+QbwD>N=J+wI(Cd1 zqjcP;VS|U5b4H&ucBGl8bh6TEO0QFT)98_-N19n<#}V=YO6iyOcliAhe&2=PYvFf2 zRA{NS3PWRvfGc< z6+@WyJB`)X6Ikgw#ZF^xd4`>7?_$5n96OH{ugma4ue5LCiC$|zVYSXTb_1EtvhM`x zrYN^{JF@$vxohRxx{j`^>+X8uQ|#{sxnXXU8%v0@-1*Rp-Bjq6_`&Nqb|5fkK(B3e zZ;+iQ9P^%SopR1p&IsYKN|B`6+seY+EF4!$L46*hla8G)G&RjwsLk;&TQp; zu21c^`6>HPTHeqDShfg4b#5tsRhdEUG~(Y%84xd>sg&I?^>vwoMrE)t*@LbmGhWT zb5hx}FDbvBax|y*1`Xp&eu+Hmwik{oYM4uu(^8-Mi*ioa_`B#+Zz|qb@f(U;DSiel z?c&MI3$%-uGH>H0V}+OQlsDR%TJyUdXJ^iCoQHAt;yjjf0Ow$07{OImxQ-)NzP$c5 z^)00=j2WWo_M8lHSof@(2K|sU^!k_UTGz9R&9P6Rnl<4KY$Nt6v|wF$JKLH43WwpD zIF|XD!FbWfFkgO-orss>3VSu4iktDO&$bWQxp*v=uvUBpd$r!ibMY~|wbt41?It`J zIak1o(a<%+9}t+>A8jf%HZdVtbx zl=|@X6t`6x3pMX5{YW_vy4!2sWi_NJDZii6zDh4vdaBY|LXCf;kGX^LHRa}ey*nP6 zvgQ)^GI{BvcY7)I;s54XM{G~9j0CC8x1onvtU*&5{66@-F~P`SG@h~3g40bV7$00< zvcZMHEv69M8q76&1`F70b5O82c-kBqEDxSHhx4Yqo9S-F_chDC=hnFQ`8LIC!Rx^r zd?6uE%W2Koj+51Sv@S#IGRV83bs1WhNm`eobs1@0r4w9BXb;C;|59JYecbNg{)z`W z#?z%PiaWZU!R;NR)Y6Hr9rR?S^<5)U)rua|_m_$9iTnNBCrTfO_H~Q6AGq5jtson) zvVk;YjotK$!?Re?HOr{3VkWtG_WyQ!!dp1SO~Ye2gR;BJ-A4~P&ny zt^34%;l6Pj0-OjzK8S;DgB^n=LGz$h&^G88bPc)(J((rz9}EhH1*3wo!CAri!NtMU z;L6~-;HKcVU{>%z@Mtifx>_E*DBlYS-U~hqJ`27K)(0CiE>kO0ovE8?kZF`@nrV?~ zooScpoax4lTd&NqnE{!>nGu;WnQ@tOG7~eCGgoA;&fJi>Idey5cIKhX+|0tv64tP< z$h@9;JF_P9apv>Py3F^PO<^X?g@v$w*f4C&S4LWfZI~nM!XB6&tR?Bkj+!Bi%1;Z& zhZDj{;goP%I6a&Z&J6Dg@55U&4-d_<@cD2h-w#KPU zN;x90*6N;HJ6f@i{~g6gDD6udvQ~S3E4GOJ1-hNu-IFzBri8@$Fh*qGntsYr+Y&oe zVz^1u=3`@83{FAAC{3PPr_bJ`^gE?rX~>flv$KGwXxGI5--><8|0Q+a*7%h$NlE(h zyi#LUY<-D&dXc`Xoa4*QQ_XKulD^!0nfsjnYr0Tl){?YaQFE@Q=WM0tY{u4?-mg&O z%WW&_%Ppb4G<@2&#y%xp0_$oDeHhO#!%6A+bZWUJX`ZgBRY@)nla#7Yxi3|p24A+y zcV6ne1*9eHbL2}n!Cs=OG;O~Y=4ib;QRyJ1XDRKkw5QVLN_~#*DA7}Hk;1Z6C9+!n zu9NjypNoQGpQ>uXiTsz>{`MM1IcCFVY~#&sr@WQM)LqRqB9R+CFaayuG&?bxh`_`&Eu}A zYigc!d%8W%BCN(X<|!=44ra0IME|_R9pDb)3tG<9adY{um2nH*Vw2%pR?nD9_ndpp zRJ*s_YO|gD$bDpXaQ|?hnjPIg-4|vj_qAJZc6L9w4Q5xj(QP!lxsofH=79^G**$-G z{&LeI|EK)b>_p#-vJ_c-k@Ho~Rh;i}e#rS5=a-!8IX5C&)QrVzz$lLoz;HI;Y{c1= zvjt~s&UT#GC>9%q9X-bO;>1R=12}2db_C}b&T*V*7CVs>X}4E!Ud?#}CnG_72j^_g zhdAeQqOaI*U@W6GyMps|&bK+&aDI#(a<~DMPLQ6V)DKy;rNN^0OMR5j+rge5FL={B zD|&#(DjmwO)HgpyiT#FYZSly%d{l^c3Z;w`Xw5y39t%-kFmvuu)Aj^ z`?pt{we0Zuf?19YJd$OtTFlO>9ogyAoW0y_**DvjR?w3@8~yDdJB-=evFx8cpKn-9 zW$(sye8u86*0epqKHB+qG5ddBWH0S1`yP9MKC@ri^?c33F{ZEPdln5`Bjmk>Ywg;( z&aRs~%=L1|x&dym8{x*daqb*9(M@(&xU1a_?q+v~o6RinTx5O;BfJ&vb@w(_@yG6S zx6XacdFvHO8pr9EUBR+ z9v|DUQGJVlS2^|X-I^vT@#)!``V?+W%hS9@)A?&ubL8_?PVv4;PR~(#?q+O#u78dC z(%716`Pi~j^5yAEEWuhbJ`KKP{xwd@%BNFnElKmQ;G`sd%6&<0jeSY_^#4z>FLR$$ ziNWE8YrEjXNM%@HsXlkbFd8F}&Kh;|MseQGd>ZtwH0oqR;qW#pN+D{!xKUFkG zX+PCh`>B&?lVi=vBJJ*3sFBfE=@gOs%!@J}3p?`mv;W_1>bfP(%9kZ?E_`O<_ZQ>T1Epm(O{^aUJyTn;O#Rw6@|wj=tEQrF5Wp32aaCqFA46 z*7SgV$=~AM1^YDkT$JPe+)D2Hn0+oh&R{#$lwMO!Raw65MVcyKs#?Nkw5G~)Jk{L! za!yLV>~2#2T1qw}&zhgyP^jl$s(Yz-yI1SlSJT5krn#Fe{ zW&4xzeM%ZB-`}kx7_Wwu`E;d^3Z*SKVaJes-KrV;&YH7>w*|IbOTHx63X85a-?(aH z_F=AKU-Z;|%*=E^Q*}a59gLPb3~y5ptmB^MNIXbKp{tH&2ICk!N&QTJwABgN)HBqA zUT&UY=HVS|z^}~Lcungu)36WLKrefg?Tx>*FE+tItl*QGZy1Ul%vV{lfXCaj@t>Z{ z+{0{pul+lA@R#;0Jf+{*Z}FD?AQmz9FrRP5GRR>WM66dXVjtAQgSw~N3;SSiY~g*y z62=ZbfZ2xwu@(+O_s06ISA(zTG0NjzBx@Tif{)GbSS9wkY2?0i>#%yibKje$?nn2d zY36=%o6K(beyrI&2>9;n9(%4`KkG-=D_?F`72Df z{55>V^dQRW|4$aKvDl0jtJQwbxry#6!^!B(G0I{rVO&E_Y)OYri(k($nlP?CXBSTL z;(BoQ=ERb9138Cqp2B$==Xg$fVmFC%3g6|k-XL8=fc^~H-&Uwh+Z6bxGfvzs} zNZxKs$G9D!yphZZ~aG{#Q!BR{Bq+8-$kfiZx70-?(X=a!Q-|oBm7jcS_ew`ZsyH zni{v89#-l(FKOUTfvW|Z50rBRBUEem zRD6fhQl)jCB0!u-tooQ)NjNpVu7K;#{-H*@;D%6@Mgk#nzz0kIT z?-Z|BJUGGhvE~Q!5%dc^C#!4op+Jwxy$N zGiXN}K&#}bQof8f(7RjFpB4&#({&PCN$+kNU`5Y`QkwLJJ3^&Z$m+nY_DiUDY8v+b z4Aw>8W$rU`@I)MUm8PwA=}M8B?7><39ri@i z4)vQO+w<0tZ;emLo|iqJorto2hn`Dii=GQx#)!@;O)%0!3}U~&EggvL;MbA;(WPPH zCw22>){1dX9!dNy-!uAO&_h3;_a*-mO47VvNrQelCfTxs1hs+S_Cd<3rXi1fuuIWEfsJl-1=JV2})Zj&U zoJ2@XeVIu+fv@qO7k7#~$NR@!*nf9;d?Y*X zj^iudC&h!=b2lzNBOV{08J`uO9iJ1Q8&8POi_ecQh$ph{a#DOzd@&UmEMOl zQe~v0l{!2O+27f8$Aa%;`kO(rHwaJmS^r7TOexNG=)@p&v`$+gwh$|Q3ebXBV%X`` z@O2K}Rf-kFn5Q}XqB|1&4{8X_<1*xKCBAHHcXlEXzmvIU^G}B)vK|77vrC=S@CKKK zzsBtW{@#ha#A09A`!wdA-F|TT$Q#`e4k=_LDfPcjpIs~Iv}@$;*ep516r4!t8^U+B zHB2Mk>ow0IiRN*td9eJ@Jp9Ll>;>70{I7#wEB$jUdb4zaMWRY4*_qILt;p@2_DsAe zqcX#w6Dj@6|KIYF{-^$v;Q3%>@Mf?&SQ~s2d=Y#TY+wmsHj~f9nQb#WW}0N0XIf?2 zW;$lNX1Zs3X0U~+v6G-f8CjqW-Ee9q*4Fr$`#qfflz+X_$uhFGGxYAA?qu+f!a>ST z1eX+_u5^UN$x0fDd4WDPQ=THEJawnWyjJ=53WrG!-fKT|)E4W&gih7FS1Ny|#`B%x zwMtLYyC>q+I`E+I?vbqw^l(&yYh z#!lGxvM!`8%h)TScD}~>gg$k==Hf&xjT;pElKH*9?%;V_Dp^0`@Yg@mUq3T>}^pSyb{J@#RJ?@Yx%X>30!XM>i;-5T>Wjps#uR!b7^ zyp;0{eM<9AuF(hfad}H=vF5#|91hSj;VxmirFXS_f{`K*Xd2Pl^EI}=2u%Haq4#{D!-AHz5L ztbdCy2gQlJ)yM;RB&Slsw`rUzIbg}fEa4V^3z6q_5}v#ZmYQXL zF5EqA!S^d#hHY5Qy*-t>Ci%)az| zhnsfven*=9=mGnf_Vj|snGX8@EILYWXgbj!4l(=FCthm0(C6J~`mp2V7IO^$nc{xa zFMc?F*bHQU`h0U@yeM8|hQ*8H#b$WCEPlp}pl5u}jG}jZ!HlMdeASGhmwd~d8n0## z{W$u{HRcTVFMMFmVh_W&j0o7J$R3ua@_%)756al^LM#MhHd~1X50_z#YZ&1g@zr2| z+tRgeB=jnG3{>US^po;M77tM>VeYe^Qr1_~ZXM6!MZx}T#~8~Y`&BH*Wj<*vB8a`P!0)m5BG$-QRC{zIEBSFKCT*CT3hiy)WOS5`(Q=cNZ$8{;14DY&IryRHRlAB6zi4Fhks!}uNGVq zTmrr{xRn2DG$r6$!^}+ST`{!V}mP14uN0PQPNYnYGfP|-g?UzL9JrCVCzOO`v#7wc1NxxXI1 z#Iat>`A3O^bCqy4)cWLUA0zc3AvylRT?sAHu|nfmUy}E&;FJ)Ovh}6sc-t!Y?<)64 ztZYf+3V2%U8dD9DD`|xH8uVSBlDH)viG#H2vl6pB@43R4XEukHxB0ZH3@Mg;t|Cm$ znWCBGyt&YDuzl9u1f6Dm2Aa+h+cDHF-1kIUy;?#g?7 zEE0Olx|I8JBx#Y<%P*x8ul$m9YhH*)YTrwXaMmU{m$yn8tRSq^S52;xy4Sqa$ca4X z`89E`q9q<-WVTWM>%=bnYRVCqT{$w0i<@Dw?#7Wd%{c;{i>$!ozXw{eB}W0z|DMb_ z%Istn-v7Pv)3o8JVisT@?A5j$wV4grm)+wsA5e!Gfet(+GnjSo>U09j9HqtgKZSQ) z#t|^O{v&uAvz8TjWv+%JYiz3UXUu@!!chm$#!UE2IAjmSGU##+i-+b}_|J0$tSxyF zx`HFXgC+m5;Z=?d^P8^||JxiPvz)7;?{NfX4M)JbgtgEQIRbV)d`}90U0c_LtnzMP^6ZjmXlmO=wh^?kZ47Na7; zW5r4x_D@hIc7MCSDKL9+HWLPOS#^@D+*rwOu3RRE*_+!ox2?(MdgXeVT&{nvzp0%Y zkQ)FUk{e>GbHj4OpmTC_Oqly5_X#EA7?JrJ^>w+q=ISRk=jW28o&v3*I$A>&T0>52 zs9I~tX$@85@90Ju9n4WQhj7$m4A`A=Jd~q0^E!ud_Xv(kBl9{{IuBi!*`1@&w|zM3 zG0Srd<#;Sd-t^_D&74m^=A@5f9GNx8bNCtSEIz&yh(Xp@*+d#d4(h7}1S$c6N`TWf z_o2CmqlmBWe$q3CBV!)nsM1;Ox_oDPKHq6tfcGnA9oAF4>uHW`A~#D}a$s#wkY%OTc=Aa@~fvscfn7S%k0shnoED{#rS1y7@&H_BL^}yTP?U5dl zwmNnPyo7m`xjJ?yyAxO>ua4c>?hF?BtFXJ+U64hQ!V0^)-QDmX5A7b%J?);*y;vt3 z;~U-^Dl+Qqeym8#s-!yG0iR|yp6rgKvy<%v?rb}QMS`ns7u&^Dp5%_o9c3bw z*E+f5bH|&!N^PCo3Aq!%BD)p2p}C>Ru}E-5Zg_4uSR~lxKFxhUU5z|l%XcHL zN3YC4o@OEu%c%Wl(Hk$KFIJ)_WcSl*YH|&A_aS=VN7{dhmS0V+#JZQGAtl|IQf*2} zwWkcuwsR{t(rUM*we}~!L&)14$x%2EnK1TMY`Hod|Mri*!uK4~^KfV{@|E;B{!!2M zzx>^wN9muE=Qyz+Ha}O62=!wr>G6cmZ{M>?Z{-it;s5BL6>Gnzsgsxqh2;a{IZx?> zw6CLwl0KYX9lo4CW{pKd$Zvl)$yLpplK08`eau=K8iV9UV&D9%z89{hHhD5lmGUL5 zSX2HfZ>i}UCH3-z#wdLMt1L&!yCffC>wQjd?9=Sb+X3_d?Zsq3XR#)q54H_bSkLOG&fnI*X2b2KpRFfOdNU`VvQgUV9lTIxSS47P4yf zEwE^|khQDtLPe)lqRT#jiXN+E-sT5(_=+||m!ZvSsWz*ndMs287OL(FRcnQ+wW<<* zTVUaC~RRH=HYQuR`$>ZMB6NENDuy#Dc;r#i>>1^UbFa@)~g?vUHT)KXnk zOLdV;w2;?7Uh{aJBig0{ZSxlWf}{4NUVV+`wMMJ8My=LpEv-?pnU0`EOK+Fe-mbRR zWlnp$YOT>qtB|TBBL*$(+_@UhC3oPiD17vs$CIwMJ`e zjaF%m23n(m)~M4Oby}lN>oTvknAiTP+Pub5tu<=3My=ML)B1B-e@<&It2LL^n#*d< z)z+G;tu zS=L^(rp~1Ps~7l7J(T#p%#qzsX+O&U6Q0X|5}rqCFJR8^N$iHF zDCeb=?=!TM7ib?ZQ;vV5J-kCZc%Ksd$oxRriL}?DtcsM;_LR*|l*ulX#U7NwUgUj0 z^4!^WA&1)`nH`YG^CuFXIh2v11pN&CwrESQ#Ba@6f zWUP_Xu|}w4jX=j5SuEHZ8@57i*jj4CR;mq~QyaEYZCIH-?uJz;+B&b=y0*6JYHihZ zv{lEdrz6$VMU|gO+jh0K?Yy??y4tGiX{)YZX2TY=RTs5Y7qnGxlZ0jS8HpJw6#}jYp*V|TMOFS3uSg|RhivdwUw<}dn;SDwzmIjZU5C<*{5-t zeHxe9r?HNJa;n{nIt~hT92Dv}DAaL~w_zjI9g*sesLX~HYpH;(DmH9&nGIX5dPM$P zVMFXtv0Lk@-RgBpJ+)iCW~rxkYb~`~>u+JJZnjc=pHNUMwNkCroNAeE)Jn~%uGvPd z)SPOZZFHRF_0Beav{m_29)7$f!=ulvz-}pN;m_a;s9Ct#;YSzv};R __index -rm -f webui.html +rm -f webui.html .??* # echo "webui_html.h GENERATED"; echo -e "index.html GENERATED\n"; \ No newline at end of file diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 37d155ba..28470470 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -1,1094 +1,1241 @@ - + + + + GBS-Control + + + + + + + + - - - GBS-Control - - - - - - - - - - -

    ?|ylbynO@u-cP0 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 z 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

    + - - -
    - - -
    - - - - - -
    -
    - -
    code
    -
    Output
    -
    -
    - +
    +
    - +
    -
    + + + + +
    +
    + +
    code
    +
    L{CONSOLE_OUTPUT_LEGEND}
    +
    +
    + +
    +
    + +
    +
    -
    - -
    -
    - - - +
    + +
    + +
    + + + + \ No newline at end of file diff --git a/public/src/index.ts b/public/src/index.ts index a6916a28..f8a58d80 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -1,6 +1,6 @@ /* * DEVELOPER MEMO: - * 1. WebUI icons: https://fonts.google.com/icons + * 1. WebUI icons: https://jossef.github.io/material-design-icons-iconfont * 2. prettier config: https://prettier.io/docs/en/options * */ @@ -1692,4 +1692,4 @@ const main = () => { fetchSlotNamesAndInit() } -main() +main() \ No newline at end of file diff --git a/public/src/style.css b/public/src/style.css index 9d57b6c0..fc0ab5b7 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -34,11 +34,11 @@ /* latin */ @font-face { - font-family: "Oswald"; + font-family: "${webUIFontName}"; font-style: normal; - font-weight: 300; + font-weight: 400; font-display: swap; - src: url('data:font/woff2;base64,${oswald}') format("woff2"); + src: url('data:font/woff2;base64,${webUIFont}') format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } @@ -64,7 +64,7 @@ body { body { background-color: var(--color-cod-gray); - font-family: "Oswald", sans-serif; + font-family: "${webUIFontName}", sans-serif; height: 100%; margin: 0; overflow: hidden; @@ -227,12 +227,12 @@ body { text-align: center; } -.gbs-button__resolution--pass-through { - font-size: 10px; - line-height: 10px; +/* .gbs-button__resolution--pass-through { + font-size: 12px; + line-height: 12px; position: relative; top: -4px; -} +} */ .gbs-button__control { flex-grow: 1; diff --git a/scripts/generate_translations.py b/scripts/generate_translations.py index 0308e6a6..53f270cd 100644 --- a/scripts/generate_translations.py +++ b/scripts/generate_translations.py @@ -20,7 +20,7 @@ DEFAULT_FONT_SIZE = 12 # load translations -with open(os.getcwd() + "/translation.json", "r", encoding="utf-8") as data: +with open(os.getcwd() + "/translation.hdwui.json", "r", encoding="utf-8") as data: menu_items = json.load(data) res = """ @@ -36,10 +36,9 @@ default_font = None # we need a temporary directory to exist -i18npath = os.path.join(os.getcwd(), "i18n") -if os.path.isdir(i18npath) == False: - os.mkdir(i18npath) - +tmpPath = os.path.join(os.getcwd(), "tmp") +if os.path.isdir(tmpPath) == False: + os.mkdir(tmpPath) def convert(text, font): img = Image.new("L", (0, 0), color=0) @@ -74,30 +73,30 @@ def convert(text, font): bytes_arr.append(number) number = 0 byte_index = 0 - img.save(os.path.join(i18npath, "i18n_preview_{:}.jpg".format(tag))) + img.save(os.path.join(tmpPath, "i18n_preview_{:}.jpg".format(tag))) return width, height, bytes_arr def collect(lang): key = lang if not lang: - key = "en-US" + key = "en" for obj in menu_items: - if not isinstance(obj, dict): + if not isinstance(menu_items[obj], dict): raise TypeError("{:} is not a dict".format(obj)) - if "tag" not in obj: - raise KeyError('Key "tag" is missing in {:}'.format(obj)) - if key not in obj: + # if "tag" not in obj: + # raise KeyError('Key "tag" is missing in {:}'.format(obj)) + if key not in menu_items[obj]: raise KeyError( 'Key "{:}" does not exist in {:}'.format( key, json.dumps(obj, ensure_ascii=False) ) ) - size = obj.get("size") - tag = obj["tag"] + size = menu_items[obj].get("size") + tag = obj if tag in tags_map: raise ValueError("Duplicated tag: {:}".format(tag)) - translated = obj[key] + translated = menu_items[obj][key] tags_map[tag] = translated, size @@ -111,7 +110,7 @@ def collect(lang): class ArgObj(object): fonts = ([],) - lang = "en-US" + lang = "en" if __name__ == "__main__": args = ArgObj() @@ -121,7 +120,7 @@ class ArgObj(object): # parser = ArgumentParser() # parser.add_argument('--fonts', '-f', nargs='*', default=[]) # parser.add_argument('--output', '-o', default='src/OLEDMenuTranslations.h') - # parser.add_argument('--lang', help='Language code', nargs='?', default='en-US') + # parser.add_argument('--lang', help='Language code', nargs='?', default='en') # args = parser.parse_args() for font in args.fonts: tokens = font.split("@") diff --git a/scripts/pre.py b/scripts/pre.py index b5b8aa29..c31049e9 100644 --- a/scripts/pre.py +++ b/scripts/pre.py @@ -17,13 +17,13 @@ # silently check if all modules are installed subprocess.call([sys.executable, '-m', 'pip', 'install', 'pillow'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) -# starting with i18n -print(f'\n\U0001F37A generating locale data ({conf["ui-lang"]})\n') +# HardwareUI translations +print(f'\n\U0001F37A generate HardwareUI locale data ({conf["ui-lang"]})\n') r = subprocess.Popen([ sys.executable, f'{root}/scripts/generate_translations.py', - f'{conf["ui-fonts"]}', + f'{conf["ui-hdw-fonts"]}', f'{conf["ui-lang"]}' ], stderr=subprocess.STDOUT diff --git a/src/OLEDMenuTranslations.h b/src/OLEDMenuTranslations.h index be750875..505f7cee 100644 --- a/src/OLEDMenuTranslations.h +++ b/src/OLEDMenuTranslations.h @@ -89,15 +89,13 @@ const unsigned char OM_DOWNSCALE [] PROGMEM = { }; -#define OM_PRESET_WIDTH 41 +#define OM_PRESET_WIDTH 27 #define OM_PRESET_HEIGHT 15 const unsigned char OM_PRESET [] PROGMEM = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x62,0x0,0x0,0x0,0x2,0x0,0x42,0x0, -0x0,0x0,0x2,0x0,0x42,0xee,0xf1,0x3c,0xf6,0x0,0x7e,0x22,0x12,0x44,0x12,0x0, -0x2,0xe2,0x73,0x7c,0x72,0x0,0x2,0x22,0x80,0x4,0x82,0x0,0x2,0x22,0x92,0x44, -0x92,0x0,0x2,0xe2,0xf1,0x3c,0xf6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x2,0x0,0x0, +0x66,0x2,0x8,0x0,0x42,0x2,0x8,0x0,0x6,0xf2,0xd8,0x3,0x3c,0x12,0x49,0x0, +0x60,0x1a,0xc9,0x1,0x42,0x12,0x9,0x2,0x42,0x12,0x49,0x2,0x7c,0xf2,0xd8,0x3, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, }; diff --git a/src/wserver.cpp b/src/wserver.cpp index f3cf10bf..952ca639 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Sunday, 2nd June 2024 11:01:41 pm # +# Last Modified: Tuesday, 4th June 2024 6:56:22 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -2054,9 +2054,9 @@ void handleUserCommand() // case '9': // // break; - // case 'a': - // - // break; + case 'a': // device restart + resetInMSec(2000); + break; case 'e': // print files on data { _WSN(F("file system:")); diff --git a/translation.hdwui.json b/translation.hdwui.json new file mode 100644 index 00000000..438b31ed --- /dev/null +++ b/translation.hdwui.json @@ -0,0 +1,135 @@ +{ + "OM_STATUS_CUSTOM": { + "en": "Main Menu", + "zh": "主菜单", + "es": "Menu Principal", + "ru": "Главное меню", + "size": 12 + }, + "OM_STATUS_BAR_BACK": { + "en": "←Back", + "es": "←Atras", + "ru": "←Назад", + "size": 12 + }, + "OM_SCREEN_SAVER": { + "en": "Press any key", + "es": "Presione el botón", + "ru": "Нажмите кнопку" + }, + "OM_RESOLUTION": { + "en": "Resolutions", + "es": "Resolución de imagen", + "ru": "Выходное разрешение" + }, + "OM_PASSTHROUGH": { + "en": "Passthrough", + "es": "Sin cambios", + "ru": "Без изменений" + }, + "OM_DOWNSCALE": { + "en": "Down-Scale", + "es": "Imagen reducida", + "ru": "Меньший размер картинки" + }, + "OM_PRESET": { + "en": "Slots", + "es": "Perfiles", + "ru": "Профили настроек" + }, + "OM_RESET_RESTORE": { + "en": "Reset/Restore", + "es": "Resetear", + "ru": "Сброс" + }, + "OM_RESET_GBS": { + "en": "Reset GBS", + "es": "Resetear ajustes", + "ru": "Сбросить настройки" + }, + "OM_RESET_WIFI": { + "en": "Clear WiFi Connections", + "es": "Borrar ajustes WiFi", + "ru": "Сброс настройек WiFi" + }, + "OM_RESTORE_FACTORY": { + "en": "Restore Factory", + "es": "Ajustes de fabrica", + "ru": "Восстановить по-умолчанию" + }, + "OM_CURRENT": { + "en": "Current Output", + "es": "Salida actual", + "ru": "Выходной сигнал" + }, + "OM_WIFI": { + "en": "WiFi Info", + "es": "Informacion de WiFi", + "ru": "Параметры WiFi" + }, + "TEXT_NO_PRESETS": { + "en": "No Presets. Please use the Web UI to create one first", + "es": "No hay perfiles. Usa navegador para crear uno nuevo", + "ru": "Ничего не найдено. Для создания профиля используйте браузер" + }, + "TEXT_TOO_MANY_PRESETS": { + "en": "Please use WebUI to access more presets", + "es": "Por favor usa navegador para acceder a los demás perfiles", + "ru": "Для доступа к другим профилям используйте браузер" + }, + "TEXT_RESETTING_GBS": { + "en": "Resetting GBS\nPlease wait\n...", + "es": "Reseteando ajustes\nPor favor espere\n...", + "ru": "Сброс настроек GBS\nПожалуйста подождите\n...", + "size": 16 + }, + "TEXT_RESETTING_WIFI": { + "en": "Resetting WiFi\nPlease wait\n...", + "es": "Borrando ajustes de WiFi\nPor favor espere\n...", + "ru": "Сброс настроек WiFi\nПожалуйста подождите\n...", + "size": 16 + }, + "TEXT_RESTORING": { + "en": "Factory Restoring\nPlease wait\n...", + "es": "Reseteando al estado de fabrica\nPor favor espere\n...", + "ru": "Установка заводских настроек\nПожалуйста подождите\n...", + "size": 16 + }, + "TEXT_WIFI_CONNECT_TO": { + "en": "Connect to the following SSID (password) before using the Web UI", + "es": "Conecta al siguiente SSID para acceder al Panel de Control", + "ru": "Для доступа к Панели управления подключитесь к указанной сети" + }, + "TEXT_WIFI_CONNECTED": { + "en": "Status: Connected", + "es": "Estado: Conectado", + "ru": "Состояние: Подключено" + }, + "TEXT_WIFI_DISCONNECTED": { + "en": "Status: Disconnected", + "es": "Estado: Desconectado", + "ru": "Состояние: Отключено" + }, + "TEXT_WIFI_URL": { + "en": "Use one of the following URLs to use the Web UI", + "es": "Usa uno de los siguientes enlaces para acceder al Panel de Control", + "ru": "Для доступа к Панели управления перейдите по одной из следующих ссылок" + }, + "TEXT_LOADED": { + "en": "Loaded", + "es": "activado", + "ru": "активирован", + "size": 16 + }, + "TEXT_NO_INPUT": { + "en": "No Input", + "es": "No hay señal", + "ru": "Нет сигнала", + "size": 16 + }, + "OM_OSD": { + "en": "Open OSD Menu", + "es": "Abrir menu de pantalla", + "ru": "Показать экранное меню" + } +} \ No newline at end of file diff --git a/translation.json b/translation.json deleted file mode 100644 index fc2b079c..00000000 --- a/translation.json +++ /dev/null @@ -1,160 +0,0 @@ -[ - { - "tag": "OM_STATUS_CUSTOM", - "en-US": "Main Menu", - "zh-CN": "主菜单", - "es-ES": "Menu Principal", - "ru-RU": "Главное меню", - "size": 12 - }, - { - "tag": "OM_STATUS_BAR_BACK", - "en-US": "←Back", - "es-ES": "←Atras", - "ru-RU": "←Назад", - "size": 12 - }, - { - "tag": "OM_SCREEN_SAVER", - "en-US": "Press any key", - "es-ES": "Presione el botón", - "ru-RU": "Нажмите кнопку" - }, - { - "tag": "OM_RESOLUTION", - "en-US": "Resolutions", - "es-ES": "Resolución de imagen", - "ru-RU": "Выходное разрешение" - }, - { - "tag": "OM_PASSTHROUGH", - "en-US": "Passthrough", - "es-ES": "Sin cambios", - "ru-RU": "Без изменений" - }, - { - "tag": "OM_DOWNSCALE", - "en-US": "Down-Scale", - "es-ES": "Imagen reducida", - "ru-RU": "Меньший размер картинки" - }, - { - "tag": "OM_PRESET", - "en-US": "Presets", - "es-ES": "Perfiles", - "ru-RU": "Профили настроек" - }, - { - "tag": "OM_RESET_RESTORE", - "en-US": "Reset/Restore", - "es-ES": "Resetear", - "ru-RU": "Сброс" - }, - { - "tag": "OM_RESET_GBS", - "en-US": "Reset GBS", - "es-ES": "Resetear ajustes", - "ru-RU": "Сбросить настройки" - }, - { - "tag": "OM_RESET_WIFI", - "en-US": "Clear WiFi Connections", - "es-ES": "Borrar ajustes WiFi", - "ru-RU": "Сброс настройек WiFi" - }, - { - "tag": "OM_RESTORE_FACTORY", - "en-US": "Restore Factory", - "es-ES": "Ajustes de fabrica", - "ru-RU": "Восстановить по-умолчанию" - }, - { - "tag": "OM_CURRENT", - "en-US": "Current Output", - "es-ES": "Salida actual", - "ru-RU": "Выходной сигнал" - }, - { - "tag": "OM_WIFI", - "en-US": "WiFi Info", - "es-ES": "Informacion de WiFi", - "ru-RU": "Параметры WiFi" - }, - { - "tag": "TEXT_NO_PRESETS", - "en-US": "No Presets. Please use the Web UI to create one first", - "es-ES": "No hay perfiles. Usa navegador para crear uno nuevo", - "ru-RU": "Ничего не найдено. Для создания профиля используйте браузер" - }, - { - "tag": "TEXT_TOO_MANY_PRESETS", - "en-US": "Please use WebUI to access more presets", - "es-ES": "Por favor usa navegador para acceder a los demás perfiles", - "ru-RU": "Для доступа к другим профилям используйте браузер" - }, - { - "tag": "TEXT_RESETTING_GBS", - "en-US": "Resetting GBS\nPlease wait\n...", - "es-ES": "Reseteando ajustes\nPor favor espere\n...", - "ru-RU": "Сброс настроек GBS\nПожалуйста подождите\n...", - "size": 16 - }, - { - "tag": "TEXT_RESETTING_WIFI", - "en-US": "Resetting WiFi\nPlease wait\n...", - "es-ES": "Borrando ajustes de WiFi\nPor favor espere\n...", - "ru-RU": "Сброс настроек WiFi\nПожалуйста подождите\n...", - "size": 16 - }, - { - "tag": "TEXT_RESTORING", - "en-US": "Factory Restoring\nPlease wait\n...", - "es-ES": "Reseteando al estado de fabrica\nPor favor espere\n...", - "ru-RU": "Установка заводских настроек\nПожалуйста подождите\n...", - "size": 16 - }, - { - "tag": "TEXT_WIFI_CONNECT_TO", - "en-US": "Connect to the following SSID (password) before using the Web UI", - "es-ES": "Conecta al siguiente SSID para acceder al Panel de Control", - "ru-RU": "Для доступа к Панели управления подключитесь к указанной сети" - }, - { - "tag": "TEXT_WIFI_CONNECTED", - "en-US": "Status: Connected", - "es-ES": "Estado: Conectado", - "ru-RU": "Состояние: Подключено" - }, - { - "tag": "TEXT_WIFI_DISCONNECTED", - "en-US": "Status: Disconnected", - "es-ES": "Estado: Desconectado", - "ru-RU": "Состояние: Отключено" - }, - { - "tag": "TEXT_WIFI_URL", - "en-US": "Use one of the following URLs to use the Web UI", - "es-ES": "Usa uno de los siguientes enlaces para acceder al Panel de Control", - "ru-RU": "Для доступа к Панели управления перейдите по одной из следующих ссылок" - }, - { - "tag": "TEXT_LOADED", - "en-US": "Loaded", - "es-ES": "activado", - "ru-RU": "активирован", - "size": 16 - }, - { - "tag": "TEXT_NO_INPUT", - "en-US": "No Input", - "es-ES": "No hay señal", - "ru-RU": "Нет сигнала", - "size": 16 - }, - { - "tag": "OM_OSD", - "en-US": "Open OSD Menu", - "es-ES": "Abrir menu de pantalla", - "ru-RU": "Показать экранное меню" - } -] \ No newline at end of file diff --git a/translation.webui.json b/translation.webui.json new file mode 100644 index 00000000..254eb51e --- /dev/null +++ b/translation.webui.json @@ -0,0 +1,688 @@ +{ + "SLOTS": { + "en": "Slots", + "es": "Perfiles", + "ru": "Профили настроек", + "zh": "设置配置文件" + }, + "SLOTS_HELP_1": { + "en": "The selected Slot will be loaded on the next power-on.", + "es": "El Perfil seleccionado se activará después de reiniciar su GBS-Control.", + "ru": "Выбранный Профиль сохраняется в настройках так, что он активируется при следующем включении устройства.", + "zh": "" + }, + "REMOVE_PRESET": { + "en": "remove slot", + "es": "borrar perfil", + "ru": "удалить профиль", + "zh": "" + }, + "SAVE_PRESET": { + "en": "save to slot", + "es": "crear perfil", + "ru": "создать профиль", + "zh": "" + }, + "OUTPUT_RESOLUTION": { + "en": "Output resolution", + "es": "Resolució de salida", + "ru": "Выходное разршение", + "zh": "" + }, + "OUT_RES_HELP_1": { + "en": "The selected resolution will stay active on the next power-on.", + "es": "La resolución seleccionada permanecerá activa en el próximo encendido.", + "ru": "Выбранное разрешение будет активировано при следующем включении.", + "zh": "" + }, + "OUT_RES_HELP_2": { + "en": "1280x960 is recommended for NTSC sources, 1280x1024 for PAL.", + "es": "Se recomienda resolución de 1280x960 para fuentes NTSC y 1280x1024 para PAL.", + "ru": "Для NTSC рекомендуется разрешение 1280x960, для PAL — 1280x1024.", + "zh": "" + }, + + + + + "OUT_RES_HELP_3": { + "en": "Use the \"Matched Presets\" option to switch between the two automatically (Preferences tab)", + "es": "Utilice la opción \"Preajustes coincidentes\" para cambiar entre los dos automáticamente (pestaña Preferencias)", + "ru": "Используйте опцию \"Соответствующие пресеты\" для автоматического переключения между ними (вкладка \"Настройки\").", + "zh": "" + }, + + + + + "PASS_THROUGH": { + "en": "Passthrough", + "es": "Sin cambios", + "ru": "Без изменений", + "zh": "" + }, + "ADC_GAIN_LEGEND": { + "en": "ADC Gain (brightness)", + "es": "Aumento de CAD (brillo)", + "ru": "Усиление АЦП (яркость)", + "zh": "" + }, + "ADC_GAIN_LEGEND_HELP_1": { + "en": "Auto Gain is the mechanism for controlling image brightness within specified limits (clipping). Calibrate for a few seconds on a white screen.", + "es": "Auto Gain es un mecanismo para controlar el brillo de la imagen dentro de límites predeterminados. Se necesita calibrar con la pantalla en color blanco.", + "ru": "Auto Gain механизм контроля яркости изображения в заданных пределах (clipping). Требуется калибровка в течение нескольких секунд на белом экране.", + "zh": "" + }, + "GAIN_BUTTON": { + "en": "gain", + "es": "aumento", + "ru": "усиление", + "zh": "" + }, + "AUTO_GAIN_BUTTON": { + "en": "Auto Gain", + "es": "Aumento automatico", + "ru": "Авто. усиление", + "zh": "" + }, + "PICTURE_CONTROL_LEGEND": { + "en": "Picture Control", + "es": "Control de imagen", + "ru": "Управление изображением", + "zh": "" + }, + "MOVE_BUTTON": { + "en": "move", + "es": "mover", + "ru": "сдвиг", + "zh": "" + }, + "SCALE_BUTTON": { + "en": "scale", + "es": "escala", + "ru": "масштаб", + "zh": "" + }, + "BORDERS_BUTTON": { + "en": "borders", + "es": "orillas", + "ru": "границы", + "zh": "" + }, + "FILTERS_LEGEND": { + "en": "Filters", + "es": "Filtros", + "ru": "Фильтры", + "zh": "" + }, + "SCANLINES_BUTTON": { + "en": "scanlines", + "es": "scanlines", + "ru": "строчность", + "zh": "" + }, + "INTENSITY_BUTTON": { + "en": "intensity", + "es": "intensidad", + "ru": "интенсивность", + "zh": "" + }, + "LINE_FILTER_BUTTON": { + "en": "line filter", + "es": "filtro lineal", + "ru": "строчный фильтр", + "zh": "" + }, + "FILTERS_HELP_1": { + "en": "Scanlines only work with 240p sources, or 480i with Bob deinterlacing.", + "es": "Scanlines solo funcionan señal de entrada de 240p o 480i con desentrelazado Bob.", + "ru": "Строки развёртки работают только с источниками входного сигнала 240p или 480i с Bob-деинтерлейсингом.", + "zh": "" + }, + "FILTERS_HELP_2": { + "en": "Line Filter eliminates blocky-pixel artifacts when upscaling beyond 480p. Recommended to keep it active.", + "es": "El filtro líneal elimina los artefactos de píxeles en bloques cuando se escala más allá de 480p. Se recomienda activarlo.", + "ru": "Строчный Фильтр устраняет артефакты при масштабировании выше 480p. Рекомендуется включить.", + "zh": "" + }, + "PEAKING_BUTTON": { + "en": "peaking", + "es": "sensibilidad", + "ru": "чувствительность", + "zh": "" + }, + "STEP_RESPONSE_BUTTON": { + "en": "step response", + "es": "respuesta escalonada", + "ru": "ступенчатая хар-ка", + "zh": "" + }, + "PEAKING_HELP_1": { + "en": "Peaking increases the contrast around areas of high brightness, which improves image sharpness. Recommended to keep it active.", + "es": "La \"Sensibilidad\" aumenta el contraste alrededor de áreas de alto brillo, lo que mejora la nitidez de la imagen. Se recomienda activarlo.", + "ru": "Параметр Чувствительность увеличивает контраст вокруг областей повышенной яркости, это позволяет повысить чёткость и детализацию изображения. Рекомендуется включить.", + "zh": "" + }, + "PEAKING_HELP_2": { + "en": "Step Response increases the sharpness of horizontal color steps. Recommended to keep it active.", + "es": "La respuesta al paso aumenta la nitidez de las transiciones de color horizontales. Se recomienda activarlo.", + "ru": "Step Response увеличивает резкость горизонтальных цветовых переходов. Рекомендуется включить.", + "zh": "" + }, + "SLOT_SETTINGS_LEGEND": { + "en": "Current slot settings", + "es": "Ajustes de perfil activo", + "ru": "Настройки активного профиля", + "zh": "" + }, + "MATCH_PRESETS_SWITCH": { + "en": "Matched Presets", + "es": "Coincidir con el perfil", + "ru": "Соответствать профилю", + "zh": "" + }, + "MATCH_PRESETS_SWITCH_HELP_1": { + "en": "If enabled, default to 1280x960 for NTSC 60 and 1280x1024 for PAL 50 (does not apply for 720p / 1080p presets).", + "es": "Si está habilitado, el valor predeterminado es 1280x960 para NTSC 60 y 1280x1024 para PAL 50 (no se aplica a los ajustes preestablecidos de 720p/1080p).", + "ru": "Если этот параметр включен, по умолчанию используется разрешение 1280x960 для NTSC 60 и 1280x1024 для PAL 50 (не применяется к предустановкам 720p/1080p).", + "zh": "" + }, + "FULL_HEIGHT_SWITCH": { + "en": "Full Height", + "es": "Estirar en altura", + "ru": "Растягивать по-высоте", + "zh": "" + }, + "FULL_HEIGHT_SWITCH_HELP_1": { + "en": "In some cases, the device generates an output signal resolution that does not use the full height of the screen; dark bars appear at the top and bottom.", + "es": "En algunos casos, el dispositivo genera una resolución de señal de salida que no utiliza toda la altura de la pantalla; Aparecen barras oscuras en la parte superior e inferior.", + "ru": "В некоторых случаях устройство формирует разрешение выходного сигнала который не используют полную высоту экрана, появляются тёмные полосы вверху и внизу.", + "zh": "" + }, + "FULL_HEIGHT_SWITCH_HELP_2": { + "en": "With \"Full Height\" enabled, these presets will instead scale to fill more of the screen height.", + "es": "Con \"Estirar en altura\" habilitada, la señal de salida aumentará para ocupar una mayor parte de la altura de la pantalla", + "ru": "Если включена функция \"Растягивать по-высоте\", выходной сигнал будет масштабироваться, чтобы заполнить большую часть экрана по высоте", + "zh": "" + }, + "FULL_HEIGHT_SWITCH_HELP_3": { + "en": "This currently only works with 1920 x 1080 (1080p) resolution", + "es": "Actualmente esto sólo funcciona con la resolucion 1920 x 1080 (1080p)", + "ru": "На данный момент эта функция работает только с выходным разрешением 1920 x 1080 (1080p)", + "zh": "" + }, + "FORCE_FRAME_RATE_SWITCH": { + "en": "Force increase frequency for PAL 50Hz to 60Hz", + "es": "Forzar el aumento de la frequencia de salida PAL 50 Hz hasta 60 Hz", + "ru": "Принудительно повышать частоту для PAL 50 Гц до 60 Гц", + "zh": "" + }, + "FORCE_FRAME_RATE_SWITCH_HELP_1": { + "en": "Try this option if your TV does not support 50Hz sources (some non-standard input signal formats). When this feature is enabled, the frame rate may be unstable. Reboot required.", + "es": "Pruebe esta opción si su televisor no admite fuentes de 50Hz (algunos formatos de señal de entrada desconocidos). Cuando esta función está habilitada, la frequencia de salida puede ser inestable. Se require reiniciar GBS-Control.", + "ru": "Используйте эту функцию, если ваш телевизор не поддерживает источники с частотой 50Гц (некоторые нестандартные форматы входного сигнала). При включении этой функции, может нарушаться частота кадров. Требуется перезагрузка.", + "zh": "" + }, + "ACTIVE_FRAME_LOCK_SWITCH": { + "en": "Active FrameTime Lock", + "es": "Bloqueo Activo de FrameTime", + "ru": "Активная блокировка FrameTime", + "zh": "" + }, + "ACTIVE_FRAME_LOCK_SWITCH_HELP_1": { + "en": "This option keeps the input and output timings aligned, fixing the horizontal screen tearing lines.", + "es": "Esta opción mantiene alineados las cadencias de señales de entrada y salida. Se usa para corregir líneas horizontales de corte/desgarro en el video.", + "ru": "Эта опция позволяет согласованность входной и выходной сигналы, исправляя горизонтальные линии сдвига/разрыва выходного сигнала.", + "zh": "" + }, + "ACTIVE_FRAME_LOCK_SWITCH_HELP_2": { + "en": "Two methods are available. Try switching methods if your display goes blank or shifts vertically.", + "es": "Hay dos métodos disponibles. Intente cambiar de método si la pantalla se queda en blanco o se desplaza verticalmente.", + "ru": "Доступны два метода. Попробуйте переключить методы, если изображение пропадает или смещается по вертикали.", + "zh": "" + }, + "FRAME_LOCK_SWITCH_GROUP": { + "en": "FrameTime Lock", + "es": "Bloqueo de FrameTime", + "ru": "Блокировка FrameTime", + "zh": "" + }, + "LOCK_METHOD_SWITCH": { + "en": "Switch Lock Method", + "es": "Cambiar método", + "ru": "Переключить метод", + "zh": "" + }, + "DEINTERLACE_METHOD_SWITCH_GROUP": { + "en": "Deinterlacing filter", + "es": "Filtro de desentrelazado", + "ru": "Деинтерлейсинг (устранение чересстрочности)", + "zh": "" + }, + "DEINTERLACE_METHOD_SWITCH_GROUP_HELP_1": { + "en": "GBS-Control detects interlaced content and automatically toggles \"Deinterlacing\".", + "es": "GBS-Control detecta contenido entrelazado y automáticamente activa el \"Filtro de desentrelazado\".", + "ru": "GBS-Control обнаруживает чересстрочный контент и автоматически включает Деинтерлейсинг.", + "zh": "" + }, + "DEINTERLACE_METHOD_SWITCH_GROUP_HELP_2": { + "en": "Bob Method: essentially no \"Deinterlacing\", does not add delay, but flickering is possible. Works well with the \"Scanlines\".", + "es": "Método Bob: esencialmente sin \"Desentrelazado\", no presenta retrasos, pero es posible el parpadeo. Funciona bien con las \"Scanlines\"", + "ru": "Bob-метод: практически не фильтрует Чересстрочность, не добавляет задержки, но возможны мерцания. Хорошо работает вместе с функцией Строчности.", + "zh": "" + }, + "DEINTERLACE_METHOD_SWITCH_GROUP_HELP_3": { + "en": "Motion Adaptive: eliminates flickering and artifacts on moving frame areas.", + "es": "Motion Adaptive: elimina el parpadeo y unos artefactos en las áreas de movimiento en fotograma.", + "ru": "Motion Adaptive: устраняет мерцание и некоторые искажения движущихся зон кадра.", + "zh": "" + }, + "DEINTERLACE_METHOD_SWITCH_GROUP_HELP_4": { + "en": "Configure the source for progressive output if possible. Otherwise, using \"Motion Adaptive\" is recommended.", + "es": "Configure la fuente de señal para salida progresiva si es posible. De lo contrario, se recomienda utilizar \"Motion Adaptive\".", + "ru": "Если возможно, установите прогрессивный выходной сигнал на источнике. В противном случае рекомендуется использовать \"Motion Adaptive\".", + "zh": "" + }, + "MOTION_ADAPTIVE_SWITCH": { + "en": "Motion Adaptive", + "es": "Motion Adaptive", + "ru": "Motion Adaptive", + "zh": "" + }, + "BOB_SWITCH": { + "en": "Bob (vertical interpolation)", + "es": "Método Bob (interpolación vertical)", + "ru": "Bob-метод (вертикальная интерполяция)", + "zh": "" + }, + "SYSTEM_PREFERENCES_LEGEND": { + "en": "System-wide settings", + "es": "Ajustes de todo el Sistema", + "ru": "Общесистемные настройки", + "zh": "" + }, + "LOW_RES_UPSCALE_SWITCH": { + "en": "Upscaling for Low resolutions", + "es": "Usar Ampliación (Upscaling) para resoluciones bajas", + "ru": "При низком разрешении использовать масштабирование (Upsacale)", + "zh": "" + }, + "LOW_RES_UPSCALE_SWITCH_HELP_1": { + "en": "Pass-through or Upscale for Low resolution on VGA input", + "es": "Usar modo \"Sin cambios\" (Pass-through) o Ampliación (Upscale) para resoluciones bajas de entrada VGA", + "ru": "При низком разрешении на входе VGA использовать режим \"Без изменений\" или Масштабирование (Upscale)", + "zh": "" + }, + "LOW_RES_UPSCALE_SWITCH_HELP_2": { + "en": "Low resolution sources can be either Passed through directly or get Upscaled.", + "es": "Las fuentes de baja resolución se pueden pasar directamente (Sin cambios) o Ampliar (Upscale)", + "ru": "Источники с низким разрешением можно либо передать напрямую без изменений, либо масштабировать.", + "zh": "" + }, + "LOW_RES_UPSCALE_SWITCH_HELP_3": { + "en": "While using Upscaling a border around an output image may appear.", + "es": "La ampliación puede tener un borde alrededor de la imagen de salida.", + "ru": "При Масштабировании могут измениться границы вокруг выходного изображения", + "zh": "" + }, + "LOW_RES_UPSCALE_SWITCH_HELP_4": { + "en": "Refresh rates other than 60Hz are not well supported yet.", + "es": "Frecuencias de fotogramas distintas de 60Hz aún no son compatibles.", + "ru": "Частоты входного сигнала, отличные от 60Гц, пока не поддерживаются поддерживается.", + "zh": "" + }, + "LOW_RES_UPSCALE_SWITCH_HELP_5": { + "en": "Low resolution is currently set at below or equal to 640x480 (525 active lines).", + "es": "Baja resolución actualmente está configurada en 640x480 (525 líneas activas) o menos.", + "ru": "В настоящее время низким разрешением считаеются 640x480 (525 активных строк) и ниже.", + "zh": "" + }, + "FORCE_COMPONENET_OUT_SWITCH": { + "en": "Force output to RGBHV/Component", + "es": "Forzar salida a RGBHV/Componente", + "ru": "Принудительно изменять выход на RGBHV/Компонентный", + "zh": "" + }, + "FORCE_COMPONENET_OUT_SWITCH_HELP_1": { + "en": "The default output mode is RGBHV, suitable for use with VGA cables or HDMI converters.", + "es": "El modo de salida predeterminado es RGBHV, adecuado para usar con cables VGA o convertidores HDMI.", + "ru": "Режим вывода по-умолчанию — RGBHV. Подходит для использования с кабелями VGA или преобразователями HDMI.", + "zh": "" + }, + "FORCE_COMPONENET_OUT_SWITCH_HELP_2": { + "en": "An experimental YPbPr mode can also be selected. Compatibility is still spotty.", + "es": "También se puede seleccionar un modo YPbPr experimental. La compatibilidad sigue siendo irregular.", + "ru": "Также можно выбрать экспериментальный режим YPbPr. Совместимость по-прежнему нестабильна.", + "zh": "" + }, + "DISABLE_EXT_CLOCK_SWITCH": { + "en": "Disable External Clock Generator", + "es": "Deshabilitar el generador de reloj externo", + "ru": "Отключить внешний тактовый генератор", + "zh": "" + }, + "DISABLE_EXT_CLOCK_SWITCH_HELP_1": { + "en": "By default the external clock generator is enabled (when installed).", + "es": "El generador de reloj externo está habilitado de forma predeterminada (cuando esta instalado).", + "ru": "По-умолчанию внешний тактовый генератор включен (если он установлен).", + "zh": "" + }, + "DISABLE_EXT_CLOCK_SWITCH_HELP_2": { + "en": "You can disable it if you have issues with other options, e.g \"Force increase frequency for PAL 50Hz to 60Hz\". Reboot required.", + "es": "Puede desactivarlo si tiene problemas con otras opciones, por ejemplo, \"Forzar el aumento de la frequencia de salida PAL 50 Hz hasta 60 Hz\". Reinicio requerido.", + "ru": "Вы можете отключить его, если есть проблемы с другими параметрами, например, \"Принудительно повышать частоту для PAL 50 Гц до 60 Гц\". Требуется перезагрузка.", + "zh": "" + }, + "ADC_CALIBRATION_SWITCH": { + "en": "ADC calibration", + "es": "Calibración del CAD", + "ru": "Калибровка АЦП", + "zh": "" + }, + "ADC_CALIBRATION_SWITCH_HELP_1": { + "en": "GBS-Control calibrates the ADC offsets on startup.", + "es": "GBS-Control calibra las compensaciones del CAD al inicio.", + "ru": "GBS-Control калибрует смещения АЦП при запуске.", + "zh": "" + }, + "ADC_CALIBRATION_SWITCH_HELP_2": { + "en": "In case of color shift problems, try disabling this function.", + "es": "En caso de problemas de cambio de color, intente desactivar esta función.", + "ru": "В случае проблем с цветопередачей попробуйте отключить эту функцию.", + "zh": "" + }, + "DEVELOPER_MODE_SWITCH": { + "en": "Developer Mode", + "es": "Modo desarrollador", + "ru": "Режим разработчика", + "zh": "" + }, + "DEVELOPER_MODE_SWITCH_HELP_1": { + "en": "Enables the developer menu which contains various debugging tools", + "es": "Habilita el menú de desarrollador que contiene varias herramientas adicionales.", + "ru": "Включает меню разработчика, содержащее различные инструменты отладки.", + "zh": "" + }, + "DEVELOPER_LEGEND": { + "en": "Developer", + "es": "Desarrollador", + "ru": "Разработчик", + "zh": "" + }, + "TOGGLE_CONSOLE_BUTTON": { + "en": "Toggle Console", + "es": "Ocultar/Mostrar consola", + "ru": "Скрыть/Показать консоль", + "zh": "" + }, + "MEM_LEFT_BUTTON": { + "en": "← MEM", + "es": "← MEM", + "ru": "← Память", + "zh": "" + }, + "MEM_RIGHT_BUTTON": { + "en": "MEM →", + "es": "MEM →", + "ru": "Память →", + "zh": "" + }, + "HS_LEFT_BUTTON": { + "en": "← HS", + "es": "← HS", + "ru": "← HS", + "zh": "" + }, + "HS_RIGHT_BUTTON": { + "en": "HS →", + "es": "HS →", + "ru": "HS →", + "zh": "" + }, + "LIST_OPTIONS_BUTTON": { + "en": "FS+Runtime", + "es": "Parám.Tmp.Ejec.", + "ru": "ФС+ПВВ", + "zh": "" + }, + "PRINT_INFO_BUTTON": { + "en": "Print Debug Info", + "es": "Mostrar Debug Info", + "ru": "Отладочная информация", + "zh": "" + }, + "GET_VIDEO_TIMING_BUTTON": { + "en": "Get Video Timings", + "es": "Obtener Video Timings", + "ru": "Video Timings", + "zh": "" + }, + "FREEZE_CAPTURE_BUTTON": { + "en": "Freeze Capture", + "es": "Hacer Captura", + "ru": "Стоп-кадр", + "zh": "" + }, + "ADC_FILTER_BUTTON": { + "en": "ADC Filter", + "es": "Filtro CAD", + "ru": "Фильтр АЦП", + "zh": "" + }, + "CYCLE_SDRAM_BUTTON": { + "en": "Cycle SDRAM", + "es": "Actualizar SDRAM", + "ru": "Обновить SDRAM", + "zh": "" + }, + "DEBUG_VIEW_BUTTON": { + "en": "Debug View", + "es": "Debug View", + "ru": "Режим отладки", + "zh": "" + }, + "HTOTAL_INCR_BUTTON": { + "en": "HTotal++", + "es": "HTotal++", + "ru": "HTotal++", + "zh": "" + }, + "HTOTAL_DECR_BUTTON": { + "en": "HTotal--", + "es": "HTotal--", + "ru": "HTotal--", + "zh": "" + }, + "RESYNC_HTOTAL_BUTTON": { + "en": "Resync HTotal", + "es": "Resync HTotal", + "ru": "Resync HTotal", + "zh": "" + }, + "PLL_DIVIDER_INCR_BUTTON": { + "en": "PLL divider++", + "es": "Divisor PLL++", + "ru": "Делитель PLL++", + "zh": "" + }, + "INVERT_SYNC_BUTTON": { + "en": "Invert Sync.", + "es": "Invertir Sinc.", + "ru": "Инвертировать Sync.", + "zh": "" + }, + "SYNC_WATCHER_BUTTON": { + "en": "SyncWatcher", + "es": "SyncWatcher", + "ru": "SyncWatcher", + "zh": "" + }, + "SYNC_PROCESSOR_BUTTON": { + "en": "SyncProcessor", + "es": "SyncProcessor", + "ru": "SyncProcessor", + "zh": "" + }, + "OVERSAMPLING_BUTTON": { + "en": "Oversampling", + "es": "Oversampling", + "ru": "Oversampling", + "zh": "" + }, + "HDMI_50FREQ60_BUTTON": { + "en": "60/50Hz HDMI", + "es": "60/50Hz HDMI", + "ru": "60/50Hz HDMI", + "zh": "" + }, + "IF_AUTO_OFFSET_BUTTON": { + "en": "IF Auto Offset", + "es": "IF Auto Offset", + "ru": "IF Auto Offset", + "zh": "" + }, + "SOG_LEVEL_DECR_BUTTON": { + "en": "SOG Level--", + "es": "Nivel SOG--", + "ru": "Уровень SOG--", + "zh": "" + }, + "RESET_CHIP_BUTTON": { + "en": "Reset Chip", + "es": "Resetear Chip", + "ru": "Сбросить Чип", + "zh": "" + }, + "SYSTEM_LEGEND": { + "en": "System", + "es": "Sistema", + "ru": "Система", + "zh": "" + }, + "ENABLE_OTA_BUTTON": { + "en": "Enable OTA", + "es": "Habilitar OTA", + "ru": "Включить OTA", + "zh": "" + }, + "RESTART_DEVICE_BUTTON": { + "en": "Restart", + "es": "Reiniciar", + "ru": "Перезагрузить", + "zh": "" + }, + "RESET_DEFAULTS_BUTTON": { + "en": "Reset to Defaults", + "es": "Resetear ajustes", + "ru": "Сброс настроек", + "zh": "" + }, + "BACKUP_LEGEND": { + "en": "Backup and Restore", + "es": "Copia de seguridad", + "ru": "Резервное копирование", + "zh": "" + }, + "BACKUP_BUTTON_HELP_1": { + "en": "Backup / Restore of configuration files", + "es": "Copia de seguridad/Restauración de archivos de configuración", + "ru": "Резервное копирование/восстановление файлов конфигурации", + "zh": "" + }, + "BACKUP_BUTTON_HELP_2": { + "en": "Restore backup data may fail if devices have different firmware versions", + "es": "La Restauración de datos de copia de seguridad puede fallar si los dispositivos tienen diferentes versiones de firmware", + "ru": "Восстановление данных из резервной копии может оказаться неудачным, если на устройствах установлены разные версии прошивки.", + "zh": "" + }, + "BACKUP_BUTTON": { + "en": "Backup", + "es": "Respaldar", + "ru": "Копировать", + "zh": "" + }, + "RESTORE_BUTTON": { + "en": "Restore", + "es": "Restaurar", + "ru": "Восстановить", + "zh": "" + }, + "WIFI_LEGEND": { + "en": "WiFi", + "es": "WiFi", + "ru": "WiFi", + "zh": "" + }, + "ACCESS_POINT_MODE_BUTTON": { + "en": "Access Point", + "es": "Punto de acceso", + "ru": "Точка доступа", + "zh": "" + }, + "STATION_MODE_BUTTON": { + "en": "Station", + "es": "Estación", + "ru": "Станция", + "zh": "" + }, + "SSID_SELECT_LEGEND": { + "en": "Select SSID", + "es": "Seleccione SSID", + "ru": "Выберите SSID", + "zh": "" + }, + "CONNECTO_TO_SSID_BUTTON": { + "en": "Connect to SSID", + "es": "Conectar a SSID", + "ru": "Подключиться к SSID", + "zh": "" + }, + "CONNECT_BUTTON": { + "en": "Connect", + "es": "Conectar", + "ru": "Подключиться", + "zh": "" + }, + "PROMPT_LEGEND": { + "en": "Prompt", + "es": "Prompt", + "ru": "Prompt", + "zh": "" + }, + "CANCEL_BUTTON": { + "en": "CANCEL", + "es": "CANCELAR", + "ru": "ОТМЕНА", + "zh": "" + }, + "OK_BUTTON": { + "en": "OK", + "es": "PROCEDER", + "ru": "ПРОДОЛЖИТЬ", + "zh": "" + }, + "ALERT_LEGEND": { + "en": "ALERT", + "es": "ALERTA", + "ru": "УВЕДОМЛЕНИЕ", + "zh": "" + }, + "CONSOLE_OUTPUT_LEGEND": { + "en": "Console", + "es": "Consola", + "ru": "Консоль", + "zh": "" + }, + "SSID_PLACEHOLDER": { + "en": "SSID", + "es": "SSID", + "ru": "SSID", + "zh": "" + }, + "PASSWORD_PLACEHOLDER": { + "en": "password", + "es": "contraseña", + "ru": "Пароль", + "zh": "" + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 0609c073..1454824a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ /* Language and Environment */ "target": "ES6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "lib": ["DOM","ES6"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ @@ -25,7 +25,7 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ + "module": "CommonJS", /* Specify what module code is generated. */ "rootDir": "./public/src/", /* Specify the root folder within your source files. */ // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ From 82be1a6af013b5500d485903a373eadea5ee51ac Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Fri, 7 Jun 2024 16:34:58 -0600 Subject: [PATCH 28/41] TEST: 100%-1 translated, improvements for AP mode --- configure.json | 2 +- gbs-control.ino | 2 +- public/scripts/build.js | 52 +++++--- public/src/index.html.tpl | 7 +- public/src/index.ts | 85 +++++++++---- public/src/style.css | 2 +- src/OLEDMenuImplementation.cpp | 15 +-- src/OLEDMenuTranslations.h | 212 +++++++++++---------------------- src/wifiman.cpp | 8 +- src/wserial.h | 6 +- src/wserver.cpp | 35 +++--- src/wserver.h | 4 +- translation.hdwui.json | 32 ++--- translation.webui.json | 105 +++++++++++++--- 14 files changed, 308 insertions(+), 259 deletions(-) diff --git a/configure.json b/configure.json index c10b891d..e6710e34 100644 --- a/configure.json +++ b/configure.json @@ -20,5 +20,5 @@ "ui-lang": "en", "ui-hdw-fonts": "12@FreeSans,16@FreeSans", "ui-web-font": "Oswald Regular", - "version": "24.0606" + "version": "24.0607" } \ No newline at end of file diff --git a/gbs-control.ino b/gbs-control.ino index 0456c528..ada178e1 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -1,7 +1,7 @@ //! This is autogenerated file //! Please do not edit if you're using PlatformIO -#define VERSION "24.0606" +#define VERSION "24.0607" /* ########################################################################### diff --git a/public/scripts/build.js b/public/scripts/build.js index 8ed49b84..5058a9f8 100755 --- a/public/scripts/build.js +++ b/public/scripts/build.js @@ -4,12 +4,16 @@ if (!fs.existsSync('data')) { } const path = require('path'); var html = fs.readFileSync('public/src/index.html.tpl', 'utf-8') -const js = fs.readFileSync('public/src/index.js', 'utf-8') +var js = fs.readFileSync('public/src/index.js', 'utf-8') +// // A simple script which does i18n of HTML template. -// If a variable data reqired in sentence the following expressions may be used: -// L{TAG_NAME[:VAR1[:VAR2[...]]]} -// TODO: implement in TS +// If a variable data reqired in sentence the following expressions may be used: +// in HTML: L{TAG_NAME[:VAR1[:VAR2[...]]]} +// in Typescript: 'L{TAG_NAME}'.format([...]) +// mind bracket and quotes type around tags... +// In order to keep things "as is" as possible, let's search and replace a tag both HTML and JS +// const default_ui_lang = 'en'; const config = require(path.resolve(__dirname + '/../../configure.json')); const lang = require(path.resolve(__dirname + '/../../translation.webui.json')); @@ -20,27 +24,39 @@ String.prototype.format = function() { } return a }; +const replaceLangRegex = function(matchObj, source, mask, data) { + matchObj.forEach((res) => { + let params = []; + const r0 = new String(res[1]); + if(r0 !== 'undefined' && r0.length != 0) + params = r0.substring(1).split(':'); + source = source.replaceAll( + mask, + (params.length != 0) ? data.format(...params) : data.toString() + ); + }); + return source; +}; for(const l in lang) { // get sentense with fallback let sents = new String(lang[l][config['ui-lang']]); if(sents.length == 0) - sents = String(lang[l][default_ui_lang]); + sents = new String(lang[l][default_ui_lang]); const tag = l; if(tag !== "" && sents.length != 0) { const regex = new RegExp(String.raw`L{${tag}(\:.+)?}`, 'gm'); - const f = [...html.matchAll(regex)]; - if(f !== undefined || f.length != 0) { - f.forEach((res) => { - let params = []; - if(res[1] !== undefined) - params = res[1].substring(1).split(':'); - if(params.length != 0) { - html = html.replace(regex, sents.format(...params)); - } else - html = html.replace(regex, sents.toString()); - }); - } else - console.log(`(!) nothing found for '${tag}', check translation tag names`); + let f = [...html.matchAll(regex)]; + if(f !== "undefined" && f.length != 0) { + html = replaceLangRegex(f, html, regex, sents); + } else { + // try to find this tag in JS + f = [...js.matchAll(regex)]; + // console.log(`searching ${tag} in JS...`) + if(f !== undefined || f.length != 0) { + js = replaceLangRegex(f, js, regex, sents); + } else + console.log(`(!) nothing found for '${tag}', check translation tag names`); + } } } // i18n end diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 38aa4a8d..ee4694b6 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -71,7 +71,7 @@ diff --git a/public/src/index.ts b/public/src/index.ts index 6e799c5e..1a925676 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -81,7 +81,7 @@ const Structs: StructDescriptors = { { name: 'motionAdaptive', type: 'byte', size: 1 }, { name: 'bob', type: 'byte', size: 1 }, { name: 'fullHeight', type: 'byte', size: 1 }, - { name: 'matchPreset', type: 'byte', size: 1 }, + // { name: 'matchPreset', type: 'byte', size: 1 }, { name: 'palForce60', type: 'byte', size: 1 }, ], } @@ -203,7 +203,7 @@ const GBSControl = { scanSSIDDone: false, serverIP: '', structs: null, - timeOutWs: 0, + // timeOutWs: 0, ui: { backupButton: null, backupInput: null, @@ -249,9 +249,42 @@ const GBSControl = { }, ws: null, wsCheckTimer: 0, - wsConnectCounter: 0, + // wsConnectCounter: 0, wsNoSuccessConnectingCounter: 0, - wsTimeout: 0, + developerMode: false, + wsHeartbeatInterval: null + // wsTimeout: 0 +} + +/** + * Description placeholder + * + * @type {({ lsObject: {}; write(key: string, value: any): void; read(key: string): string | number | boolean; })} + */ +const GBSStorage = { + lsObject: {}, + write(key: string, value: any) { + GBSStorage.lsObject = GBSStorage.lsObject || {} + GBSStorage.lsObject[key] = value + localStorage.setItem( + 'GBSControlSlotNames', + JSON.stringify(GBSStorage.lsObject) + ) + }, + read(key: string): string | number | boolean { + GBSStorage.lsObject = JSON.parse( + localStorage.getItem('GBSControlSlotNames') || '{}' + ) + return GBSStorage.lsObject[key] + }, +} + + +/** + * Reset current section(tab) to slots + */ +const resetCurrentPageSection = () => { + GBSStorage.write('section', 'presets') } /** websocket services */ @@ -283,16 +316,16 @@ const checkWebSocketServer = () => { /** * Description placeholder */ -const timeOutWs = () => { - console.log('timeOutWs') +// const timeOutWs = () => { +// console.log('timeOutWs') - if (GBSControl.ws) { - GBSControl.ws.close() - } +// if (GBSControl.ws) { +// GBSControl.ws.close() +// } - GBSControl.isWsActive = false - displayWifiWarning(true) -} +// GBSControl.isWsActive = false +// displayWifiWarning(true) +// } /** * Description placeholder @@ -316,14 +349,13 @@ const nodelistToArray = ( * @param {string} id * @returns {(button: HTMLElement, _index: any, _array: any) => void} */ -const toggleButtonActive = - (id: string) => (button: HTMLElement, _index: any, _array: any) => { - button.removeAttribute('active') +const toggleButtonActive = (id: string) => (button: HTMLElement, _index: any, _array: any) => { + button.removeAttribute('active') - if (button.getAttribute('gbs-element-ref') === id) { - button.setAttribute('active', '') - } + if (button.getAttribute('gbs-element-ref') === id) { + button.setAttribute('active', '') } +} /** * Description placeholder @@ -511,40 +543,42 @@ const createWebSocket = () => { GBSControl.wsNoSuccessConnectingCounter = 0 GBSControl.ws = new WebSocket(GBSControl.webSocketServerUrl, ['arduino']) + // change message data type + GBSControl.ws.binaryType = "arraybuffer"; - GBSControl.ws.onopen = () => { - // console.log("ws onopen"); + if(!GBSControl.ws) { + displayWifiWarning(true) + return + } + GBSControl.ws.onopen = () => { + console.log("ws.open") displayWifiWarning(false) - - GBSControl.wsConnectCounter++ - clearTimeout(GBSControl.wsTimeout) - GBSControl.wsTimeout = window.setTimeout(timeOutWs, 6000) GBSControl.isWsActive = true GBSControl.wsNoSuccessConnectingCounter = 0 } GBSControl.ws.onclose = () => { - // console.log("ws.onclose"); - - clearTimeout(GBSControl.wsTimeout) + console.log("ws.close") + displayWifiWarning(true) GBSControl.isWsActive = false } - GBSControl.ws.onmessage = async (message: any) => { - clearTimeout(GBSControl.wsTimeout) - GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700) + GBSControl.ws.onmessage = (message: any) => { + // GBSControl.wsTimeout = window.setTimeout(timeOutWs, 2700) GBSControl.isWsActive = true - // message data is blob - let buf = null - try { - buf = await message.data.arrayBuffer() - } catch (err) { - // must not exit here since we're filtering out - // terminal data and system state data with '#' - } + // let buf = null + // try { + // buf = await message.data.arrayBuffer() + // } catch (err) { + // // must not exit here since we're filtering out + // // terminal data and system state data with '#' + // } + if (!(message.data instanceof ArrayBuffer)) + return; // into array of DEC values - const bufArr = Array.from(new Uint8Array(buf)) + const bufUint8Arr = new Uint8Array(message.data) + const bufArr = Array.from(bufUint8Arr) const [ optionByte0, // always # optionByte1, // current slot ID (int) @@ -554,13 +588,17 @@ const createWebSocket = () => { optionByte4, // deintMode & wantTap6 & wantFullHeight & matchPresetSource & PalForce60 optionByte5, // wantOutputComponent & enableCalibrationADC & preferScalingRgbhv & disableExternalClockGenerator // developer tab - optionByte6, // printInfos, invertSync, oversampling, ADC Filter, debugView + optionByte6, // developerMode, printInfos, invertSync, oversampling, ADC Filter, debugView, freezeCapture // system tab optionByte7, // enableOTA ] = bufArr if (optionByte0 != '#'.charCodeAt(0)) { - GBSControl.queuedText += message.data + if (!("TextDecoder" in window)) + GBSControl.queuedText = 'L{DEVELOPER_JS_ALERT_TEXTDECODER}'; + const decoder = new TextDecoder("utf-8") + + GBSControl.queuedText += decoder.decode(bufUint8Arr) GBSControl.dataQueued += message.data.length if (GBSControl.dataQueued >= 70000) { @@ -637,12 +675,12 @@ const createWebSocket = () => { case 'fullHeight': toggleButtonCheck(button, (optionByte4 & 0x04) == 0x04) break - case 'matchPreset': - toggleButtonCheck(button, (optionByte4 & 0x08) == 0x08) - break case 'palForce60': - toggleButtonCheck(button, (optionByte4 & 0x10) == 0x10) + toggleButtonCheck(button, (optionByte4 & 0x08) == 0x08) break + // case 'matchPreset': + // toggleButtonCheck(button, (optionByte4 & 0x08) == 0x08) + // break /** 4: system preferences tab */ case 'wantOutputComponent': toggleButtonCheck(button, (optionByte5 & 0x01) == 0x01) @@ -675,19 +713,39 @@ const createWebSocket = () => { const debugView = document.querySelector( `button[gbs-message="D"][gbs-message-type="action"]` ) + const freezeCaptureButton = document.querySelector( + `button[gbs-message="F"][gbs-message-type="user"]` + ); if ((optionByte6 & 0x01) == 0x01) + GBSControl.developerMode = true; + else + GBSControl.developerMode = false; + toggleDeveloperMode() + + if ((optionByte6 & 0x02) == 0x02) printInfoButton.setAttribute('active', '') - else printInfoButton.removeAttribute('active') - if ((optionByte6 & 0x02) == 0x02) invertSync.setAttribute('active', '') - else invertSync.removeAttribute('active') + else + printInfoButton.removeAttribute('active') if ((optionByte6 & 0x04) == 0x04) + invertSync.setAttribute('active', '') + else + invertSync.removeAttribute('active') + if ((optionByte6 & 0x08) == 0x08) oversampling.setAttribute('active', '') - else oversampling.removeAttribute('active') - if ((optionByte6 & 0x08) == 0x08) adcFilter.setAttribute('active', '') - else adcFilter.removeAttribute('active') + else + oversampling.removeAttribute('active') if ((optionByte6 & 0x10) == 0x10) + adcFilter.setAttribute('active', '') + else + adcFilter.removeAttribute('active') + if ((optionByte6 & 0x20) == 0x20) debugView.setAttribute('active', '') - else debugView.removeAttribute('active') + else + debugView.removeAttribute('active') + if ((optionByte6 & 0x40) == 0x40) + freezeCaptureButton.setAttribute('active', '') + else + freezeCaptureButton.removeAttribute('active') // system tab const enableOTAButton = document.querySelector( @@ -751,7 +809,9 @@ const createIntervalChecks = () => { const loadDoc = (link: string) => { return fetch( `http://${GBSControl.serverIP}/sc?${link}&nocache=${new Date().getTime()}` - ) + ).catch(() => { + // do something + }) } /** @@ -765,11 +825,14 @@ const loadUser = (link: string) => { GBSControl.isWsActive = false GBSControl.ui.terminal.value += '\nL{DEVICE_RESTARTING_CONSOLE_MESSAGE}\n' GBSControl.ui.terminal.scrollTop = GBSControl.ui.terminal.scrollHeight + resetCurrentPageSection() } return fetch( `http://${GBSControl.serverIP}/uc?${link}&nocache=${new Date().getTime()}` - ) + ).catch(() => { + // do something + }) } /** WIFI management */ @@ -800,6 +863,8 @@ const wifiGetStatus = () => { ) GBSControl.ui.wifiStaSSID.innerHTML = `${GBSControl.wifi.ssid}` } + }).catch(() => { + // do something }) } @@ -831,6 +896,8 @@ const wifiConnect = () => { window.location.href = 'http://gbscontrol.local/' }) .catch(() => {}) + }).catch(() => { + // do something }) } @@ -847,6 +914,8 @@ const wifiScanSSID = () => { }).then(() => { GBSControl.scanSSIDDone = true window.setTimeout(wifiScanSSID, 3000) + }).catch(() => { + // do something }) return } @@ -885,6 +954,8 @@ const wifiScanSSID = () => { GBSControl.ui.wifiList.removeAttribute('hidden') GBSControl.ui.wifiConnect.setAttribute('hidden', '') } + }).catch(() => { + // do something }) } @@ -925,6 +996,8 @@ const wifiSetAPMode = () => { }) .catch(() => {}) return response + }).catch(() => { + // do something }) } @@ -1031,6 +1104,8 @@ const fetchSlotNames = () => { return true } return false + }).catch(() => { + // do something }) } @@ -1065,6 +1140,8 @@ const removePreset = () => { fetchSlotNamesErrorRetry() } }) + }).catch(() => { + // do something }) }) .catch(() => {}) @@ -1106,6 +1183,8 @@ const savePreset = () => { }) }, 500) // }); + }).catch(() => { + // do something }) } }) @@ -1142,6 +1221,9 @@ const getSlotsHTML = () => { */ const setSlot = (slot: string, el: HTMLElement) => { fetch(`http://${GBSControl.serverIP}/slot/set?index=${slot}&${+new Date()}`) + .catch(() => { + // do something + }) } /** @@ -1226,17 +1308,6 @@ const toggleHelp = () => { updateHelp(!help) } -/** - * Description placeholder - */ -const toggleDeveloperMode = () => { - const developerMode = GBSStorage.read('developerMode') || false - - GBSStorage.write('developerMode', !developerMode) - // updateDeveloperMode(!developerMode) - initDeveloperMode(); -} - /** * Description placeholder * @@ -1253,18 +1324,19 @@ const updateHelp = (help: boolean) => { /** * Toggle console visibility (see corresponding button) * - * @param {boolean} developerMode */ -const updateConsoleVisibility = (developerMode: boolean) => { - // const developerMode = GBSStorage.read("developerMode") as boolean; - if (developerMode) { +const updateConsoleVisibility = () => { + // const developerMode = GBSStorage.read('developerMode') || false + if (GBSControl.developerMode) { const consoleStatus = GBSStorage.read('consoleVisible') as boolean - if (consoleStatus !== true) { + if (consoleStatus != true) { GBSStorage.write('consoleVisible', true) + // GBSControl.consoleVisible = true GBSControl.ui.toggleConsole.setAttribute('active', '') document.body.classList.remove('gbs-output-hide') } else { GBSStorage.write('consoleVisible', false) + // GBSControl.consoleVisible = false GBSControl.ui.toggleConsole.removeAttribute('active') document.body.classList.add('gbs-output-hide') } @@ -1272,51 +1344,30 @@ const updateConsoleVisibility = (developerMode: boolean) => { } /** - * Description placeholder - * - * @param {boolean} developerMode + * Toggle developer mode (see WS heartbeat) */ -const updateDeveloperMode = (developerMode: boolean) => { - const el = document.querySelector( - '[gbs-section="developer"]' - ) as HTMLElement - if (developerMode) { - GBSStorage.write('consoleVisible', true) +const toggleDeveloperMode = () => { + const el = document.querySelector('[gbs-section="developer"]') as HTMLElement + const consoleStatus = GBSStorage.read('consoleVisible') as boolean + if (GBSControl.developerMode) { el.removeAttribute('hidden') + if(consoleStatus == true) { + document.body.classList.remove('gbs-output-hide') + } GBSControl.ui.developerSwitch.setAttribute('active', '') - document.body.classList.remove('gbs-output-hide') + GBSControl.ui.developerSwitch.querySelector('.gbs-icon').innerText = "toggle_on" + // if(!GBSControl.wsHeartbeatInterval) + // GBSControl.wsHeartbeatInterval = window.setInterval(webSocketHeartbeat, 900); } else { el.setAttribute('hidden', '') - GBSControl.ui.developerSwitch.removeAttribute('active') + GBSStorage.write('consoleVisible', true) document.body.classList.add('gbs-output-hide') + GBSControl.ui.developerSwitch.removeAttribute('active') + GBSControl.ui.developerSwitch.querySelector('.gbs-icon').innerText = "toggle_off" + window.clearInterval(GBSControl.wsHeartbeatInterval); } +}; - GBSControl.ui.developerSwitch.querySelector('.gbs-icon').innerText = - developerMode ? 'toggle_on' : 'toggle_off' -} - -/** - * Description placeholder - * - * @type {({ lsObject: {}; write(key: string, value: any): void; read(key: string): string | number | boolean; })} - */ -const GBSStorage = { - lsObject: {}, - write(key: string, value: any) { - GBSStorage.lsObject = GBSStorage.lsObject || {} - GBSStorage.lsObject[key] = value - localStorage.setItem( - 'GBSControlSlotNames', - JSON.stringify(GBSStorage.lsObject) - ) - }, - read(key: string): string | number | boolean { - GBSStorage.lsObject = JSON.parse( - localStorage.getItem('GBSControlSlotNames') || '{}' - ) - return GBSStorage.lsObject[key] - }, -} /** * Description placeholder @@ -1388,10 +1439,14 @@ const doRestore = (f: File) => { body: formData, }).then((response) => { // backupInput.removeAttribute("disabled"); + // start with 1st tab + resetCurrentPageSection() window.setTimeout(() => { window.location.reload() - }, 2000) + }, 4000) return response + }).catch(() => { + // do something }) } ) @@ -1450,10 +1505,14 @@ const initMenuButtons = () => { ) const scroll = document.querySelector('.gbs-scroll') - menuButtons.forEach((button) => + let currentPage = GBSStorage.read('section') || 'presets' + if(!GBSControl.developerMode && currentPage === 'developer') + currentPage = 'presets' + menuButtons.forEach((button) => { + const sectionName = button.getAttribute('gbs-section') button.addEventListener('click', () => { - const section = button.getAttribute('gbs-section') - + const section = sectionName; + GBSStorage.write('section', section) sections.forEach((section) => section.setAttribute('hidden', '')) document .querySelector(`section[name="${section}"]`) @@ -1463,7 +1522,10 @@ const initMenuButtons = () => { button.setAttribute('active', '') scroll.scrollTo(0, 1) }) - ) + // get back to the last section after reload + if(currentPage === sectionName) + button.dispatchEvent(new Event("click")) + }) } /** @@ -1490,7 +1552,7 @@ const initGBSButtons = () => { // custom events applied for some buttons button.addEventListener('click', () => { if(message == '1' && messageType == 'user') { - // reset to defaults button + // reset to defaults (factory) command gbsAlert( 'L{RESET_BUTTON_JS_ALERT_MESSAGE}', '
    close
    L{JS_NO}
    ', @@ -1508,6 +1570,11 @@ const initGBSButtons = () => { } ).catch(() => { }); + } else if(message == 'a' && messageType == 'user') { + // restart device command + window.setTimeout(() => { + window.location.reload() + }, 5000) } else { // all other buttons action(message, button) @@ -1635,7 +1702,11 @@ const initGeneralListeners = () => { GBSControl.ui.wifiConnectButton.addEventListener('click', wifiConnect) GBSControl.ui.wifiApButton.addEventListener('click', wifiSetAPMode) GBSControl.ui.wifiStaButton.addEventListener('click', wifiScanSSID) - GBSControl.ui.developerSwitch.addEventListener('click', toggleDeveloperMode) + // GBSControl.ui.developerSwitch.addEventListener('click', () => { + // const developerMode = GBSStorage.read('developerMode') || false + // GBSStorage.write('developerMode', !developerMode) + // updateConsoleVisibility() + // }) GBSControl.ui.removeSlotButton.addEventListener('click', () => { removePreset() }) @@ -1674,22 +1745,10 @@ const initGeneralListeners = () => { gbsPromptPromise.reject() } }) -} -/** - * Description placeholder - */ -const initDeveloperMode = () => { - const devMode = GBSStorage.read('developerMode') as boolean - if (devMode === undefined) { - GBSStorage.write('developerMode', false) - updateDeveloperMode(false) - } else { - updateDeveloperMode(devMode) - } // toggle console visibility button GBSControl.ui.toggleConsole.addEventListener('click', () => { - updateConsoleVisibility(devMode) + updateConsoleVisibility() }) } @@ -1719,7 +1778,6 @@ const initUI = () => { initClearButton() initControlMobileKeys() initUnloadListener() - initDeveloperMode() initHelp() } diff --git a/public/src/style.css b/public/src/style.css index e750898c..b7c364fe 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -16,7 +16,7 @@ --viewport-height: 100%; /*GBC - --color-black: black; + --color-black: black; --color-cod-gray-light: #181818; --color-cod-gray: #101010; --color-mine-shaft-light: #0f380f; @@ -60,16 +60,14 @@ body { height: 100%; touch-action: manipulation; width: 100%; + margin: 0; + padding: 0; } body { background-color: var(--color-cod-gray); font-family: "${webUIFontName}", sans-serif; - height: 100%; - margin: 0; overflow: hidden; - padding: 0; - width: 100%; } * { diff --git a/src/OLEDMenuTranslations.h b/src/OLEDMenuTranslations.h index 6ec20aa7..acebe973 100644 --- a/src/OLEDMenuTranslations.h +++ b/src/OLEDMenuTranslations.h @@ -99,33 +99,36 @@ const unsigned char OM_PRESET [] PROGMEM = { }; -#define OM_RESET_RESTORE_WIDTH 78 +#define OM_RESET_RESTORE_WIDTH 84 #define OM_RESET_RESTORE_HEIGHT 15 const unsigned char OM_RESET_RESTORE [] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0, -0x0,0x0,0xf0,0x1,0x0,0x0,0x0,0x0,0xc2,0x0,0x0,0x40,0x14,0x6,0x0,0x4, -0x0,0x0,0x82,0x0,0x0,0x40,0x14,0x4,0x0,0x4,0x0,0x0,0xc2,0x3c,0x9e,0xc7, -0x10,0xe6,0xf1,0xec,0x71,0xf,0x7e,0x44,0x82,0x48,0xf2,0x23,0x12,0x24,0x12,0x11, -0x42,0x7c,0x8e,0x4f,0x12,0xe2,0x73,0x34,0x12,0x1f,0x82,0x4,0x90,0x40,0x10,0x24, -0x80,0x24,0x12,0x1,0x82,0x44,0x92,0x48,0x11,0x24,0x92,0x24,0x12,0x11,0x82,0x3c, -0x9e,0xc7,0x11,0xe4,0xf1,0xec,0x11,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x3e,0x0,0x0,0x0,0x0,0x7c,0x0,0x0,0x0,0x0,0x0,0xc2,0x0,0x0,0x40, +0x20,0x84,0x1,0x0,0x1,0x0,0x0,0x82,0x0,0x0,0x40,0x20,0x4,0x1,0x0,0x1, +0x0,0x0,0xc2,0x3c,0x9e,0xc7,0x0,0x84,0x79,0x3c,0x7b,0xdc,0x3,0x7e,0x44,0x82, +0x48,0x10,0xfc,0x88,0x4,0x89,0x44,0x4,0x42,0x7c,0x8e,0x4f,0x10,0x84,0xf8,0x1c, +0x8d,0xc4,0x7,0x82,0x4,0x90,0x40,0x0,0x4,0x9,0x20,0x89,0x44,0x0,0x82,0x44, +0x92,0x48,0x8,0x4,0x89,0x24,0x89,0x44,0x4,0x82,0x3c,0x9e,0xc7,0x8,0x4,0x79, +0x3c,0x7b,0xc4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0, }; -#define OM_RESET_GBS_WIDTH 60 +#define OM_RESET_GBS_WIDTH 78 #define OM_RESET_GBS_HEIGHT 15 const unsigned char OM_RESET_GBS [] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0xc0,0xe3,0xc3,0x3, -0xc2,0x0,0x0,0x40,0x20,0x26,0x66,0x6,0x82,0x0,0x0,0x40,0x10,0x24,0x24,0x4, -0xc2,0x3c,0x9e,0xc7,0x10,0x20,0x64,0x0,0x7e,0x44,0x82,0x48,0x10,0xe7,0xc3,0x3, -0x42,0x7c,0x8e,0x4f,0x10,0x2c,0x4,0x6,0x82,0x4,0x90,0x40,0x10,0x2c,0x24,0x4, -0x82,0x44,0x92,0x48,0x30,0x2c,0x24,0x4,0x82,0x3c,0x9e,0xc7,0xe0,0xeb,0xc3,0x7, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0, +0x0,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0xc2,0x0,0x80,0x0,0x20,0x80,0x0,0x0, +0x0,0x0,0x82,0x0,0x80,0x0,0x20,0x80,0x0,0x0,0x0,0x0,0xc2,0x3c,0x9e,0x2d, +0x6e,0xf8,0x3c,0xb3,0x3c,0xf,0x7e,0x44,0x82,0x40,0x22,0x88,0x44,0x92,0x4,0x11, +0x42,0x7c,0x8e,0x70,0x22,0x84,0x7c,0x92,0x2,0x1f,0x82,0x4,0x90,0x44,0x22,0x84, +0x4,0x8a,0x2,0x1,0x82,0x44,0x92,0x64,0x22,0x88,0x44,0x8c,0x64,0x11,0x82,0x3c, +0x9e,0x7d,0x62,0xf8,0x3c,0x8c,0x3c,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0, }; diff --git a/src/main.cpp b/src/main.cpp index 816f54fe..eceba4b5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Friday, 7th June 2024 4:52:58 pm # +# Last Modified: Monday, 10th June 2024 4:04:57 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -169,6 +169,9 @@ void setup() // dev rto->invertSync = false; rto->debugView = false; + rto->developerMode = false; + rto->freezeCapture = false; + rto->adcFilter = false; adco->r_gain = 0; adco->g_gain = 0; @@ -183,7 +186,7 @@ void setup() if (rto->webServerEnabled) { wifiInit(); - webSocket.begin(); + serverWebSocketInit(); serverInit(); #ifdef HAVE_PINGER_LIBRARY @@ -220,7 +223,7 @@ void setup() while (millis() - initDelay < 1500) { display.drawXbm(2, 2, gbsicon_width, gbsicon_height, gbsicon_bits); display.display(); - wifiLoop(0); + // wifiLoop(0); delay(1); } display.clear(); @@ -271,8 +274,8 @@ void setup() // ? WHY? initDelay = millis(); while (millis() - initDelay < 1000) { - wifiLoop(0); - delay(1); + // wifiLoop(0); + delay(10); } // dummy commands @@ -302,9 +305,8 @@ void setup() // restart and dummy startWire(); - delay(1); + delay(10); GBS::STATUS_00::read(); - delay(1); if (!checkBoardPower()) { stopWire(); @@ -331,6 +333,7 @@ void setup() } zeroAll(); + _DBGN(F("(!) reset runtime parameters while setup")); setResetParameters(); prepareSyncProcessor(); @@ -345,8 +348,6 @@ void setup() // FIXME double reset? // setResetParameters(); - // wifiLoop(1); - // startup reliability test routine /*rto->videoStandardInput = 1; writeProgramArrayNew(ntsc_240p, 0); @@ -387,11 +388,7 @@ void loop() static unsigned long lastTimeInterruptClear = millis(); menuLoop(); - wifiLoop(0); // WiFi + OTA + WS + MDNS, checks for server enabled + started - // Serial takes precedence - handleSerialCommand(); - // handle user commands - handleUserCommand(); + wifiLoop(); // WiFi + OTA + WS + MDNS, checks for server enabled + started // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false @@ -636,8 +633,17 @@ void loop() } #endif // HAVE_PINGER_LIBRARY + // Serial takes precedence + handleSerialCommand(); + // skip the code below if we don't hava the web server + if (!rto->webServerEnabled || !rto->webServerStarted) + return; + // handle user commands + handleUserCommand(); // web client handler server.handleClient(); + MDNS.update(); + dnsServer.processNextRequest(); // websocket event handler webSocket.loop(); // handle ArduinoIDE diff --git a/src/options.h b/src/options.h index d7931c4c..8640593b 100644 --- a/src/options.h +++ b/src/options.h @@ -18,6 +18,13 @@ #define MENU_WIDTH 131 #define MENU_HEIGHT 19 #define AUTO_GAIN_INIT 0x48 +#define SCANLINE_STRENGTH_INIT 0x30 +#define WEBSOCK_HBEAT_INTVAL 1500UL +#define WEBSOCK_HBEAT_PONG_TOUT 1500UL +#define WEBSOCK_HBEAT_DISCONN_CNT 5 +#define WEBSOCK_HBEAT_DEV_INTVAL 500UL +#define WEBSOCK_HBEAT_DEV_PONG_TOUT 1000UL +#define WEBSOCK_HBEAT_DEV_DISCONN_CNT 3 #define THIS_DEVICE_MASTER #ifdef HAVE_BUTTONS #define INPUT_SHIFT 0 @@ -26,6 +33,9 @@ #define MENU_SHIFT 3 #define BACK_SHIFT 4 #endif // HAVE_BUTTONS +#if !defined(SERIAL_BUFFER_MAX_LEN) +#define SERIAL_BUFFER_MAX_LEN 512UL // use a number aligned with 4 +#endif // SERIAL_BUFFER_MAX_LEN #if !defined(DISPLAY_SDA) // SDA = D2 (Lolin), D14 (Wemos D1) // ESP8266 Arduino default map: SDA #define DISPLAY_SDA D2 @@ -152,7 +162,7 @@ struct userOptions uint8_t preferScalingRgbhv; uint8_t PalForce60; uint8_t disableExternalClockGenerator; - uint8_t matchPresetSource; + // uint8_t matchPresetSource; uint8_t wantStepResponse; uint8_t wantFullHeight; uint8_t enableCalibrationADC; @@ -227,6 +237,9 @@ struct runTimeOptions // dev bool invertSync; bool debugView; + bool developerMode; + bool freezeCapture; + bool adcFilter; }; // remember adc options across presets struct adcOptions diff --git a/src/presets.cpp b/src/presets.cpp index 2426d1f7..632b2614 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Friday, 7th June 2024 4:52:58 pm # +# Last Modified: Monday, 10th June 2024 4:04:57 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -67,7 +67,6 @@ void loadPresetMdSection() */ void setResetParameters() { - _WSN(F("(!) runtime data reset")); // TODO: do we reset resolution here? rto->videoStandardInput = 0; rto->videoIsFrozen = false; @@ -94,9 +93,10 @@ void setResetParameters() rto->useHdmiSyncFix = 0; rto->notRecognizedCounter = 0; - // DEV - rto->invertSync = false; - rto->debugView = false; + // this may not be reset here + // rto->invertSync = false; + // rto->debugView = false; + // rto->developerMode = false; adco->r_gain = 0; adco->g_gain = 0; @@ -1075,13 +1075,13 @@ void doPostPresetLoadSteps() while ((!getStatus16SpHsStable()) && (millis() - timeout < 2002)) { delay(4); - wifiLoop(0); + // wifiLoop(0); updateSpDynamic(0); } while ((getVideoMode() == 0) && (millis() - timeout < 1505)) { delay(4); - wifiLoop(0); + // wifiLoop(0); updateSpDynamic(0); } @@ -1236,7 +1236,7 @@ void doPostPresetLoadSteps() // if (rto->presetID == 0x05 || rto->presetID == 0x15) { if (uopt->resolutionID == Output1080p || uopt->resolutionID == Output1080p50) { - _WS(F("(set your TV aspect ratio to 16:9!)")); + _WS(F("(set your TV aspect ratio to 16:9)")); } if (rto->videoStandardInput == 14) { @@ -1345,8 +1345,8 @@ void applyPresets(uint8_t videoMode) // inputAndSyncDetect() -> goLowPowerWithInputDetection() will // call setResetParameters() again. But if we don't call // setResetParameters() here, the second call will never happen. + _DBGN(F("(!) reset runtime parameters while applying preset")); setResetParameters(); - _DBGN(F("reset runtime parameters while applying preset")); // Deselect the output resolution in the web UI. We cannot call // doPostPresetLoadSteps() to select the right resolution, since @@ -1489,7 +1489,6 @@ void applyPresets(uint8_t videoMode) { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); - _WSF(PSTR("%d preset is now active\n"), preset); if (applySavedBypassPreset()) { _DBGN(F("Bypass preset applied")); @@ -1499,16 +1498,17 @@ void applyPresets(uint8_t videoMode) // } else if (uopt->presetPreference == 4) { else if (uopt->resolutionID == Output1024p) { - if (uopt->matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) - { - writeProgramArrayNew(ntsc_240p, false); // pref = x1024 override to x960 - _WSN(F("ntsc_240p is now active")); - } - else - { + // comments are misleading, the functionality is unknown + // if (uopt->matchPresetSource && (videoMode != 8) && (GBS::GBS_OPTION_SCALING_RGBHV::read() == 0)) + // { + // writeProgramArrayNew(ntsc_240p, false); // pref = x1024 override to x960 + // _WSN(F("ntsc_240p is now active")); + // } + // else + // { writeProgramArrayNew(ntsc_1280x1024, false); _WSN(F("ntsc_1280x1024 is now active")); - } + // } } #endif // defined(ESP8266) @@ -1532,16 +1532,16 @@ void applyPresets(uint8_t videoMode) // if (uopt->presetPreference == 0) { if (uopt->resolutionID == Output240p) { - if (uopt->matchPresetSource) - { - writeProgramArrayNew(pal_1280x1024, false); // pref = x960 override to x1024 - _WSN(F("pal_1280x1024 is now active")); - } - else - { + // if (uopt->matchPresetSource) + // { + // writeProgramArrayNew(pal_1280x1024, false); // pref = x960 override to x1024 + // _WSN(F("pal_1280x1024 is now active")); + // } + // else + // { writeProgramArrayNew(pal_240p, false); _WSN(F("pal_240p is now active")); - } + // } // } else if (uopt->presetPreference == 1) { } else if (uopt->resolutionID == Output576p50) @@ -1566,7 +1566,6 @@ void applyPresets(uint8_t videoMode) { const uint8_t *preset = loadPresetFromLFS(videoMode); writeProgramArrayNew(preset, false); - _WSF(PSTR("%d preset is now active\n"), preset); if (applySavedBypassPreset()) { _DBGN(F("Bypass preset applied")); @@ -1718,7 +1717,7 @@ const uint8_t *loadPresetFromLFS(byte forVideoMode) f = LittleFS.open(buffer, "r"); if (!f) { - _WSN(F("no preset file for this slot and source")); + _WSN(F("no preset file for this slot and source, using 240p")); if (forVideoMode == 2 || forVideoMode == 4) return pal_240p; else @@ -1730,7 +1729,7 @@ const uint8_t *loadPresetFromLFS(byte forVideoMode) s = f.readStringUntil('}'); f.close(); } - +// FIXME char *tmp; uint16_t i = 0; tmp = strtok(&s[0], ","); diff --git a/src/slot.cpp b/src/slot.cpp index c2465466..7c1b9d24 100644 --- a/src/slot.cpp +++ b/src/slot.cpp @@ -3,7 +3,7 @@ # File: slot.cpp # # File Created: Friday, 31st May 2024 8:41:15 am # # Author: Sergey Ko # -# Last Modified: Sunday, 2nd June 2024 10:57:25 pm # +# Last Modified: Monday, 10th June 2024 1:59:11 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -40,7 +40,7 @@ bool slotLoad(const uint8_t & slotIndex) { uopt->deintMode = slotsObject.slot[slotIndex].deintMode; uopt->wantTap6 = slotsObject.slot[slotIndex].wantTap6; uopt->wantFullHeight = slotsObject.slot[slotIndex].wantFullHeight; - uopt->matchPresetSource = slotsObject.slot[slotIndex].matchPresetSource; + // uopt->matchPresetSource = slotsObject.slot[slotIndex].matchPresetSource; uopt->PalForce60 = slotsObject.slot[slotIndex].PalForce60; return true; } @@ -78,7 +78,7 @@ void slotUpdate(SlotMetaArray & slotsObject, const uint8_t & slotIndex, String * slotsObject.slot[slotIndex].deintMode = uopt->deintMode; slotsObject.slot[slotIndex].wantTap6 = uopt->wantTap6; slotsObject.slot[slotIndex].wantFullHeight = uopt->wantFullHeight; - slotsObject.slot[slotIndex].matchPresetSource = uopt->matchPresetSource; + // slotsObject.slot[slotIndex].matchPresetSource = uopt->matchPresetSource; slotsObject.slot[slotIndex].PalForce60 = uopt->PalForce60; } @@ -118,7 +118,7 @@ int8_t slotGetData(SlotMetaArray & slotsObject) { slotsObject.slot[i].deintMode = 0; slotsObject.slot[i].wantTap6 = 0; slotsObject.slot[i].wantFullHeight = 0; - slotsObject.slot[i].matchPresetSource = 0; + // slotsObject.slot[i].matchPresetSource = 0; slotsObject.slot[i].PalForce60 = 0; strncpy(slotsObject.slot[i].name, slot_name.c_str(), @@ -174,7 +174,7 @@ bool slotFlush() { if(!slotSetData(slotObject)) return false; - _DBGF(PSTR("slot %d updated\n"), uopt->slotID); + _DBGF(PSTR("slotID: %d has been updated\n"), uopt->slotID); return true; } @@ -195,7 +195,7 @@ bool slotResetFlush(const uint8_t & slotIndex) { if(!slotSetData(slotObject)) return false; - _DBGF(PSTR("slot %d reset success\n"), slotIndex); + _DBGF(PSTR("slotID: %d reset success\n"), slotIndex); return true; } @@ -220,7 +220,7 @@ void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex) { slotsObject.slot[slotIndex].deintMode = 0; slotsObject.slot[slotIndex].wantTap6 = 0; slotsObject.slot[slotIndex].wantFullHeight = 0; - slotsObject.slot[slotIndex].matchPresetSource = 0; + // slotsObject.slot[slotIndex].matchPresetSource = 0; slotsObject.slot[slotIndex].PalForce60 = 0; strncpy( slotsObject.slot[slotIndex].name, @@ -232,7 +232,7 @@ void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex) { if(slotIndex == uopt->slotID) { uopt->resolutionID = Output240p; uopt->wantScanlines = 0; - uopt->scanlineStrength = 0x30; + uopt->scanlineStrength = SCANLINE_STRENGTH_INIT; uopt->wantVdsLineFilter = 0; uopt->wantStepResponse = 1; uopt->wantPeaking = 1; @@ -242,7 +242,7 @@ void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex) { uopt->deintMode = 0; uopt->wantTap6 = 1; uopt->wantFullHeight = 1; - uopt->matchPresetSource = 1; + // uopt->matchPresetSource = 1; uopt->PalForce60 = 0; // uopt->wantOutputComponent = 0; diff --git a/src/slot.h b/src/slot.h index 0bf4ed62..4ef109bd 100644 --- a/src/slot.h +++ b/src/slot.h @@ -25,7 +25,7 @@ typedef struct uint8_t deintMode; uint8_t wantTap6; uint8_t wantFullHeight; - uint8_t matchPresetSource; + // uint8_t matchPresetSource; uint8_t PalForce60; } SlotMeta; diff --git a/src/video.cpp b/src/video.cpp index 165fc498..edcff645 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Friday, 7th June 2024 4:57:34 pm # +# Last Modified: Monday, 10th June 2024 4:04:57 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -457,8 +457,7 @@ void externalClockGenResetClock() GBS::PAD_CKIN_ENZ::write(0); // 0 = clock input enable (pin40) FrameSync::clearFrequency(); - _DBG(F("clock gen reset: ")); - _DBGN(rto->freqExtClockGen); + _DBGF(PSTR("reset ext. clock gen. to: %ld\n"), rto->freqExtClockGen); } /** @@ -1935,7 +1934,7 @@ void runAutoGain() for (uint8_t i = 0; i < loopCeiling; i++) { if (i % 20 == 0) { - wifiLoop(0); + // wifiLoop(0); limit_found = 0; } greenValue = GBS::TEST_BUS_2F::read(); @@ -2586,8 +2585,8 @@ void goLowPowerWithInputDetection() GBS::OUT_SYNC_CNTRL::write(0); // no H / V sync out to PAD GBS::DAC_RGBS_PWDNZ::write(0); // direct disableDAC() // zeroAll(); + _DBGN(F("(!) reset runtime parameters while going LowPower")); setResetParameters(); // includes rto->videoStandardInput = 0 - _DBGN(F("reset runtime parameters while going LowPower")); prepareSyncProcessor(); delay(100); rto->isInLowPowerMode = true; @@ -4178,7 +4177,7 @@ void runSyncWatcher() rto->noSyncCounter = 0x07fe; // will cause a return break; } - wifiLoop(0); + // wifiLoop(0); delay(1); } @@ -4832,7 +4831,7 @@ void runSyncWatcher() if (RGBHVNoSyncCounter > limitNoSync) { RGBHVNoSyncCounter = 0; - _DBGN(F("reset runtime parameters while running syncWatcher")); + _DBGN(F("(!) reset runtime parameters while running syncWatcher")); setResetParameters(); prepareSyncProcessor(); resetSyncProcessor(); // todo: fix MD being stuck in last mode when sync disappears @@ -5025,7 +5024,7 @@ uint8_t detectAndSwitchToActiveInput() unsigned long timeout = millis(); while (millis() - timeout < 450) { delay(10); - wifiLoop(0); + // wifiLoop(0); bool stable = getStatus16SpHsStable(); if (stable) { @@ -5047,7 +5046,7 @@ uint8_t detectAndSwitchToActiveInput() // 360ms good up to 5_34 SP_V_TIMER_VAL = 0x0b while (!vsyncActive && ((millis() - timeOutStart) < 360)) { vsyncActive = GBS::STATUS_SYNC_PROC_VSACT::read(); - wifiLoop(0); // wifi stack + // wifiLoop(0); // wifi stack delay(1); } @@ -5060,7 +5059,7 @@ uint8_t detectAndSwitchToActiveInput() timeOutStart = millis(); while (!hsyncActive && millis() - timeOutStart < 400) { hsyncActive = GBS::STATUS_SYNC_PROC_HSACT::read(); - wifiLoop(0); // wifi stack + // wifiLoop(0); // wifi stack delay(1); } diff --git a/src/wifiman.cpp b/src/wifiman.cpp index 041c0064..96979ed7 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Friday, 7th June 2024 4:52:58 pm # +# Last Modified: Saturday, 8th June 2024 4:19:54 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -13,7 +13,7 @@ #include "wifiman.h" static unsigned long _connectCheckTime = 0; -static unsigned long _lastTimePing = 0; +// static unsigned long _lastTimePing = 0; #ifdef THIS_DEVICE_MASTER @@ -86,82 +86,82 @@ static void wifiEventHandler(System_Event_t *e) * which is in webUI (see: createWebSocket()) * */ -void updateWebSocketData() -{ - // assert free heap - if (ESP.getFreeHeap() > 14000) { - webSocket.disconnect(); - } +// void updateWebSocketData() +// { +// // assert free heap +// // if (ESP.getFreeHeap() > 14000) { +// // webSocket.disconnect(); +// // } - if (rto->webServerEnabled && rto->webServerStarted) { - if (webSocket.connectedClients() > 0) { - constexpr size_t MESSAGE_LEN = 8; - uint8_t toSend[MESSAGE_LEN]; - memset(toSend, 0, MESSAGE_LEN); - // special character # used for message filtering in WebUI - toSend[0] = '#'; - toSend[1] = uopt->slotID + '0'; - // TODO: resolutionID must be INTEGER too? - toSend[2] = (char)uopt->resolutionID; - // - if (uopt->wantScanlines) - toSend[3] |= (1 << 0); - if (uopt->wantVdsLineFilter) - toSend[3] |= (1 << 1); - if (uopt->wantStepResponse) - toSend[3] |= (1 << 2); - if (uopt->wantPeaking) - toSend[3] |= (1 << 3); - if (uopt->enableAutoGain) - toSend[3] |= (1 << 4); - if (uopt->enableFrameTimeLock) - toSend[3] |= (1 << 5); +// if (rto->webServerEnabled && rto->webServerStarted) { +// if (webSocket.connectedClients() > 0) { +// constexpr size_t MESSAGE_LEN = 8; +// uint8_t toSend[MESSAGE_LEN]; +// memset(toSend, 0, MESSAGE_LEN); +// // special character # used for message filtering in WebUI +// toSend[0] = '#'; +// toSend[1] = uopt->slotID + '0'; +// // TODO: resolutionID must be INTEGER too? +// toSend[2] = (char)uopt->resolutionID; +// // +// if (uopt->wantScanlines) +// toSend[3] |= (1 << 0); +// if (uopt->wantVdsLineFilter) +// toSend[3] |= (1 << 1); +// if (uopt->wantStepResponse) +// toSend[3] |= (1 << 2); +// if (uopt->wantPeaking) +// toSend[3] |= (1 << 3); +// if (uopt->enableAutoGain) +// toSend[3] |= (1 << 4); +// if (uopt->enableFrameTimeLock) +// toSend[3] |= (1 << 5); - // - if (uopt->deintMode == 0) // motion adaptive if == 0 - toSend[4] |= (1 << 0); - if (uopt->deintMode == 1) // bob if == 1 - toSend[4] |= (1 << 1); - // if (uopt->wantTap6) { - // toSend[4] |= (1 << 1); - // } - if (uopt->wantFullHeight) - toSend[4] |= (1 << 2); - if (uopt->matchPresetSource) - toSend[4] |= (1 << 3); - if (uopt->PalForce60 == 1) - toSend[4] |= (1 << 4); +// // +// if (uopt->deintMode == 0) // motion adaptive if == 0 +// toSend[4] |= (1 << 0); +// if (uopt->deintMode == 1) // bob if == 1 +// toSend[4] |= (1 << 1); +// // if (uopt->wantTap6) { +// // toSend[4] |= (1 << 1); +// // } +// if (uopt->wantFullHeight) +// toSend[4] |= (1 << 2); +// // if (uopt->matchPresetSource) +// // toSend[4] |= (1 << 3); +// if (uopt->PalForce60 == 1) +// toSend[4] |= (1 << 3); - // system preferences - if (uopt->wantOutputComponent) - toSend[5] |= (1 << 0); - if (uopt->enableCalibrationADC) - toSend[5] |= (1 << 1); - if (uopt->preferScalingRgbhv) - toSend[5] |= (1 << 2); - if (uopt->disableExternalClockGenerator) - toSend[5] |= (1 << 3); +// // system preferences +// if (uopt->wantOutputComponent) +// toSend[5] |= (1 << 0); +// if (uopt->enableCalibrationADC) +// toSend[5] |= (1 << 1); +// if (uopt->preferScalingRgbhv) +// toSend[5] |= (1 << 2); +// if (uopt->disableExternalClockGenerator) +// toSend[5] |= (1 << 3); - // developer panel controls status - if(rto->printInfos) - toSend[6] |= (1 << 0); - if(rto->invertSync) - toSend[6] |= (1 << 1); - if(rto->osr != 0) - toSend[6] |= (1 << 2); - if(GBS::ADC_FLTR::read() != 0) - toSend[6] |= (1 << 3); - if(rto->debugView) - toSend[6] |= (1 << 4); +// // developer panel controls status +// if(rto->printInfos) +// toSend[6] |= (1 << 0); +// if(rto->invertSync) +// toSend[6] |= (1 << 1); +// if(rto->osr != 0) +// toSend[6] |= (1 << 2); +// if(GBS::ADC_FLTR::read() != 0) +// toSend[6] |= (1 << 3); +// if(rto->debugView) +// toSend[6] |= (1 << 4); - // system tab controls - if(rto->allowUpdatesOTA) - toSend[7] |= (1 << 0); +// // system tab controls +// if(rto->allowUpdatesOTA) +// toSend[7] |= (1 << 0); - webSocket.broadcastBIN(toSend, MESSAGE_LEN); - } - } -} +// webSocket.broadcastBIN(toSend, MESSAGE_LEN); +// } +// } +// } /** * @brief @@ -270,7 +270,7 @@ bool wifiStartWPS() { * @brief Put this method inside of main loop * */ -void wifiLoop(bool instant) { +void wifiLoop() { if(WiFi.status() != WL_CONNECTED && _connectCheckTime != 0 && millis() > (_connectCheckTime + 10000UL)) { @@ -285,20 +285,19 @@ void wifiLoop(bool instant) { _connectCheckTime = 0; } } - if (rto->webServerEnabled && rto->webServerStarted) { - MDNS.update(); - dnsServer.processNextRequest(); - - if ((millis() - _lastTimePing) > 953) { // slightly odd value so not everything happens at once - webSocket.broadcastPing(); - } - if (((millis() - _lastTimePing) > 973) || instant) { - if ((webSocket.connectedClients(false) > 0) || instant) { // true = with compliant ping - updateWebSocketData(); - } - _lastTimePing = millis(); - } - } + // if (rto->webServerEnabled && rto->webServerStarted) { + // MDNS.update(); + // dnsServer.processNextRequest(); + // if ((millis() - _lastTimePing) > 953) { // slightly odd value so not everything happens at once + // webSocket.broadcastPing(); + // } + // if (((millis() - _lastTimePing) > 973) || instant) { + // if ((webSocket.connectedClients(false) > 0) || instant) { // true = with compliant ping + // updateWebSocketData(); + // } + // _lastTimePing = millis(); + // } + // } } /** diff --git a/src/wifiman.h b/src/wifiman.h index c3dc2544..e421d815 100644 --- a/src/wifiman.h +++ b/src/wifiman.h @@ -3,7 +3,7 @@ # File: wifiman.h # # File Created: Friday, 19th April 2024 2:25:42 pm # # Author: Sergey Ko # -# Last Modified: Tuesday, 28th May 2024 4:42:17 pm # +# Last Modified: Saturday, 8th June 2024 4:13:45 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -38,13 +38,13 @@ extern struct runTimeOptions *rto; // THE OBJECTIVE: Do not rely on build-in autoreconnect routine, // use the custom one instead. -void updateWebSocketData(); +// void updateWebSocketData(); void wifiInit(); void wifiDisable(); bool wifiStartStaMode(const String & ssid, const String & pass = ""); bool wifiStartApMode(); bool wifiStartWPS(); -void wifiLoop(bool instant); +void wifiLoop(); const String wifiGetApSSID(); const String wifiGetApPASS(); int8_t wifiGetRSSI(); diff --git a/src/wserial.cpp b/src/wserial.cpp index 1380739a..ff816f77 100644 --- a/src/wserial.cpp +++ b/src/wserial.cpp @@ -3,7 +3,7 @@ # File: wserial.cpp # # File Created: Friday, 19th April 2024 4:13:35 pm # # Author: Sergey Ko # -# Last Modified: Monday, 27th May 2024 12:23:15 pm # +# Last Modified: Monday, 10th June 2024 12:39:38 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -12,6 +12,25 @@ #include "wserial.h" +static char * serialBuffer = nullptr; + +/** + * @brief If developer mode enabled serialBuffer will be created. + * If developer mode disabled serialBuffer will be destroyed. + */ +void serialDevModeToggle() { + if(rto->developerMode) { + if(serialBuffer == nullptr) { + serialBuffer = (char *)malloc(SERIAL_BUFFER_MAX_LEN); + serialBufferClean(); + } + return; + } + // destroy buffer if not the developer mode + free(serialBuffer); + serialBuffer = nullptr; +} + /** * @brief * @@ -24,3 +43,44 @@ void discardSerialRxData() maxThrowAway--; } } + +/** + * @brief Returns serial buffer data. bufferLength (string length) + * may be retrieved by passing bufferLength argumentß + * + * @param bufferLength + * @return const uint8_t* + */ +const char * serialGetBuffer() { + return serialBuffer; +} + +/** + * @brief Empty serial buffer + * + */ +void serialBufferClean() { + memset(serialBuffer, '\0', SERIAL_BUFFER_MAX_LEN); +} + +/** + * @brief adding serial output data to accumulator (serialBuffer) + * + * @param data + * @param size + */ +void SerialMirror::pushToBuffer(void * data, size_t size) { + if(!rto->developerMode) + return; + uint16_t i = 0; + const char * d = reinterpret_cast(data); + size_t buffLen = strlen(serialBuffer); + while((buffLen + i) < SERIAL_BUFFER_MAX_LEN && i < size) { + *(serialBuffer + buffLen + i) = *(d + i); + i++; + } + // do not clog the output, use only for debug + // if(i < size) + // _DBGN(F("(!) serial buffer is full, data truncated...")); +} + diff --git a/src/wserial.h b/src/wserial.h index 81862111..00d1e75d 100644 --- a/src/wserial.h +++ b/src/wserial.h @@ -3,7 +3,7 @@ # File: wserial.h # # File Created: Friday, 19th April 2024 4:13:41 pm # # Author: Sergey Ko # -# Last Modified: Friday, 7th June 2024 12:17:54 pm # +# Last Modified: Monday, 10th June 2024 12:14:34 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -14,10 +14,13 @@ #define _WSERIAL_H_ #include +#include extern char serialCommand; extern char userCommand; extern WebSocketsServer webSocket; +extern runTimeOptions *rto; +extern userOptions *uopt; // TODO: useless ? /* #define LOMEM_SP ((ESP.getFreeHeap() > 10000)) @@ -26,35 +29,42 @@ extern WebSocketsServer webSocket; } while(0) */ void discardSerialRxData(); +void serialDevModeToggle(); +const char * serialGetBuffer(); +void serialBufferClean(); #if defined(ESP8266) // serial mirror class for websocket logs class SerialMirror : public Stream { + void pushToBuffer(void * data, size_t size); + size_t write(const uint8_t *data, size_t size) { - webSocket.broadcastTXT(data, size); + pushToBuffer((void *)data, size); Serial.write(data, size); return size; } size_t write(const char *data, size_t size) { - webSocket.broadcastTXT(data, size); + pushToBuffer((void *)data, size); Serial.write(data, size); return size; } size_t write(uint8_t data) { - webSocket.broadcastTXT(&data, 1); + size_t s = 1; + pushToBuffer(&data, s); Serial.write(data); return 1; } size_t write(char data) { - webSocket.broadcastTXT(&data, 1); + size_t s = 1; + pushToBuffer(&data, s); Serial.write(data); return 1; } diff --git a/src/wserver.cpp b/src/wserver.cpp index 0965dbbd..14c2377d 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Friday, 7th June 2024 4:55:29 pm # +# Last Modified: Monday, 10th June 2024 4:21:05 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -63,6 +63,39 @@ void serverInit() server.begin(); // Webserver for the site } +/** + * @brief If rto->developerMode is true decrease timings on webSocket + * + */ +void serverWebSocketToggleDeveloperMode() { + webSocket.disableHeartbeat(); + delay(10); + if(rto->developerMode) { + webSocket.enableHeartbeat( + WEBSOCK_HBEAT_DEV_INTVAL, + WEBSOCK_HBEAT_DEV_PONG_TOUT, + WEBSOCK_HBEAT_DEV_DISCONN_CNT + ); + return; + } + webSocket.enableHeartbeat( + WEBSOCK_HBEAT_INTVAL, + WEBSOCK_HBEAT_PONG_TOUT, + WEBSOCK_HBEAT_DISCONN_CNT + ); +} + +/** + * @brief Initialize web socket server + * Should be only called once on setup() + * + */ +void serverWebSocketInit() { + webSocket.begin(); + webSocket.onEvent(webSocketEvent); + serverWebSocketToggleDeveloperMode(); +} + /** * @brief * @@ -156,10 +189,10 @@ void serverSlotSet() { uint8_t slotIndex = lowByte(server.arg(String(F("index"))).toInt()); if(!slotLoad(slotIndex)) { - _DBGF(PSTR("unable to read %s\n"), FPSTR(slotsFile)); + _DBGF(PSTR("unable to read: %s\n"), FPSTR(slotsFile)); goto server_slot_set_failure; } - _WSF(PSTR("slot change success: %d\n"), uopt->slotID); + _WSF(PSTR("active slotID: %d\n"), uopt->slotID); server.send(200, mimeAppJson, F("[\"ok\"]")); // begin loading new preset on the next loop userCommand = '3'; @@ -261,7 +294,7 @@ void serverSlotRemove() } // reset parameters setResetParameters(); - _DBGN(F("slot has been removed, parameters now reset to defaults")); + _DBGN(F("(!) slot has been removed, parameters now reset to defaults")); // also reset resolution uopt->resolutionID = Output240p; @@ -904,1705 +937,1715 @@ void handleSerialCommand() serialCommand = ' '; } - if (serialCommand != '@') + if (serialCommand == '@') + return; + + _WSF(commandDescr, + "serial", + serialCommand, + serialCommand, + // uopt->presetPreference, + uopt->slotID, + // rto->presetID + uopt->resolutionID, + uopt->resolutionID); + + // multistage with bad characters? + if (inputStage > 0) + { + // need 's', 't' or 'g' + if (serialCommand != 's' && serialCommand != 't' && serialCommand != 'g') + { + discardSerialRxData(); + _WSN(F(" abort")); + serialCommand = ' '; + } + } + + switch (serialCommand) { - _WSF(commandDescr, - "serial", - serialCommand, - serialCommand, - // uopt->presetPreference, - uopt->slotID, - // rto->presetID - uopt->resolutionID, - uopt->resolutionID); - // multistage with bad characters? - if (inputStage > 0) + case ' ': + // skip spaces + inputStage = segmentCurrent = registerCurrent = 0; // and reset these + break; + case 'd': + { + // don't store scanlines + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { - // need 's', 't' or 'g' - if (serialCommand != 's' && serialCommand != 't' && serialCommand != 'g') - { - discardSerialRxData(); - _WSN(F(" abort")); - serialCommand = ' '; - } + disableScanlines(); } + // pal forced 60hz: no need to revert here. let the voffset function handle it - switch (serialCommand) + if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) { - case ' ': - // skip spaces - inputStage = segmentCurrent = registerCurrent = 0; // and reset these - break; - case 'd': + FrameSync::reset(uopt->frameTimeLockMethod); + } + // dump + for (int segment = 0; segment <= 5; segment++) { - // don't store scanlines - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + dumpRegisters(segment); + } + _WSN(F("};")); + } + break; + case '+': + _WSN(F("hor. +")); + shiftHorizontalRight(); + // shiftHorizontalRightIF(4); + break; + case '-': + _WSN(F("hor. -")); + shiftHorizontalLeft(); + // shiftHorizontalLeftIF(4); + break; + case '*': + shiftVerticalUpIF(); + break; + case '/': + shiftVerticalDownIF(); + break; + case 'z': + _WSN(F("scale+")); + scaleHorizontal(2, true); + break; + case 'h': + _WSN(F("scale-")); + scaleHorizontal(2, false); + break; + case 'q': + resetDigital(); + delay(2); + ResetSDRAM(); + delay(2); + togglePhaseAdjustUnits(); + // enableVDS(); + break; + case 'D': // toggle debug mode + _WS(F("debug view: ")); + if (GBS::ADC_UNUSED_62::read() == 0x00) + { + // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store + GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 + GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup + GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); + GBS::ADC_UNUSED_62::write(1); // remember to remove on restore + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); + GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); + if (!rto->inputIsYPbPr) + { + // RGB input that has HD_DYN bypassed, use it now + GBS::HD_DYN_BYPS::write(0); + GBS::HD_U_OFFSET::write(GBS::HD_U_OFFSET::read() + 0x24); + GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); + } + // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly + rto->debugView = true; + _WSN(F("on")); + } + else + { + // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 + // if (rto->presetID == 0x05) { + if (uopt->resolutionID == Output1080p) { - disableScanlines(); + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 } - // pal forced 60hz: no need to revert here. let the voffset function handle it - - if (uopt->enableFrameTimeLock && FrameSync::getSyncLastCorrection() != 0) + else { - FrameSync::reset(uopt->frameTimeLockMethod); + GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 + GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 } - // dump - for (int segment = 0; segment <= 5; segment++) + GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore + GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); + if (!rto->inputIsYPbPr) { - dumpRegisters(segment); + // RGB input, HD_DYN_BYPS again + GBS::HD_DYN_BYPS::write(1); + GBS::HD_U_OFFSET::write(0); // probably just 0 by default + GBS::HD_V_OFFSET::write(0); // probably just 0 by default } - _WSN(F("};")); + // GBS::IF_IN_DREG_BYPS::write(0); + GBS::ADC_UNUSED_60::write(0); // .. and clear + GBS::ADC_UNUSED_61::write(0); + GBS::ADC_UNUSED_62::write(0); + rto->debugView = false; + _WSN(F("off")); } + // serialCommand = '@'; break; - case '+': - _WSN(F("hor. +")); - shiftHorizontalRight(); - // shiftHorizontalRightIF(4); - break; - case '-': - _WSN(F("hor. -")); - shiftHorizontalLeft(); - // shiftHorizontalLeftIF(4); - break; - case '*': - shiftVerticalUpIF(); - break; - case '/': - shiftVerticalDownIF(); - break; - case 'z': - _WSN(F("scale+")); - scaleHorizontal(2, true); - break; - case 'h': - _WSN(F("scale-")); - scaleHorizontal(2, false); - break; - case 'q': - resetDigital(); - delay(2); - ResetSDRAM(); - delay(2); - togglePhaseAdjustUnits(); - // enableVDS(); - break; - case 'D': // toggle debug mode - _WS(F("debug view: ")); - if (GBS::ADC_UNUSED_62::read() == 0x00) - { - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(0); } // 3_4e 0 // enable peaking but don't store - GBS::VDS_PK_LB_GAIN::write(0x3f); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x3f); // 3_47 - GBS::ADC_UNUSED_60::write(GBS::VDS_Y_OFST::read()); // backup - GBS::ADC_UNUSED_61::write(GBS::HD_Y_OFFSET::read()); - GBS::ADC_UNUSED_62::write(1); // remember to remove on restore - GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 0x24); - GBS::HD_Y_OFFSET::write(GBS::HD_Y_OFFSET::read() + 0x24); - if (!rto->inputIsYPbPr) - { - // RGB input that has HD_DYN bypassed, use it now - GBS::HD_DYN_BYPS::write(0); - GBS::HD_U_OFFSET::write(GBS::HD_U_OFFSET::read() + 0x24); - GBS::HD_V_OFFSET::write(GBS::HD_V_OFFSET::read() + 0x24); - } - // GBS::IF_IN_DREG_BYPS::write(1); // enhances noise from not delaying IF processing properly - rto->debugView = true; - _WSN(F("on")); - } - else - { - // if (uopt->wantPeaking == 0) { GBS::VDS_PK_Y_H_BYPS::write(1); } // 3_4e 0 - // if (rto->presetID == 0x05) { - if (uopt->resolutionID == Output1080p) - { - GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x0A); // 3_47 - } - else - { - GBS::VDS_PK_LB_GAIN::write(0x16); // 3_45 - GBS::VDS_PK_LH_GAIN::write(0x18); // 3_47 - } - GBS::VDS_Y_OFST::write(GBS::ADC_UNUSED_60::read()); // restore - GBS::HD_Y_OFFSET::write(GBS::ADC_UNUSED_61::read()); - if (!rto->inputIsYPbPr) - { - // RGB input, HD_DYN_BYPS again - GBS::HD_DYN_BYPS::write(1); - GBS::HD_U_OFFSET::write(0); // probably just 0 by default - GBS::HD_V_OFFSET::write(0); // probably just 0 by default - } - // GBS::IF_IN_DREG_BYPS::write(0); - GBS::ADC_UNUSED_60::write(0); // .. and clear - GBS::ADC_UNUSED_61::write(0); - GBS::ADC_UNUSED_62::write(0); - rto->debugView = false; - _WSN(F("off")); + case 'C': + _WSN(F("PLL: ICLK")); + // display clock in last test best at 0x85 + GBS::PLL648_CONTROL_01::write(0x85); + GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) + latchPLLAD(); + // GBS::VDS_HSCALE::write(512); + rto->syncLockFailIgnore = 16; + FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock + rto->forceRetime = true; + // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock + // applyBestHTotal(FrameSync::init()); // twice + // GBS::VDS_FLOCK_EN::write(1); //risky + delay(200); + break; + case 'Y': + writeProgramArrayNew(ntsc_1280x720, false); + doPostPresetLoadSteps(); + break; + case 'y': + writeProgramArrayNew(pal_1280x720, false); + doPostPresetLoadSteps(); + break; + case 'P': + _WS(F("auto deinterlace: ")); + rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; + if (rto->deinterlaceAutoEnabled) + { + _WSN(F("on")); + } + else + { + _WSN(F("off")); + } + break; + case 'p': + if (!rto->motionAdaptiveDeinterlaceActive) + { + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) + { // don't rely on rto->scanlinesEnabled + disableScanlines(); } - serialCommand = '@'; - break; - case 'C': - _WSN(F("PLL: ICLK")); - // display clock in last test best at 0x85 - GBS::PLL648_CONTROL_01::write(0x85); - GBS::PLL_CKIS::write(1); // PLL use ICLK (instead of oscillator) - latchPLLAD(); - // GBS::VDS_HSCALE::write(512); + enableMotionAdaptDeinterlace(); + } + else + { + disableMotionAdaptDeinterlace(); + } + break; + case 'k': + bypassModeSwitch_RGBHV(); + break; + case 'K': // set outputBypass + setOutModeHdBypass(false); + // uopt->presetPreference = OutputBypass; + uopt->resolutionID = OutputBypass; + _WSN(F("OutputBypass mode is now active")); + slotFlush(); + // saveUserPrefs(); + break; + case 'T': // toggle auto gain + _WS(F("auto gain ")); + if (uopt->enableAutoGain == 0) + { + uopt->enableAutoGain = 1; + setAdcGain(AUTO_GAIN_INIT); + GBS::DEC_TEST_ENABLE::write(1); + _WSN(F("on")); + } + else + { + uopt->enableAutoGain = 0; + GBS::DEC_TEST_ENABLE::write(0); + _WSN(F("off")); + } + slotFlush(); + // saveUserPrefs(); + break; + case 'e': + writeProgramArrayNew(ntsc_240p, false); + doPostPresetLoadSteps(); + break; + case 'r': + writeProgramArrayNew(pal_240p, false); + doPostPresetLoadSteps(); + break; + case '.': // resync HTotal + { + if (!rto->outModeHdBypass) + { + // bestHtotal recalc + rto->autoBestHtotalEnabled = true; rto->syncLockFailIgnore = 16; - FrameSync::reset(uopt->frameTimeLockMethod); // adjust htotal to new display clock rto->forceRetime = true; - // applyBestHTotal(FrameSync::init()); // adjust htotal to new display clock - // applyBestHTotal(FrameSync::init()); // twice - // GBS::VDS_FLOCK_EN::write(1); //risky - delay(200); - break; - case 'Y': - writeProgramArrayNew(ntsc_1280x720, false); - doPostPresetLoadSteps(); - break; - case 'y': - writeProgramArrayNew(pal_1280x720, false); - doPostPresetLoadSteps(); - break; - case 'P': - _WS(F("auto deinterlace: ")); - rto->deinterlaceAutoEnabled = !rto->deinterlaceAutoEnabled; - if (rto->deinterlaceAutoEnabled) - { - _WSN(F("on")); - } - else - { - _WSN(F("off")); - } - break; - case 'p': - if (!rto->motionAdaptiveDeinterlaceActive) + FrameSync::reset(uopt->frameTimeLockMethod); + + if (!rto->syncWatcherEnabled) { - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) - { // don't rely on rto->scanlinesEnabled - disableScanlines(); - } - enableMotionAdaptDeinterlace(); + bool autoBestHtotalSuccess = 0; + delay(30); + autoBestHtotalSuccess = runAutoBestHTotal(); + if (!autoBestHtotalSuccess) + { + _WSN(F("HTotal is unchanged")); + } else + _WSN(F("resync HTotal success")); } - else + } + } + break; + case '!': + // fastGetBestHtotal(); + // readEeprom(); + _WSF(PSTR("sfr: %.02f\n pll: %l\n"), getSourceFieldRate(1), getPllRate()); + break; + case '$': + { + // EEPROM write protect pin (7, next to Vcc) is under original MCU control + // MCU drags to Vcc to write, EEPROM drags to Gnd normally + // This routine only works with that "WP" pin disconnected + // 0x17 = input selector? // 0x18 = input selector related? + // 0x54 = coast start 0x55 = coast end + uint16_t writeAddr = 0x54; + const uint8_t eepromAddr = 0x50; + for (; writeAddr < 0x56; writeAddr++) + { + Wire.beginTransmission(eepromAddr); + Wire.write(writeAddr >> 8); // high addr byte, 4 bits + + Wire.write((uint8_t)writeAddr); // mlow addr byte, 8 bits = 12 bits (0xfff max) + Wire.write(0x10); // coast end value ? + Wire.endTransmission(); + delay(5); + } + + // Wire.beginTransmission(eepromAddr); + // Wire.write((uint8_t)0); Wire.write((uint8_t)0); + // Wire.write(0xff); // force eeprom clear probably + // Wire.endTransmission(); + // delay(5); + + _WSN(F("done")); + } + break; + case 'j': + // resetPLL(); + latchPLLAD(); + break; + case 'J': + resetPLLAD(); + break; + case 'v': + rto->phaseSP += 1; + rto->phaseSP &= 0x1f; + _WSF(PSTR("SP: %d\n"), rto->phaseSP); + setAndLatchPhaseSP(); + // setAndLatchPhaseADC(); + break; + case 'b': + advancePhase(); + latchPLLAD(); + _WSF(PSTR("ADC: %d\n"), rto->phaseADC); + break; + case '#': + rto->videoStandardInput = 13; + applyPresets(13); + // _WSN(getStatus00IfHsVsStable()); + // globalDelay++; + // _WSN(globalDelay); + break; + case 'n': + { + uint16_t pll_divider = GBS::PLLAD_MD::read(); + pll_divider += 1; + GBS::PLLAD_MD::write(pll_divider); + GBS::IF_HSYNC_RST::write((pll_divider / 2)); + GBS::IF_LINE_SP::write(((pll_divider / 2) + 1) + 0x40); + _WSF(PSTR("PLL div: 0x%04X %d\n"), pll_divider, pll_divider); + // set IF before latching + // setIfHblankParameters(); + latchPLLAD(); + delay(1); + // applyBestHTotal(GBS::VDS_HSYNC_RST::read()); + updateClampPosition(); + updateCoastPosition(0); + } + break; + case 'N': + { + // if (GBS::RFF_ENABLE::read()) { + // disableMotionAdaptDeinterlace(); + // } + // else { + // enableMotionAdaptDeinterlace(); + // } + + // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); + + if (rto->scanlinesEnabled) + { + rto->scanlinesEnabled = false; + disableScanlines(); + } + else + { + rto->scanlinesEnabled = true; + enableScanlines(); + } + } + break; + case 'a': + _WSF(PSTR("HTotal++: %d\n"), GBS::VDS_HSYNC_RST::read() + 1); + if (GBS::VDS_HSYNC_RST::read() < 4095) + { + if (uopt->enableFrameTimeLock) { - disableMotionAdaptDeinterlace(); + // syncLastCorrection != 0 check is included + FrameSync::reset(uopt->frameTimeLockMethod); } - break; - case 'k': - bypassModeSwitch_RGBHV(); - break; - case 'K': // set outputBypass - setOutModeHdBypass(false); - // uopt->presetPreference = OutputBypass; - uopt->resolutionID = OutputBypass; - _WSN(F("OutputBypass mode is now active")); - saveUserPrefs(); - break; - case 'T': - _WS(F("auto gain ")); - if (uopt->enableAutoGain == 0) + rto->forceRetime = 1; + applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); + } + break; + case 'A': + _WSF(PSTR("HTotal--: %d\n"), GBS::VDS_HSYNC_RST::read() - 1); + if (GBS::VDS_HSYNC_RST::read() > 0) + { + if (uopt->enableFrameTimeLock) { - uopt->enableAutoGain = 1; - setAdcGain(AUTO_GAIN_INIT); - GBS::DEC_TEST_ENABLE::write(1); - _WSN(F("on")); + // syncLastCorrection != 0 check is included + FrameSync::reset(uopt->frameTimeLockMethod); } - else + rto->forceRetime = 1; + applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); + } + break; + case 'M': + { + } + break; + case 'm': + _WS(F("syncwatcher ")); + if (rto->syncWatcherEnabled == true) + { + rto->syncWatcherEnabled = false; + if (rto->videoIsFrozen) { - uopt->enableAutoGain = 0; - GBS::DEC_TEST_ENABLE::write(0); - _WSN(F("off")); + unfreezeVideo(); } - saveUserPrefs(); - break; - case 'e': - writeProgramArrayNew(ntsc_240p, false); - doPostPresetLoadSteps(); + _WSN(F("off")); + } + else + { + rto->syncWatcherEnabled = true; + _WSN(F("on")); + } + break; + case ',': + printVideoTimings(); + break; + case 'i': + rto->printInfos = !rto->printInfos; + break; + case 'c': // enableOTA mode + initUpdateOTA(); + rto->allowUpdatesOTA = true; + _WSN(F("OTA Updates on")); + break; + case 'G': + _WS(F("Debug Pings ")); + if (!rto->enableDebugPings) + { + _WSN(F("on")); + rto->enableDebugPings = 1; + } + else + { + _WSN(F("off")); + rto->enableDebugPings = 0; + } + break; + case 'u': + ResetSDRAM(); + break; + case 'f': // toggle peaking + _WS(F("peaking ")); + if (uopt->wantPeaking == 0) + { + uopt->wantPeaking = 1; + GBS::VDS_PK_Y_H_BYPS::write(0); + _WSN(F("on")); + } + else + { + uopt->wantPeaking = 0; + GBS::VDS_PK_Y_H_BYPS::write(1); + _WSN(F("off")); + } + slotFlush(); + // saveUserPrefs(); + break; + case 'F': // switch ADC filter button (dev.mode) + _WS(F("ADC filter ")); + if (GBS::ADC_FLTR::read() > 0) + { + GBS::ADC_FLTR::write(0); + rto->adcFilter = false; + _WSN(F("off")); + } + else + { + GBS::ADC_FLTR::write(3); + rto->adcFilter = true; + _WSN(F("on")); + } + break; + case 'L': // force outut component + { + // Component / VGA Output + uopt->wantOutputComponent = !uopt->wantOutputComponent; + OutputComponentOrVGA(); + // apply 1280x720 preset now, otherwise a reboot would be required + uint8_t videoMode = getVideoMode(); + if (videoMode == 0) + videoMode = rto->videoStandardInput; + // OutputResolution backup = uopt->resolutionID; + // uopt->presetPreference = Output720P; + // uopt->resolutionID = Output720p; + rto->videoStandardInput = 0; // force hard reset + applyPresets(videoMode); + // uopt->resolutionID = backup; + saveUserPrefs(); + } + break; + case 'l': + _WSN(F("resetSyncProcessor")); + // freezeVideo(); + resetSyncProcessor(); + // delay(10); + // unfreezeVideo(); + break; + // case 'Z': + // { + // uopt->matchPresetSource = !uopt->matchPresetSource; + // // saveUserPrefs(); + // slotFlush(); + // uint8_t vidMode = getVideoMode(); + // // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { + // if (uopt->resolutionID == Output240p && GBS::GBS_PRESET_ID::read() == Output960p50) + // { + // applyPresets(vidMode); + // // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { + // } + // else if (uopt->resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) + // { + // applyPresets(vidMode); + // } + // } + // break; + case 'W': + uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + break; + case 'E': + writeProgramArrayNew(ntsc_1280x1024, false); + _WSN(F("ntsc_1280x1024 is now active")); + doPostPresetLoadSteps(); + break; + case 'R': + writeProgramArrayNew(pal_1280x1024, false); + _WSN(F("pal_1280x1024 is now active")); + doPostPresetLoadSteps(); + break; + case '0': + moveHS(4, true); + break; + case '1': + moveHS(4, false); + break; + case '2': + writeProgramArrayNew(pal_768x576, false); // ModeLine "720x576@50" 27 720 732 795 864 576 581 586 625 -hsync -vsync + _WSN(F("pal_768x576 is now active")); + doPostPresetLoadSteps(); + break; + // case '3': + // break; + case '4': + { + // scale vertical + + if (GBS::VDS_VSCALE::read() <= 256) + { + _WSN(F("limit")); break; - case 'r': - writeProgramArrayNew(pal_240p, false); - doPostPresetLoadSteps(); + } + scaleVertical(2, true); + // actually requires full vertical mask + position offset calculation + } + break; + case '5': + { + // scale vertical - + if (GBS::VDS_VSCALE::read() == 1023) + { + _WSN(F("limit")); break; - case '.': // resync HTotal + } + scaleVertical(2, false); + // actually requires full vertical mask + position offset calculation + } + break; + case '6': + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) { - if (!rto->outModeHdBypass) - { - // bestHtotal recalc - rto->autoBestHtotalEnabled = true; - rto->syncLockFailIgnore = 16; - rto->forceRetime = true; - FrameSync::reset(uopt->frameTimeLockMethod); - - if (!rto->syncWatcherEnabled) + if (GBS::IF_HBIN_SP::read() >= 10) + { // IF_HBIN_SP: min 2 + GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() - 8); // canvas move right + if ((GBS::IF_HSYNC_RST::read() - 4) > ((GBS::PLLAD_MD::read() >> 1) + 5)) { - bool autoBestHtotalSuccess = 0; - delay(30); - autoBestHtotalSuccess = runAutoBestHTotal(); - if (!autoBestHtotalSuccess) - { - _WSN(F("HTotal is unchanged")); - } else - _WSN(F("resync HTotal success")); + GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() - 4); // shrink 1_0e + GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 4); // and 1_22 to go with it } } - } - break; - case '!': - // fastGetBestHtotal(); - // readEeprom(); - _WSF(PSTR("sfr: %.02f\n pll: %l\n"), getSourceFieldRate(1), getPllRate()); - break; - case '$': - { - // EEPROM write protect pin (7, next to Vcc) is under original MCU control - // MCU drags to Vcc to write, EEPROM drags to Gnd normally - // This routine only works with that "WP" pin disconnected - // 0x17 = input selector? // 0x18 = input selector related? - // 0x54 = coast start 0x55 = coast end - uint16_t writeAddr = 0x54; - const uint8_t eepromAddr = 0x50; - for (; writeAddr < 0x56; writeAddr++) + else { - Wire.beginTransmission(eepromAddr); - Wire.write(writeAddr >> 8); // high addr byte, 4 bits + - Wire.write((uint8_t)writeAddr); // mlow addr byte, 8 bits = 12 bits (0xfff max) - Wire.write(0x10); // coast end value ? - Wire.endTransmission(); - delay(5); + _WSN(F("limit")); } - - // Wire.beginTransmission(eepromAddr); - // Wire.write((uint8_t)0); Wire.write((uint8_t)0); - // Wire.write(0xff); // force eeprom clear probably - // Wire.endTransmission(); - // delay(5); - - _WSN(F("done")); + } + else if (!rto->outModeHdBypass) + { + if (GBS::IF_HB_SP2::read() >= 4) + GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a + else + GBS::IF_HB_SP2::write(GBS::IF_HSYNC_RST::read() - 0x30); + if (GBS::IF_HB_ST2::read() >= 4) + GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() - 4); // 1_18 + else + GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); + _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), + GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); } break; - case 'j': - // resetPLL(); - latchPLLAD(); - break; - case 'J': - resetPLLAD(); - break; - case 'v': - rto->phaseSP += 1; - rto->phaseSP &= 0x1f; - _WSF(PSTR("SP: %d\n"), rto->phaseSP); - setAndLatchPhaseSP(); - // setAndLatchPhaseADC(); - break; - case 'b': - advancePhase(); - latchPLLAD(); - _WSF(PSTR("ADC: %d\n"), rto->phaseADC); - break; - case '#': - rto->videoStandardInput = 13; - applyPresets(13); - // _WSN(getStatus00IfHsVsStable()); - // globalDelay++; - // _WSN(globalDelay); - break; - case 'n': - { - uint16_t pll_divider = GBS::PLLAD_MD::read(); - pll_divider += 1; - GBS::PLLAD_MD::write(pll_divider); - GBS::IF_HSYNC_RST::write((pll_divider / 2)); - GBS::IF_LINE_SP::write(((pll_divider / 2) + 1) + 0x40); - _WSF(PSTR("PLL div: 0x%04X %d\n"), pll_divider, pll_divider); - // set IF before latching - // setIfHblankParameters(); - latchPLLAD(); - delay(1); - // applyBestHTotal(GBS::VDS_HSYNC_RST::read()); - updateClampPosition(); - updateCoastPosition(0); - } - break; - case 'N': - { - // if (GBS::RFF_ENABLE::read()) { - // disableMotionAdaptDeinterlace(); - // } - // else { - // enableMotionAdaptDeinterlace(); - // } - - // GBS::RFF_ENABLE::write(!GBS::RFF_ENABLE::read()); - - if (rto->scanlinesEnabled) - { - rto->scanlinesEnabled = false; - disableScanlines(); + case '7': + if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + { + if (GBS::IF_HBIN_SP::read() < 0x150) + { // (arbitrary) max limit + GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() + 8); // canvas move left } else { - rto->scanlinesEnabled = true; - enableScanlines(); + _WSN(F("limit")); } } + else if (!rto->outModeHdBypass) + { + if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) + GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a + else + GBS::IF_HB_SP2::write(0); + if (GBS::IF_HB_ST2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) + GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() + 4); // 1_18 + else + GBS::IF_HB_ST2::write(0); + _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), + GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + } + break; + case '8': // invert sync button (dev. mode) + // _WSN("invert sync"); + rto->invertSync = !rto->invertSync; + invertHS(); + invertVS(); + // optimizePhaseSP(); + break; + case '9': + writeProgramArrayNew(ntsc_720x480, false); + doPostPresetLoadSteps(); break; - case 'a': - _WSF(PSTR("HTotal++: %d\n"), GBS::VDS_HSYNC_RST::read() + 1); - if (GBS::VDS_HSYNC_RST::read() < 4095) + case 'o': + { // oversampring button (dev.mode) + if (rto->osr == 1) + { + setOverSampleRatio(2, false); + } + else if (rto->osr == 2) + { + setOverSampleRatio(4, false); + } + else if (rto->osr == 4) + { + setOverSampleRatio(1, false); + } + delay(4); + optimizePhaseSP(); + _WSF(PSTR("OSR 0x%02X\n"), rto->osr); + rto->phaseIsSet = 0; // do it again in modes applicable + } + break; + case 'g': + inputStage++; + // we have a multibyte command + if (inputStage > 0) + { + if (inputStage == 1) { - if (uopt->enableFrameTimeLock) - { - // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); - } - rto->forceRetime = 1; - applyBestHTotal(GBS::VDS_HSYNC_RST::read() + 1); + segmentCurrent = Serial.parseInt(); + _WSF(PSTR("G%d"), segmentCurrent); } - break; - case 'A': - _WSF(PSTR("HTotal--: %d\n"), GBS::VDS_HSYNC_RST::read() - 1); - if (GBS::VDS_HSYNC_RST::read() > 0) + else if (inputStage == 2) { - if (uopt->enableFrameTimeLock) + char szNumbers[3]; + szNumbers[0] = Serial.read(); + szNumbers[1] = Serial.read(); + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + _WSF(PSTR("R 0x%04X"), registerCurrent); + if (segmentCurrent <= 5) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" value: 0x%02X\n"), readout); + } + else { - // syncLastCorrection != 0 check is included - FrameSync::reset(uopt->frameTimeLockMethod); + discardSerialRxData(); + _WSN(F("abort")); } - rto->forceRetime = 1; - applyBestHTotal(GBS::VDS_HSYNC_RST::read() - 1); + inputStage = 0; } - break; - case 'M': - { } break; - case 'm': - _WS(F("syncwatcher ")); - if (rto->syncWatcherEnabled == true) + case 's': + inputStage++; + // we have a multibyte command + if (inputStage > 0) + { + if (inputStage == 1) { - rto->syncWatcherEnabled = false; - if (rto->videoIsFrozen) - { - unfreezeVideo(); - } - _WSN(F("off")); + segmentCurrent = Serial.parseInt(); + _WSF(PSTR("S%d"), segmentCurrent); } - else - { - rto->syncWatcherEnabled = true; - _WSN(F("on")); - } - break; - case ',': - printVideoTimings(); - break; - case 'i': - rto->printInfos = !rto->printInfos; - break; - case 'c': // enableOTA mode - initUpdateOTA(); - rto->allowUpdatesOTA = true; - _WSN(F("OTA Updates on")); - break; - case 'G': - _WS(F("Debug Pings ")); - if (!rto->enableDebugPings) - { - _WSN(F("on")); - rto->enableDebugPings = 1; - } - else + else if (inputStage == 2) { - _WSN(F("off")); - rto->enableDebugPings = 0; + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) + { + // ascii 0x30 to 0x39 for '0' to '9' + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) + { + szNumbers[a] = Serial.read(); + } + else + { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + _WSF(PSTR("R 0x%04X"), registerCurrent); } - break; - case 'u': - ResetSDRAM(); - break; - case 'f': - _WS(F("peaking ")); - if (uopt->wantPeaking == 0) + else if (inputStage == 3) { - uopt->wantPeaking = 1; - GBS::VDS_PK_Y_H_BYPS::write(0); - _WSN(F("on")); + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) + { + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) + { + szNumbers[a] = Serial.read(); + } + else + { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + inputToogleBit = strtol(szNumbers, NULL, 16); + if (segmentCurrent <= 5) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" (was 0x%04X)"), readout); + writeOneByte(registerCurrent, inputToogleBit); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" is now: 0x%02X\n"), readout); + } + else + { + discardSerialRxData(); + _WSN(F("abort")); + } + inputStage = 0; } - else + } + break; + case 't': + inputStage++; + // we have a multibyte command + if (inputStage > 0) + { + if (inputStage == 1) { - uopt->wantPeaking = 0; - GBS::VDS_PK_Y_H_BYPS::write(1); - _WSN(F("off")); + segmentCurrent = Serial.parseInt(); + _WSF(PSTR("T%d"), segmentCurrent); } - saveUserPrefs(); - break; - case 'F': // switch ADC filter button (dev.mode) - _WS(F("ADC filter ")); - if (GBS::ADC_FLTR::read() > 0) + else if (inputStage == 2) { - GBS::ADC_FLTR::write(0); - _WSN(F("off")); + char szNumbers[3]; + for (uint8_t a = 0; a <= 1; a++) + { + // ascii 0x30 to 0x39 for '0' to '9' + if ((Serial.peek() >= '0' && Serial.peek() <= '9') || + (Serial.peek() >= 'a' && Serial.peek() <= 'f') || + (Serial.peek() >= 'A' && Serial.peek() <= 'F')) + { + szNumbers[a] = Serial.read(); + } + else + { + szNumbers[a] = 0; // NUL char + Serial.read(); // but consume the char + } + } + szNumbers[2] = '\0'; + // char * pEnd; + registerCurrent = strtol(szNumbers, NULL, 16); + _WSF(PSTR("R 0x%04X"), registerCurrent); } - else + else if (inputStage == 3) { - GBS::ADC_FLTR::write(3); - _WSN(F("on")); + if (Serial.peek() >= '0' && Serial.peek() <= '7') + { + inputToogleBit = Serial.parseInt(); + } + else + { + inputToogleBit = 255; // will get discarded next step + } + _WSF(PSTR(" Bit: %d"), inputToogleBit); + inputStage = 0; + if ((segmentCurrent <= 5) && (inputToogleBit <= 7)) + { + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" (was 0x%04X)"), readout); + writeOneByte(registerCurrent, readout ^ (1 << inputToogleBit)); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" is now: 0x%02X\n"), readout); + } + else + { + discardSerialRxData(); + inputToogleBit = registerCurrent = 0; + _WSN(F("abort")); + } } - break; - case 'L': // force outut component - { - // Component / VGA Output - uopt->wantOutputComponent = !uopt->wantOutputComponent; - OutputComponentOrVGA(); - // apply 1280x720 preset now, otherwise a reboot would be required - uint8_t videoMode = getVideoMode(); - if (videoMode == 0) - videoMode = rto->videoStandardInput; - // OutputResolution backup = uopt->resolutionID; - // uopt->presetPreference = Output720P; - // uopt->resolutionID = Output720p; - rto->videoStandardInput = 0; // force hard reset - applyPresets(videoMode); - // uopt->resolutionID = backup; - saveUserPrefs(); } break; - case 'l': - _WSN(F("resetSyncProcessor")); - // freezeVideo(); - resetSyncProcessor(); - // delay(10); - // unfreezeVideo(); - break; - case 'Z': + case '<': + { + if (segmentCurrent != 255 && registerCurrent != 255) { - uopt->matchPresetSource = !uopt->matchPresetSource; - // saveUserPrefs(); - slotFlush(); - uint8_t vidMode = getVideoMode(); - // if (uopt->presetPreference == 0 && GBS::GBS_PRESET_ID::read() == 0x11) { - if (uopt->resolutionID == Output240p && GBS::GBS_PRESET_ID::read() == Output960p50) - { - applyPresets(vidMode); - // } else if (uopt->presetPreference == 4 && GBS::GBS_PRESET_ID::read() == 0x02) { - } - else if (uopt->resolutionID == Output1024p && GBS::GBS_PRESET_ID::read() == Output1024p) - { - applyPresets(vidMode); - } + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + writeOneByte(registerCurrent, readout - 1); // also allow wrapping + _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" : 0x%04X\n"), readout); } - break; - case 'W': - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; - break; - case 'E': - writeProgramArrayNew(ntsc_1280x1024, false); - _WSN(F("ntsc_1280x1024 is now active")); - doPostPresetLoadSteps(); - break; - case 'R': - writeProgramArrayNew(pal_1280x1024, false); - _WSN(F("pal_1280x1024 is now active")); - doPostPresetLoadSteps(); - break; - case '0': - moveHS(4, true); - break; - case '1': - moveHS(4, false); - break; - case '2': - writeProgramArrayNew(pal_768x576, false); // ModeLine "720x576@50" 27 720 732 795 864 576 581 586 625 -hsync -vsync - _WSN(F("pal_768x576 is now active")); - doPostPresetLoadSteps(); - break; - case '3': - // - break; - case '4': + } + break; + case '>': + { + if (segmentCurrent != 255 && registerCurrent != 255) { - // scale vertical + - if (GBS::VDS_VSCALE::read() <= 256) - { - _WSN(F("limit")); - break; - } - scaleVertical(2, true); - // actually requires full vertical mask + position offset calculation + writeOneByte(0xF0, segmentCurrent); + readFromRegister(registerCurrent, 1, &readout); + writeOneByte(registerCurrent, readout + 1); + _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); + readFromRegister(registerCurrent, 1, &readout); + _WSF(PSTR(" : 0x%04X\n"), readout); } + } + break; + case '_': + { + uint32_t ticks = FrameSync::getPulseTicks(); + _WSN(ticks); + } + break; + case '~': + goLowPowerWithInputDetection(); // test reset + input detect break; - case '5': + case 'w': + { + // Serial.flush(); + uint16_t value = 0; + String what = Serial.readStringUntil(' '); + + if (what.length() > 5) + { + _WSN(F("abort")); + inputStage = 0; + break; + } + if (what.equals("f")) { - // scale vertical - - if (GBS::VDS_VSCALE::read() == 1023) + if (rto->extClockGenDetected) { - _WSN(F("limit")); - break; + _WSF(PSTR("old freqExtClockGen: %l\n"), rto->freqExtClockGen); + rto->freqExtClockGen = Serial.parseInt(); + // safety range: 1 - 250 MHz + if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) + { + Si.setFreq(0, rto->freqExtClockGen); + rto->clampPositionIsSet = 0; + rto->coastPositionIsSet = 0; + } + _WSF(PSTR("set freqExtClockGen: %l\n"), rto->freqExtClockGen); } - scaleVertical(2, false); - // actually requires full vertical mask + position offset calculation + break; } - break; - case '6': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + + value = Serial.parseInt(); + if (value < 4096) + { + _WSF(PSTR("set %s %d\n"), what.c_str(), value); + if (what.equals("ht")) { - if (GBS::IF_HBIN_SP::read() >= 10) - { // IF_HBIN_SP: min 2 - GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() - 8); // canvas move right - if ((GBS::IF_HSYNC_RST::read() - 4) > ((GBS::PLLAD_MD::read() >> 1) + 5)) - { - GBS::IF_HSYNC_RST::write(GBS::IF_HSYNC_RST::read() - 4); // shrink 1_0e - GBS::IF_LINE_SP::write(GBS::IF_LINE_SP::read() - 4); // and 1_22 to go with it - } + // set_htotal(value); + if (!rto->outModeHdBypass) + { + rto->forceRetime = 1; + applyBestHTotal(value); } else { - _WSN(F("limit")); + GBS::VDS_HSYNC_RST::write(value); } } - else if (!rto->outModeHdBypass) + else if (what.equals("vt")) { - if (GBS::IF_HB_SP2::read() >= 4) - GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() - 4); // 1_1a - else - GBS::IF_HB_SP2::write(GBS::IF_HSYNC_RST::read() - 0x30); - if (GBS::IF_HB_ST2::read() >= 4) - GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() - 4); // 1_18 - else - GBS::IF_HB_ST2::write(GBS::IF_HSYNC_RST::read() - 0x30); - _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + set_vtotal(value); } - break; - case '7': - if (videoStandardInputIsPalNtscSd() && !rto->outModeHdBypass) + else if (what.equals("hsst")) { - if (GBS::IF_HBIN_SP::read() < 0x150) - { // (arbitrary) max limit - GBS::IF_HBIN_SP::write(GBS::IF_HBIN_SP::read() + 8); // canvas move left - } - else - { - _WSN(F("limit")); - } + setHSyncStartPosition(value); } - else if (!rto->outModeHdBypass) + else if (what.equals("hssp")) { - if (GBS::IF_HB_SP2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) - GBS::IF_HB_SP2::write(GBS::IF_HB_SP2::read() + 4); // 1_1a - else - GBS::IF_HB_SP2::write(0); - if (GBS::IF_HB_ST2::read() < (GBS::IF_HSYNC_RST::read() - 0x30)) - GBS::IF_HB_ST2::write(GBS::IF_HB_ST2::read() + 4); // 1_18 - else - GBS::IF_HB_ST2::write(0); - _WSF(PSTR("IF_HB_ST2: 0x%04X IF_HB_SP2: 0x%04X\n"), - GBS::IF_HB_ST2::read(), GBS::IF_HB_SP2::read()); + setHSyncStopPosition(value); } - break; - case '8': // invert sync button (dev. mode) - // _WSN("invert sync"); - rto->invertSync = !rto->invertSync; - invertHS(); - invertVS(); - // optimizePhaseSP(); - break; - case '9': - writeProgramArrayNew(ntsc_720x480, false); - doPostPresetLoadSteps(); - break; - case 'o': - { // oversampring button (dev.mode) - if (rto->osr == 1) + else if (what.equals("hbst")) { - setOverSampleRatio(2, false); + setMemoryHblankStartPosition(value); } - else if (rto->osr == 2) + else if (what.equals("hbsp")) { - setOverSampleRatio(4, false); + setMemoryHblankStopPosition(value); } - else if (rto->osr == 4) + else if (what.equals("hbstd")) { - setOverSampleRatio(1, false); + setDisplayHblankStartPosition(value); } - delay(4); - optimizePhaseSP(); - _WSF(PSTR("OSR 0x%02X\n"), rto->osr); - rto->phaseIsSet = 0; // do it again in modes applicable - } - break; - case 'g': - inputStage++; - // we have a multibyte command - if (inputStage > 0) + else if (what.equals("hbspd")) { - if (inputStage == 1) - { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("G%d"), segmentCurrent); - } - else if (inputStage == 2) - { - char szNumbers[3]; - szNumbers[0] = Serial.read(); - szNumbers[1] = Serial.read(); - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - if (segmentCurrent <= 5) - { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" value: 0x%02X\n"), readout); - } - else - { - discardSerialRxData(); - _WSN(F("abort")); - } - inputStage = 0; - } + setDisplayHblankStopPosition(value); } - break; - case 's': - inputStage++; - // we have a multibyte command - if (inputStage > 0) + else if (what.equals("vsst")) { - if (inputStage == 1) - { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("S%d"), segmentCurrent); - } - else if (inputStage == 2) - { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) - { - // ascii 0x30 to 0x39 for '0' to '9' - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) - { - szNumbers[a] = Serial.read(); - } - else - { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - } - else if (inputStage == 3) - { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) - { - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) - { - szNumbers[a] = Serial.read(); - } - else - { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - inputToogleBit = strtol(szNumbers, NULL, 16); - if (segmentCurrent <= 5) - { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" (was 0x%04X)"), readout); - writeOneByte(registerCurrent, inputToogleBit); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" is now: 0x%02X\n"), readout); - } - else - { - discardSerialRxData(); - _WSN(F("abort")); - } - inputStage = 0; - } + setVSyncStartPosition(value); } - break; - case 't': - inputStage++; - // we have a multibyte command - if (inputStage > 0) + else if (what.equals("vssp")) { - if (inputStage == 1) - { - segmentCurrent = Serial.parseInt(); - _WSF(PSTR("T%d"), segmentCurrent); - } - else if (inputStage == 2) - { - char szNumbers[3]; - for (uint8_t a = 0; a <= 1; a++) - { - // ascii 0x30 to 0x39 for '0' to '9' - if ((Serial.peek() >= '0' && Serial.peek() <= '9') || - (Serial.peek() >= 'a' && Serial.peek() <= 'f') || - (Serial.peek() >= 'A' && Serial.peek() <= 'F')) - { - szNumbers[a] = Serial.read(); - } - else - { - szNumbers[a] = 0; // NUL char - Serial.read(); // but consume the char - } - } - szNumbers[2] = '\0'; - // char * pEnd; - registerCurrent = strtol(szNumbers, NULL, 16); - _WSF(PSTR("R 0x%04X"), registerCurrent); - } - else if (inputStage == 3) - { - if (Serial.peek() >= '0' && Serial.peek() <= '7') - { - inputToogleBit = Serial.parseInt(); - } - else - { - inputToogleBit = 255; // will get discarded next step - } - _WSF(PSTR(" Bit: %d"), inputToogleBit); - inputStage = 0; - if ((segmentCurrent <= 5) && (inputToogleBit <= 7)) - { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" (was 0x%04X)"), readout); - writeOneByte(registerCurrent, readout ^ (1 << inputToogleBit)); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" is now: 0x%02X\n"), readout); - } - else - { - discardSerialRxData(); - inputToogleBit = registerCurrent = 0; - _WSN(F("abort")); - } - } + setVSyncStopPosition(value); } - break; - case '<': - { - if (segmentCurrent != 255 && registerCurrent != 255) + else if (what.equals("vbst")) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - writeOneByte(registerCurrent, readout - 1); // also allow wrapping - _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" : 0x%04X\n"), readout); + setMemoryVblankStartPosition(value); } - } - break; - case '>': - { - if (segmentCurrent != 255 && registerCurrent != 255) + else if (what.equals("vbsp")) { - writeOneByte(0xF0, segmentCurrent); - readFromRegister(registerCurrent, 1, &readout); - writeOneByte(registerCurrent, readout + 1); - _WSF(PSTR("S%d_0x%04X"), segmentCurrent, registerCurrent); - readFromRegister(registerCurrent, 1, &readout); - _WSF(PSTR(" : 0x%04X\n"), readout); + setMemoryVblankStopPosition(value); } - } - break; - case '_': - { - uint32_t ticks = FrameSync::getPulseTicks(); - _WSN(ticks); - } - break; - case '~': - goLowPowerWithInputDetection(); // test reset + input detect - break; - case 'w': - { - // Serial.flush(); - uint16_t value = 0; - String what = Serial.readStringUntil(' '); - - if (what.length() > 5) + else if (what.equals("vbstd")) { - _WSN(F("abort")); - inputStage = 0; - break; + setDisplayVblankStartPosition(value); } - if (what.equals("f")) + else if (what.equals("vbspd")) { - if (rto->extClockGenDetected) - { - _WSF(PSTR("old freqExtClockGen: %l\n"), rto->freqExtClockGen); - rto->freqExtClockGen = Serial.parseInt(); - // safety range: 1 - 250 MHz - if (rto->freqExtClockGen >= 1000000 && rto->freqExtClockGen <= 250000000) - { - Si.setFreq(0, rto->freqExtClockGen); - rto->clampPositionIsSet = 0; - rto->coastPositionIsSet = 0; - } - _WSF(PSTR("set freqExtClockGen: %l\n"), rto->freqExtClockGen); - } - break; + setDisplayVblankStopPosition(value); } - - value = Serial.parseInt(); - if (value < 4096) + else if (what.equals("sog")) { - _WSF(PSTR("set %s %d\n"), what.c_str(), value); - if (what.equals("ht")) - { - // set_htotal(value); - if (!rto->outModeHdBypass) - { - rto->forceRetime = 1; - applyBestHTotal(value); - } - else - { - GBS::VDS_HSYNC_RST::write(value); - } - } - else if (what.equals("vt")) - { - set_vtotal(value); - } - else if (what.equals("hsst")) - { - setHSyncStartPosition(value); - } - else if (what.equals("hssp")) - { - setHSyncStopPosition(value); - } - else if (what.equals("hbst")) - { - setMemoryHblankStartPosition(value); - } - else if (what.equals("hbsp")) - { - setMemoryHblankStopPosition(value); - } - else if (what.equals("hbstd")) - { - setDisplayHblankStartPosition(value); - } - else if (what.equals("hbspd")) - { - setDisplayHblankStopPosition(value); - } - else if (what.equals("vsst")) - { - setVSyncStartPosition(value); - } - else if (what.equals("vssp")) - { - setVSyncStopPosition(value); - } - else if (what.equals("vbst")) - { - setMemoryVblankStartPosition(value); - } - else if (what.equals("vbsp")) - { - setMemoryVblankStopPosition(value); - } - else if (what.equals("vbstd")) - { - setDisplayVblankStartPosition(value); - } - else if (what.equals("vbspd")) - { - setDisplayVblankStopPosition(value); - } - else if (what.equals("sog")) - { - setAndUpdateSogLevel(value); - } - else if (what.equals("ifini")) - { - GBS::IF_INI_ST::write(value); - // _WSN(GBS::IF_INI_ST::read()); - } - else if (what.equals("ifvst")) - { - GBS::IF_VB_ST::write(value); - // _WSN(GBS::IF_VB_ST::read()); - } - else if (what.equals("ifvsp")) - { - GBS::IF_VB_SP::write(value); - // _WSN(GBS::IF_VB_ST::read()); - } - else if (what.equals("vsstc")) - { - setCsVsStart(value); - } - else if (what.equals("vsspc")) - { - setCsVsStop(value); - } + setAndUpdateSogLevel(value); } - else + else if (what.equals("ifini")) + { + GBS::IF_INI_ST::write(value); + // _WSN(GBS::IF_INI_ST::read()); + } + else if (what.equals("ifvst")) + { + GBS::IF_VB_ST::write(value); + // _WSN(GBS::IF_VB_ST::read()); + } + else if (what.equals("ifvsp")) + { + GBS::IF_VB_SP::write(value); + // _WSN(GBS::IF_VB_ST::read()); + } + else if (what.equals("vsstc")) + { + setCsVsStart(value); + } + else if (what.equals("vsspc")) { - _WSN(F("abort")); + setCsVsStop(value); } } + else + { + _WSN(F("abort")); + } + } + break; + case 'x': + { + uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); + GBS::IF_HBIN_SP::write(if_hblank_scale_stop + 1); + _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop + 1)); + } + break; + case 'X': + { + uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); + GBS::IF_HBIN_SP::write(if_hblank_scale_stop - 1); + _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop - 1)); + } + break; + case '(': + { + writeProgramArrayNew(ntsc_1920x1080, false); + doPostPresetLoadSteps(); + } + break; + case ')': + { + writeProgramArrayNew(pal_1920x1080, false); + doPostPresetLoadSteps(); + } + break; + case 'V': // toggle step response + { + _WS(F("step response ")); + uopt->wantStepResponse = !uopt->wantStepResponse; + if (uopt->wantStepResponse) + { + GBS::VDS_UV_STEP_BYPS::write(0); + _WSN(F("on")); + } + else + { + GBS::VDS_UV_STEP_BYPS::write(1); + _WSN(F("off")); + } + slotFlush(); + // saveUserPrefs(); + } + break; + case 'S': + { + snapToIntegralFrameRate(); + break; + } + case ':': + externalClockGenSyncInOutRate(); break; - case 'x': + case ';': + externalClockGenResetClock(); + if (rto->extClockGenDetected) + { + rto->extClockGenDetected = 0; + _WSN(F("ext clock gen bypass")); + } + else { - uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); - GBS::IF_HBIN_SP::write(if_hblank_scale_stop + 1); - _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop + 1)); + rto->extClockGenDetected = 1; + _WSN(F("ext clock gen active")); + externalClockGenSyncInOutRate(); } + //{ + // float bla = 0; + // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; + // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); + // _WSN(bla, 5); + //} + break; + default: + _WSF(PSTR("unknown command: 0x%04X\n"), serialCommand); break; - case 'X': + } + + delay(1); // give some time to read in eventual next chars + + // a web ui or terminal command has finished. good idea to reset sync lock timer + // important if the command was to change presets, possibly others + lastVsyncLock = millis(); + + // if (!Serial.available()) + // { + // // in case we handled a Serial or web server command and there's no more extra commands + // // but keep debug view command (resets once called) + // // TODO: we have rto->debugView + // if (serialCommand != 'D') + // { + // serialCommand = '@'; + // } + // wifiLoop(1); + // } + serialCommand = '@'; +} + +/** + * @brief initially was Type2 command + * + */ +void handleUserCommand() +{ + if (userCommand == '@') + return; + + _WSF( + commandDescr, + "user", + userCommand, + userCommand, + uopt->slotID, + uopt->resolutionID, + uopt->resolutionID); + + switch (userCommand) + { + case '0': + _WS(F("pal force 60hz ")); + uopt->PalForce60 = !uopt->PalForce60; + if (uopt->PalForce60 == 1) + _WSN(F("on")); + else + _WSN(F("off")); + slotFlush(); + break; + case '1': // reset to defaults button + // active slot settings reset + fsToFactory(); + // common parameters reset + loadDefaultUserOptions(); + saveUserPrefs(); + _WSN(F("options set to defaults, restarting")); + resetInMSec(2000); + break; + // case '2': + // + // break; + case '3': // load new preset on slot change + { + // TODO: unknown logic + if (rto->videoStandardInput == 14) { + // vga upscale path: let synwatcher handle it + rto->videoStandardInput = 15; + } else { + // also does loadPresetFromLFS() + applyPresets(rto->videoStandardInput); + } + } + break; + // case '4': + // break; + case '5': // Frame Time Lock toggle + uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; + // saveUserPrefs(); + if (uopt->enableFrameTimeLock) + { + _WSN(F("FTL on")); + } + else + { + _WSN(F("FTL off")); + } + if (!rto->extClockGenDetected) { - uint16_t if_hblank_scale_stop = GBS::IF_HBIN_SP::read(); - GBS::IF_HBIN_SP::write(if_hblank_scale_stop - 1); - _WSF(PSTR("1_26: 0x%04X\n"), (if_hblank_scale_stop - 1)); + FrameSync::reset(uopt->frameTimeLockMethod); + } + if (uopt->enableFrameTimeLock) + { + activeFrameTimeLockInitialSteps(); } + slotFlush(); break; - case '(': + // case '6': + // break; + case '7': // toggle scanlines + uopt->wantScanlines = !uopt->wantScanlines; + _WS(F("scanlines: ")); + if (uopt->wantScanlines) { - writeProgramArrayNew(ntsc_1920x1080, false); - doPostPresetLoadSteps(); + _WSN(F("on (Line Filter recommended)")); } + else + { + disableScanlines(); + _WSN(F("off")); + } + slotFlush(); + // saveUserPrefs(); break; - case ')': + // case '9': + // break; + case 'a': // device restart + resetInMSec(2000); + break; + case 'd': // toggle developer mode + rto->developerMode = !rto->developerMode; + serverWebSocketToggleDeveloperMode(); + serialDevModeToggle(); + break; + case 'e': // print files on data + { + _WSN(F("file system:")); + fs::Dir dir = LittleFS.openDir("/"); + while (dir.next()) + { + _WSF( + PSTR(" %s %ld\n"), + dir.fileName().c_str(), + dir.fileSize()); + } + // + fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); + if (!f) + { + _WSN(F("\nfailed to read system preferences")); + } + else + { + _WSF( + PSTR("\nsystem preferences:\n active slotID = %d\n component out. = %d\n scaling RGBHV = %d\n" \ + " ADC calibration = %d\n ext. clock gen. = %d\n\n"), + f.read(), + f.read(), + f.read(), + f.read(), + f.read() + ); + + f.close(); + } + } + break; + /** + * 1. change resolution + * 2. update registers if videoStandardInput != 14 + * 3. update/save preset data + */ + case 's': // 1080p + case 'p': // 1024p + case 'f': // 960p + case 'g': // 720p + case 'k': // 576p + case 'h': // 480p + case 'j': // 240p + case 'L': // 15kHz/downscale + { + // load preset via webui + uint8_t videoMode = getVideoMode(); + if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) + videoMode = rto->videoStandardInput; // last known good as fallback + // else videoMode stays 0 and we'll apply via some assumptions + if (userCommand == 'f') + // uopt->presetPreference = Output960P; // 1280x960 + uopt->resolutionID = Output960p; // 1280x960 + if (userCommand == 'g') + // uopt->presetPreference = Output720P; // 1280x720 + uopt->resolutionID = Output720p; // 1280x720 + if (userCommand == 'h') + // uopt->presetPreference = Output480P; // 720x480/768x576 + uopt->resolutionID = Output480p; // 720x480/768x576 + if (userCommand == 'p') + // uopt->presetPreference = Output1024P; // 1280x1024 + uopt->resolutionID = Output1024p; // 1280x1024 + if (userCommand == 's') + // uopt->presetPreference = Output1080P; // 1920x1080 + uopt->resolutionID = Output1080p; // 1920x1080 + if (userCommand == 'L') + // uopt->presetPreference = OutputDownscale; // downscale + uopt->resolutionID = Output15kHz; // downscale + if (userCommand == 'k') + uopt->resolutionID = Output576p50; // PAL + if (userCommand == 'j') + uopt->resolutionID = Output240p; // 240p + + rto->useHdmiSyncFix = 1; // disables sync out when programming preset + if (rto->videoStandardInput == 14) + { + // vga upscale path: let synwatcher handle it + _DBGN(F("video input is #14, switch to #15")); + rto->videoStandardInput = 15; + } + else + { + // normal path + _DBGF(PSTR("apply preset of videoMode: %d resolution: %d\n"), videoMode, uopt->resolutionID); + applyPresets(videoMode); + } + slotFlush(); + // saveUserPrefs(); + } + break; + case 'i': // toggle active frametime lock method + if (!rto->extClockGenDetected) { - writeProgramArrayNew(pal_1920x1080, false); - doPostPresetLoadSteps(); + FrameSync::reset(uopt->frameTimeLockMethod); } + + if (uopt->frameTimeLockMethod == 0) + { + uopt->frameTimeLockMethod = 1; + } + else if (uopt->frameTimeLockMethod == 1) + { + uopt->frameTimeLockMethod = 0; + } + // saveUserPrefs(); + activeFrameTimeLockInitialSteps(); + slotFlush(); break; - case 'V': + case 'l': + // cycle through available SDRAM clocks { - _WS(F("step response ")); - uopt->wantStepResponse = !uopt->wantStepResponse; - if (uopt->wantStepResponse) + uint8_t PLL_MS = GBS::PLL_MS::read(); + uint8_t memClock = 0; + + if (PLL_MS == 0) + PLL_MS = 2; + else if (PLL_MS == 2) + PLL_MS = 7; + else if (PLL_MS == 7) + PLL_MS = 4; + else if (PLL_MS == 4) + PLL_MS = 3; + else if (PLL_MS == 3) + PLL_MS = 5; + else if (PLL_MS == 5) + PLL_MS = 0; + + switch (PLL_MS) + { + case 0: + memClock = 108; + break; + case 1: + memClock = 81; + break; // goes well with 4_2C = 0x14, 4_2D = 0x27 + case 2: + memClock = 10; + break; // feedback clock + case 3: + memClock = 162; + break; + case 4: + memClock = 144; + break; + case 5: + memClock = 185; + break; // slight OC + case 6: + memClock = 216; + break; // !OC! + case 7: + memClock = 129; + break; + default: + break; + } + GBS::PLL_MS::write(PLL_MS); + ResetSDRAM(); + if (memClock != 10) { - GBS::VDS_UV_STEP_BYPS::write(0); - _WSN(F("on")); + _WSF(PSTR("SDRAM clock: %dMhz\n"), memClock); } else { - GBS::VDS_UV_STEP_BYPS::write(1); - _WSN(F("off")); + _WSN(F("SDRAM clock: feedback clock")); } - saveUserPrefs(); } break; - case 'S': + case 'm': // toggle line filter + _WS(F("Line Filter: ")); + if (uopt->wantVdsLineFilter) { - snapToIntegralFrameRate(); - break; + uopt->wantVdsLineFilter = 0; + GBS::VDS_D_RAM_BYPS::write(1); + _WSN(F("off")); } - case ':': - externalClockGenSyncInOutRate(); - break; - case ';': - externalClockGenResetClock(); - if (rto->extClockGenDetected) - { - rto->extClockGenDetected = 0; - _WSN(F("ext clock gen bypass")); - } - else - { - rto->extClockGenDetected = 1; - _WSN(F("ext clock gen active")); - externalClockGenSyncInOutRate(); - } - //{ - // float bla = 0; - // double esp8266_clock_freq = ESP.getCpuFreqMHz() * 1000000; - // bla = esp8266_clock_freq / (double)FrameSync::getPulseTicks(); - // _WSN(bla, 5); - //} - break; - default: - _WSF(PSTR("unknown command: 0x%04X\n"), serialCommand); - break; + else + { + uopt->wantVdsLineFilter = 1; + GBS::VDS_D_RAM_BYPS::write(0); + _WSN(F("on")); } - - delay(1); // give some time to read in eventual next chars - - // a web ui or terminal command has finished. good idea to reset sync lock timer - // important if the command was to change presets, possibly others - lastVsyncLock = millis(); - - if (!Serial.available()) + slotFlush(); + // saveUserPrefs(); + break; + case 'n': + uopt->enableAutoGain = 0; + setAdcGain(GBS::ADC_RGCTRL::read() - 1); + _WSF(PSTR("ADC gain++ : 0x%04X\n"), GBS::ADC_RGCTRL::read()); + break; + case 'o': + uopt->enableAutoGain = 0; + setAdcGain(GBS::ADC_RGCTRL::read() + 1); + _WSF(PSTR("ADC gain-- : 0x%04X\n"), GBS::ADC_RGCTRL::read()); + break; + case 'A': + { + uint16_t htotal = GBS::VDS_HSYNC_RST::read(); + uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); + uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); + if ((hbstd > 4) && (hbspd < (htotal - 4))) + { + GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() - 4); + GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() + 4); + } + else { - // in case we handled a Serial or web server command and there's no more extra commands - // but keep debug view command (resets once called) - // @sk: we have rto->debugView - // if (serialCommand != 'D') - // { - // serialCommand = '@'; - // } - wifiLoop(1); + _WSN(F("limit")); } } -} - -/** - * @brief initially was Type2 command - * - */ -void handleUserCommand() -{ - if (userCommand != '@') + break; + case 'B': { - _WSF( - commandDescr, - "user", - userCommand, - userCommand, - uopt->slotID, - uopt->resolutionID, - uopt->resolutionID); - switch (userCommand) - { - case '0': - _WS(F("pal force 60hz ")); - uopt->PalForce60 = !uopt->PalForce60; - if (uopt->PalForce60 == 1) - _WSN(F("on")); - else - _WSN(F("off")); - slotFlush(); - break; - case '1': // reset to defaults button - // active slot settings reset - slotResetFlush(uopt->slotID); - // common parameters reset - loadDefaultUserOptions(); - saveUserPrefs(); - _WSN(F("options set to defaults, restarting")); - resetInMSec(2000); - break; - case '2': - // - break; - case '3': // before: load custom preset, now: slot change - { - // @sk: see serverSlotSet() - // TODO: unknown logic - if (rto->videoStandardInput == 14) { - // vga upscale path: let synwatcher handle it - rto->videoStandardInput = 15; - } else { - // also does loadPresetFromLFS() - applyPresets(rto->videoStandardInput); - } - // save new slotID into preferences - saveUserPrefs(); + uint16_t htotal = GBS::VDS_HSYNC_RST::read(); + uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); + uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); + if ((hbstd < (htotal - 4)) && (hbspd > 4)) + { + GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() + 4); + GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() - 4); + } + else + { + _WSN(F("limit")); + } + } + break; + case 'C': + { + // vert mask + + uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); + uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); + uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); + if ((vbstd > 6) && (vbspd < (vtotal - 4))) + { + GBS::VDS_DIS_VB_ST::write(vbstd - 2); + GBS::VDS_DIS_VB_SP::write(vbspd + 2); + } + else + { + _WSN(F("limit")); + } + } + break; + case 'D': + { + // vert mask - + uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); + uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); + uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); + if ((vbstd < (vtotal - 4)) && (vbspd > 6)) + { + GBS::VDS_DIS_VB_ST::write(vbstd + 2); + GBS::VDS_DIS_VB_SP::write(vbspd - 2); + } + else + { + _WSN(F("limit")); } - break; - // case '4': - // break; - case '5': - // Frame Time Lock toggle - uopt->enableFrameTimeLock = !uopt->enableFrameTimeLock; - // saveUserPrefs(); - if (uopt->enableFrameTimeLock) - { - _WSN(F("FTL on")); - } - else - { - _WSN(F("FTL off")); - } - if (!rto->extClockGenDetected) - { - FrameSync::reset(uopt->frameTimeLockMethod); - } - if (uopt->enableFrameTimeLock) - { - activeFrameTimeLockInitialSteps(); - } - slotFlush(); - break; - case '6': - // - break; - case '7': - uopt->wantScanlines = !uopt->wantScanlines; - _WS(F("scanlines: ")); - if (uopt->wantScanlines) - { - _WSN(F("on (Line Filter recommended)")); - } - else + } + break; + case 'q': // bob / motionAdaptive + if (uopt->deintMode != 1) + { + // switch to bob mode + uopt->deintMode = 1; + disableMotionAdaptDeinterlace(); + if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) { disableScanlines(); - _WSN(F("off")); } - saveUserPrefs(); - break; - // case '9': - // - // break; - case 'a': // device restart - resetInMSec(2000); - break; - case 'e': // print files on data + // saveUserPrefs(); + _WSN(F("Deinterlacer: Bob")); + } else { + // switch to motion adaptive mode + uopt->deintMode = 0; + // saveUserPrefs(); + _WSN(F("Deinterlacer: Motion Adaptive")); + } + slotFlush(); + break; + // case 'r': + // break; + case 't': + // unused now + _WS(F("6-tap: ")); + if (uopt->wantTap6 == 0) { - _WSN(F("file system:")); - fs::Dir dir = LittleFS.openDir("/"); - while (dir.next()) - { - _WSF( - PSTR(" %s %ld\n"), - dir.fileName().c_str(), - dir.fileSize()); - } - // - fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); - if (!f) - { - _WSN(F("\nfailed to read system preferences")); - } - else - { - _WSF( - PSTR("\nsystem preferences:\n active slotID = %d\n component out. = %d\n scaling RGBHV = %d\n" \ - " ADC calibration = %d\n ext. clock gen. = %d\n"), - f.read(), - f.read(), - f.read(), - f.read(), - f.read() - ); - - f.close(); - } + uopt->wantTap6 = 1; + GBS::VDS_TAP6_BYPS::write(0); + GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() - 1); + _WSN(F("on")); } + else + { + uopt->wantTap6 = 0; + GBS::VDS_TAP6_BYPS::write(1); + GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() + 1); + _WSN(F("off")); + } + // saveUserPrefs(); + slotFlush(); break; - /** - * 1. change resolution - * 2. update registers if videoStandardInput != 14 - * 3. update/save preset data - */ - case 's': // 1080p - case 'p': // 1024p - case 'f': // 960p - case 'g': // 720p - case 'k': // 576p - case 'h': // 480p - case 'j': // 240p - case 'L': // 15kHz/downscale - { - // load preset via webui - uint8_t videoMode = getVideoMode(); - if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) - videoMode = rto->videoStandardInput; // last known good as fallback - // else videoMode stays 0 and we'll apply via some assumptions - if (userCommand == 'f') - // uopt->presetPreference = Output960P; // 1280x960 - uopt->resolutionID = Output960p; // 1280x960 - if (userCommand == 'g') - // uopt->presetPreference = Output720P; // 1280x720 - uopt->resolutionID = Output720p; // 1280x720 - if (userCommand == 'h') - // uopt->presetPreference = Output480P; // 720x480/768x576 - uopt->resolutionID = Output480p; // 720x480/768x576 - if (userCommand == 'p') - // uopt->presetPreference = Output1024P; // 1280x1024 - uopt->resolutionID = Output1024p; // 1280x1024 - if (userCommand == 's') - // uopt->presetPreference = Output1080P; // 1920x1080 - uopt->resolutionID = Output1080p; // 1920x1080 - if (userCommand == 'L') - // uopt->presetPreference = OutputDownscale; // downscale - uopt->resolutionID = Output15kHz; // downscale - if (userCommand == 'k') - uopt->resolutionID = Output576p50; // PAL - if (userCommand == 'j') - uopt->resolutionID = Output240p; // 240p - - rto->useHdmiSyncFix = 1; // disables sync out when programming preset - if (rto->videoStandardInput == 14) - { - // vga upscale path: let synwatcher handle it - _DBGN(F("video input is #14, switch to #15")); - rto->videoStandardInput = 15; - } - else + case 'u': // extract backup + extractBackup(); + // reset active slot + uopt->slotID = 0; + saveUserPrefs(); + // reset device to apply new configuration + resetInMSec(2000); + break; + case 'v': + { + uopt->wantFullHeight = !uopt->wantFullHeight; + // saveUserPrefs(); + slotFlush(); + uint8_t vidMode = getVideoMode(); + // if (uopt->presetPreference == 5) { + if (uopt->resolutionID == Output1080p) + { + if (GBS::GBS_PRESET_ID::read() == 0x05 || GBS::GBS_PRESET_ID::read() == 0x15) { - // normal path - _DBGF(PSTR("apply preset of videoMode: %d resolution: %d\n"), videoMode, uopt->resolutionID); - applyPresets(videoMode); + applyPresets(vidMode); } - saveUserPrefs(); } + } + break; + case 'w': // ADC calibration + _WS(F("ADC calibration: ")); + uopt->enableCalibrationADC = !uopt->enableCalibrationADC; + if(uopt->enableCalibrationADC) + _WSN(F("on")); + else + _WSN(F("off")); + saveUserPrefs(); break; - case 'i': - // toggle active frametime lock method - if (!rto->extClockGenDetected) - { - FrameSync::reset(uopt->frameTimeLockMethod); - } - - if (uopt->frameTimeLockMethod == 0) - { - uopt->frameTimeLockMethod = 1; - } - else if (uopt->frameTimeLockMethod == 1) - { - uopt->frameTimeLockMethod = 0; - } - // saveUserPrefs(); - activeFrameTimeLockInitialSteps(); - slotFlush(); - break; - case 'l': - // cycle through available SDRAM clocks - { - uint8_t PLL_MS = GBS::PLL_MS::read(); - uint8_t memClock = 0; - - if (PLL_MS == 0) - PLL_MS = 2; - else if (PLL_MS == 2) - PLL_MS = 7; - else if (PLL_MS == 7) - PLL_MS = 4; - else if (PLL_MS == 4) - PLL_MS = 3; - else if (PLL_MS == 3) - PLL_MS = 5; - else if (PLL_MS == 5) - PLL_MS = 0; - - switch (PLL_MS) - { - case 0: - memClock = 108; - break; - case 1: - memClock = 81; - break; // goes well with 4_2C = 0x14, 4_2D = 0x27 - case 2: - memClock = 10; - break; // feedback clock - case 3: - memClock = 162; - break; - case 4: - memClock = 144; - break; - case 5: - memClock = 185; - break; // slight OC - case 6: - memClock = 216; - break; // !OC! - case 7: - memClock = 129; - break; - default: - break; - } - GBS::PLL_MS::write(PLL_MS); - ResetSDRAM(); - if (memClock != 10) - { - _WSF(PSTR("SDRAM clock: %dMhz\n"), memClock); - } - else - { - _WSN(F("SDRAM clock: feedback clock")); - } - } - break; - case 'm': - _WS(F("Line Filter: ")); - if (uopt->wantVdsLineFilter) - { - uopt->wantVdsLineFilter = 0; - GBS::VDS_D_RAM_BYPS::write(1); - _WSN(F("off")); - } - else - { - uopt->wantVdsLineFilter = 1; - GBS::VDS_D_RAM_BYPS::write(0); - _WSN(F("on")); - } - saveUserPrefs(); - break; - case 'n': - uopt->enableAutoGain = 0; - setAdcGain(GBS::ADC_RGCTRL::read() - 1); - _WSF(PSTR("ADC gain++ : 0x%04X\n"), GBS::ADC_RGCTRL::read()); - break; - case 'o': - uopt->enableAutoGain = 0; - setAdcGain(GBS::ADC_RGCTRL::read() + 1); - _WSF(PSTR("ADC gain-- : 0x%04X\n"), GBS::ADC_RGCTRL::read()); - break; - case 'A': + case 'x': // do upscaling on low resolutions (preferScalingRgbhv) + uopt->preferScalingRgbhv = !uopt->preferScalingRgbhv; + _WS(F("preferScalingRgbhv: ")); + if (uopt->preferScalingRgbhv) { - uint16_t htotal = GBS::VDS_HSYNC_RST::read(); - uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); - uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); - if ((hbstd > 4) && (hbspd < (htotal - 4))) - { - GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() - 4); - GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() + 4); - } - else - { - _WSN(F("limit")); - } + _WSN(F("on")); + } + else + { + _WSN(F("off")); } + saveUserPrefs(); break; - case 'B': + case 'X': // enable/disable ext. clock generator + _WS(F("ExternalClockGenerator: ")); + if (uopt->disableExternalClockGenerator == 0) { - uint16_t htotal = GBS::VDS_HSYNC_RST::read(); - uint16_t hbstd = GBS::VDS_DIS_HB_ST::read(); - uint16_t hbspd = GBS::VDS_DIS_HB_SP::read(); - if ((hbstd < (htotal - 4)) && (hbspd > 4)) - { - GBS::VDS_DIS_HB_ST::write(GBS::VDS_DIS_HB_ST::read() + 4); - GBS::VDS_DIS_HB_SP::write(GBS::VDS_DIS_HB_SP::read() - 4); - } - else - { - _WSN(F("limit")); - } + uopt->disableExternalClockGenerator = 1; + _WSN(F("off")); + } + else + { + uopt->disableExternalClockGenerator = 0; + _WSN("on"); } + saveUserPrefs(); break; - case 'C': + case 'z': + // sog slicer level + if (rto->currentLevelSOG > 0) { - // vert mask + - uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); - uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); - uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); - if ((vbstd > 6) && (vbspd < (vtotal - 4))) - { - GBS::VDS_DIS_VB_ST::write(vbstd - 2); - GBS::VDS_DIS_VB_SP::write(vbspd + 2); - } - else - { - _WSN(F("limit")); - } + rto->currentLevelSOG -= 1; + } + else + { + rto->currentLevelSOG = 16; } + setAndUpdateSogLevel(rto->currentLevelSOG); + optimizePhaseSP(); + _WSF( + PSTR("Phase: %d SOG: %d\n"), + rto->phaseSP, + rto->currentLevelSOG); break; - case 'D': + case 'E': + // test option for now + _WS(F("IF Auto Offset: ")); + toggleIfAutoOffset(); + if (GBS::IF_AUTO_OFST_EN::read()) { - // vert mask - - uint16_t vtotal = GBS::VDS_VSYNC_RST::read(); - uint16_t vbstd = GBS::VDS_DIS_VB_ST::read(); - uint16_t vbspd = GBS::VDS_DIS_VB_SP::read(); - if ((vbstd < (vtotal - 4)) && (vbspd > 6)) - { - GBS::VDS_DIS_VB_ST::write(vbstd + 2); - GBS::VDS_DIS_VB_SP::write(vbspd - 2); - } - else - { - _WSN(F("limit")); - } + _WSN(F("on")); + } + else + { + _WSN(F("off")); } break; - case 'q': // bob / motionAdaptive - if (uopt->deintMode != 1) - { - // switch to bob mode - uopt->deintMode = 1; - disableMotionAdaptDeinterlace(); - if (GBS::GBS_OPTION_SCANLINES_ENABLED::read()) - { - disableScanlines(); - } - // saveUserPrefs(); - _WSN(F("Deinterlacer: Bob")); - } else { - // switch to motion adaptive mode - uopt->deintMode = 0; - // saveUserPrefs(); - _WSN(F("Deinterlacer: Motion Adaptive")); - } - slotFlush(); - break; - // case 'r': - // break; - case 't': - // unused now - _WS(F("6-tap: ")); - if (uopt->wantTap6 == 0) - { - uopt->wantTap6 = 1; - GBS::VDS_TAP6_BYPS::write(0); - GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() - 1); - _WSN(F("on")); - } - else - { - uopt->wantTap6 = 0; - GBS::VDS_TAP6_BYPS::write(1); - GBS::MADPT_Y_DELAY_UV_DELAY::write(GBS::MADPT_Y_DELAY_UV_DELAY::read() + 1); - _WSN(F("off")); - } - saveUserPrefs(); - break; - case 'u': // extract backup - extractBackup(); - // reset device to apply new configuration - resetInMSec(2000); - case 'v': + case 'F': // freeze pic + if (GBS::CAPTURE_ENABLE::read()) { - uopt->wantFullHeight = !uopt->wantFullHeight; - // saveUserPrefs(); - slotFlush(); - uint8_t vidMode = getVideoMode(); - // if (uopt->presetPreference == 5) { - if (uopt->resolutionID == Output1080p) - { - if (GBS::GBS_PRESET_ID::read() == 0x05 || GBS::GBS_PRESET_ID::read() == 0x15) - { - applyPresets(vidMode); - } - } + rto->freezeCapture = false; + GBS::CAPTURE_ENABLE::write(0); + _WSN(F("capture: disabled")); + } + else + { + rto->freezeCapture = true; + GBS::CAPTURE_ENABLE::write(1); + _WSN(F("capture: enabled")); } break; - case 'w': // ADC calibration - uopt->enableCalibrationADC = !uopt->enableCalibrationADC; - saveUserPrefs(); - break; - case 'x': // preferScalingRgbhv - uopt->preferScalingRgbhv = !uopt->preferScalingRgbhv; - _WS(F("preferScalingRgbhv: ")); - if (uopt->preferScalingRgbhv) - { - _WSN(F("on")); - } - else - { - _WSN(F("off")); - } - saveUserPrefs(); - break; - case 'X': // enable/disable ext. clock generator - _WS(F("ExternalClockGenerator ")); - if (uopt->disableExternalClockGenerator == 0) - { - uopt->disableExternalClockGenerator = 1; - _WSN(F("disabled")); - } - else - { - uopt->disableExternalClockGenerator = 0; - _WSN("enabled"); - } - saveUserPrefs(); - break; - case 'z': - // sog slicer level - if (rto->currentLevelSOG > 0) - { - rto->currentLevelSOG -= 1; - } - else - { - rto->currentLevelSOG = 16; - } - setAndUpdateSogLevel(rto->currentLevelSOG); - optimizePhaseSP(); - _WSF( - PSTR("Phase: %d SOG: %d\n"), - rto->phaseSP, - rto->currentLevelSOG); - break; - case 'E': - // test option for now - _WS(F("IF Auto Offset: ")); - toggleIfAutoOffset(); - if (GBS::IF_AUTO_OFST_EN::read()) - { - _WSN(F("on")); - } - else - { - _WSN(F("off")); - } - break; - case 'F': // freeze pic - if (GBS::CAPTURE_ENABLE::read()) - { - _WSN(F("capture: disabled")); - GBS::CAPTURE_ENABLE::write(0); - } - else - { - _WSN(F("capture: enabled")); - GBS::CAPTURE_ENABLE::write(1); - } - break; - case 'K': - // scanline strength - if (uopt->scanlineStrength >= 0x10) - { - uopt->scanlineStrength -= 0x10; - } - else - { - uopt->scanlineStrength = 0x50; - } - if (rto->scanlinesEnabled) - { - GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); - GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); - } - saveUserPrefs(); - _WSF(PSTR("Scanline Brightness: 0x%04X\n"), uopt->scanlineStrength); - break; - case 'Z': - // brightness++ - GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 1); - _WSF( - PSTR("Brightness++ : %d\n"), - GBS::VDS_Y_OFST::read()); - break; - case 'T': - // brightness-- - GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 1); - _WSF( - PSTR("Brightness-- : %d\n"), - GBS::VDS_Y_OFST::read()); - break; - case 'N': - // contrast++ - GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 1); - _WSF( - PSTR("Contrast++ : %d\n"), - GBS::VDS_Y_GAIN::read()); - break; - case 'M': - // contrast-- - GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 1); - _WSF( - PSTR("Contrast-- : %d\n"), - GBS::VDS_Y_GAIN::read()); - break; - case 'Q': - // pb/u gain++ - GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() + 1); - _WSF( - PSTR("Pb/U gain++ : %d\n"), - GBS::VDS_UCOS_GAIN::read()); - break; - case 'H': - // pb/u gain-- - GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() - 1); + case 'K': // scanline strength + if (uopt->scanlineStrength >= 0x10) + { + uopt->scanlineStrength -= 0x10; + } + else + { + uopt->scanlineStrength = 0x50; + } + if (rto->scanlinesEnabled) + { + GBS::MADPT_Y_MI_OFFSET::write(uopt->scanlineStrength); + GBS::MADPT_UV_MI_OFFSET::write(uopt->scanlineStrength); + } + slotFlush(); + // saveUserPrefs(); + _WSF(PSTR("Scanline Brightness: 0x%04X\n"), uopt->scanlineStrength); + break; + case 'Z': // brightness++ + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() + 1); + _WSF( + PSTR("Brightness++ : %d\n"), + GBS::VDS_Y_OFST::read()); + break; + case 'T': // brightness-- + GBS::VDS_Y_OFST::write(GBS::VDS_Y_OFST::read() - 1); + _WSF( + PSTR("Brightness-- : %d\n"), + GBS::VDS_Y_OFST::read()); + break; + case 'N': // contrast++ + GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() + 1); + _WSF( + PSTR("Contrast++ : %d\n"), + GBS::VDS_Y_GAIN::read()); + break; + case 'M': // contrast-- + GBS::VDS_Y_GAIN::write(GBS::VDS_Y_GAIN::read() - 1); + _WSF( + PSTR("Contrast-- : %d\n"), + GBS::VDS_Y_GAIN::read()); + break; + case 'Q': // pb/u gain++ + GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() + 1); + _WSF( + PSTR("Pb/U gain++ : %d\n"), + GBS::VDS_UCOS_GAIN::read()); + break; + case 'H': // pb/u gain-- + GBS::VDS_UCOS_GAIN::write(GBS::VDS_UCOS_GAIN::read() - 1); + _WSF( + PSTR("Pb/U gain-- : %d\n"), + GBS::VDS_UCOS_GAIN::read()); + break; + break; + case 'P': // pr/v gain++ + GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() + 1); + _WSF( + PSTR("Pr/V gain++ : %d\n"), + GBS::VDS_VCOS_GAIN::read()); + break; + case 'S': // pr/v gain-- + GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() - 1); + _WSF( + PSTR("Pr/V gain-- : %d\n"), + GBS::VDS_VCOS_GAIN::read()); + break; + case 'O': // info + if (GBS::ADC_INPUT_SEL::read() == 1) + { _WSF( - PSTR("Pb/U gain-- : %d\n"), + PSTR("RGB reg\n------------\nY_OFFSET: %d\n" \ + "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" \ + "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), + GBS::VDS_Y_OFST::read(), + GBS::VDS_U_OFST::read(), + GBS::VDS_V_OFST::read(), + GBS::VDS_Y_GAIN::read(), + GBS::VDS_USIN_GAIN::read(), GBS::VDS_UCOS_GAIN::read()); - break; - break; - case 'P': - // pr/v gain++ - GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() + 1); - _WSF( - PSTR("Pr/V gain++ : %d\n"), - GBS::VDS_VCOS_GAIN::read()); - break; - case 'S': - // pr/v gain-- - GBS::VDS_VCOS_GAIN::write(GBS::VDS_VCOS_GAIN::read() - 1); + } + else + { _WSF( - PSTR("Pr/V gain-- : %d\n"), - GBS::VDS_VCOS_GAIN::read()); - break; - case 'O': - // info - if (GBS::ADC_INPUT_SEL::read() == 1) - { - _WSF( - PSTR("RGB reg\n------------\nY_OFFSET: %d\n" \ - "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" \ + PSTR("YPbPr reg\n------------\nY_OFFSET: %d\n" + "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), - GBS::VDS_Y_OFST::read(), - GBS::VDS_U_OFST::read(), - GBS::VDS_V_OFST::read(), - GBS::VDS_Y_GAIN::read(), - GBS::VDS_USIN_GAIN::read(), - GBS::VDS_UCOS_GAIN::read()); - } - else - { - _WSF( - PSTR("YPbPr reg\n------------\nY_OFFSET: %d\n" - "U_OFFSET: %d\nV_OFFSET: %d\nY_GAIN: %d\n" - "USIN_GAIN: %d\nUCOS_GAIN: %d\n"), - GBS::VDS_Y_OFST::read(), - GBS::VDS_U_OFST::read(), - GBS::VDS_V_OFST::read(), - GBS::VDS_Y_GAIN::read(), - GBS::VDS_USIN_GAIN::read(), - GBS::VDS_UCOS_GAIN::read()); - } - break; - case 'U': - // default - if (GBS::ADC_INPUT_SEL::read() == 1) - { - GBS::VDS_Y_GAIN::write(128); - GBS::VDS_UCOS_GAIN::write(28); - GBS::VDS_VCOS_GAIN::write(41); - GBS::VDS_Y_OFST::write(0); - GBS::VDS_U_OFST::write(0); - GBS::VDS_V_OFST::write(0); - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_BOFCTRL::write(adco->b_off); - _WSN(F("RGB:defauit")); - } - else - { - GBS::VDS_Y_GAIN::write(128); - GBS::VDS_UCOS_GAIN::write(28); - GBS::VDS_VCOS_GAIN::write(41); - GBS::VDS_Y_OFST::write(254); - GBS::VDS_U_OFST::write(3); - GBS::VDS_V_OFST::write(3); - GBS::ADC_ROFCTRL::write(adco->r_off); - GBS::ADC_GOFCTRL::write(adco->g_off); - GBS::ADC_BOFCTRL::write(adco->b_off); - _WSN(F("YPbPr:defauit")); - } - break; - default: - break; + GBS::VDS_Y_OFST::read(), + GBS::VDS_U_OFST::read(), + GBS::VDS_V_OFST::read(), + GBS::VDS_Y_GAIN::read(), + GBS::VDS_USIN_GAIN::read(), + GBS::VDS_UCOS_GAIN::read()); } - - userCommand = '@'; // in case we handled web server command - lastVsyncLock = millis(); - wifiLoop(1); + break; + case 'U': // default + if (GBS::ADC_INPUT_SEL::read() == 1) + { + GBS::VDS_Y_GAIN::write(128); + GBS::VDS_UCOS_GAIN::write(28); + GBS::VDS_VCOS_GAIN::write(41); + GBS::VDS_Y_OFST::write(0); + GBS::VDS_U_OFST::write(0); + GBS::VDS_V_OFST::write(0); + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + _WSN(F("RGB:defauit")); + } + else + { + GBS::VDS_Y_GAIN::write(128); + GBS::VDS_UCOS_GAIN::write(28); + GBS::VDS_VCOS_GAIN::write(41); + GBS::VDS_Y_OFST::write(254); + GBS::VDS_U_OFST::write(3); + GBS::VDS_V_OFST::write(3); + GBS::ADC_ROFCTRL::write(adco->r_off); + GBS::ADC_GOFCTRL::write(adco->g_off); + GBS::ADC_BOFCTRL::write(adco->b_off); + _WSN(F("YPbPr:defauit")); + } + break; + default: + break; } + + userCommand = '@'; // in case we handled web server command + lastVsyncLock = millis(); } /** @@ -2675,6 +2718,108 @@ void fsToFactory() { LittleFS.remove(fn); delay(50); } + // set default slot ID + uopt->slotID = 0; +} + +/** + * @brief webSocket events handler + * + * @param num + * @param type + * @param payload + * @param length + */ +void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length) { + switch (type) { + case WStype_DISCONNECTED: + case WStype_CONNECTED: + _DBGF(PSTR("(ws) %d client(s) connected\n"), num+1); + break; + case WStype_PONG: + if (webSocket.connectedClients() > 0) { + // debug output + if(rto->developerMode) { + const char * buff = serialGetBuffer(); + if(*buff != '\0') { + // sending to all clients + webSocket.broadcastBIN((uint8_t *)buff, SERIAL_BUFFER_MAX_LEN); + serialBufferClean(); + return; + } + } + // system status values for an ordinary heartbeat + constexpr size_t MESSAGE_LEN = 8; + uint8_t toSend[MESSAGE_LEN]; + memset(toSend, 0, MESSAGE_LEN); + // special character # used for message filtering in WebUI + toSend[0] = '#'; + toSend[1] = uopt->slotID + '0'; + // TODO: resolutionID must be INTEGER too? + toSend[2] = (char)uopt->resolutionID; + // + if (uopt->wantScanlines) + toSend[3] |= (1 << 0); + if (uopt->wantVdsLineFilter) + toSend[3] |= (1 << 1); + if (uopt->wantStepResponse) + toSend[3] |= (1 << 2); + if (uopt->wantPeaking) + toSend[3] |= (1 << 3); + if (uopt->enableAutoGain) + toSend[3] |= (1 << 4); + if (uopt->enableFrameTimeLock) + toSend[3] |= (1 << 5); + + // + if (uopt->deintMode == 0) // motion adaptive if == 0 + toSend[4] |= (1 << 0); + if (uopt->deintMode == 1) // bob if == 1 + toSend[4] |= (1 << 1); + // if (uopt->wantTap6) { + // toSend[4] |= (1 << 1); + // } + if (uopt->wantFullHeight) + toSend[4] |= (1 << 2); + // if (uopt->matchPresetSource) + // toSend[4] |= (1 << 3); + if (uopt->PalForce60 == 1) + toSend[4] |= (1 << 3); + + // system preferences + if (uopt->wantOutputComponent) + toSend[5] |= (1 << 0); + if (uopt->enableCalibrationADC) + toSend[5] |= (1 << 1); + if (uopt->preferScalingRgbhv) + toSend[5] |= (1 << 2); + if (uopt->disableExternalClockGenerator) + toSend[5] |= (1 << 3); + + // developer panel controls status + if(rto->developerMode) + toSend[6] |= (1 << 0); + if(rto->printInfos) + toSend[6] |= (1 << 1); + if(rto->invertSync) + toSend[6] |= (1 << 2); + if(rto->osr != 0) + toSend[6] |= (1 << 3); + if(rto->adcFilter) + toSend[6] |= (1 << 4); + if(rto->debugView) + toSend[6] |= (1 << 5); + if(rto->freezeCapture) + toSend[6] |= (1 << 6); + + // system tab controls + if(rto->allowUpdatesOTA) + toSend[7] |= (1 << 0); + + webSocket.sendBIN(num, toSend, MESSAGE_LEN); + } + break; + } } #endif // defined(ESP8266) \ No newline at end of file diff --git a/src/wserver.h b/src/wserver.h index 9f358656..b2953c0c 100644 --- a/src/wserver.h +++ b/src/wserver.h @@ -3,7 +3,7 @@ # File: wserver.h # # File Created: Friday, 19th April 2024 3:11:47 pm # # Author: Sergey Ko # -# Last Modified: Friday, 7th June 2024 3:55:49 pm # +# Last Modified: Monday, 10th June 2024 12:27:21 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -48,6 +48,8 @@ const char mimeOctetStream[] PROGMEM = "application/octet-stream"; const char mimeAppJson[] PROGMEM = "application/json"; void serverInit(); +void serverWebSocketToggleDeveloperMode(); +void serverWebSocketInit(); void serverHome(); void serverSC(); void serverUC(); @@ -79,6 +81,7 @@ void handleSerialCommand(); void handleUserCommand(); void initUpdateOTA(); void fsToFactory(); +void webSocketEvent(uint8_t num, uint8_t type, uint8_t * payload, size_t length); #endif // defined(ESP8266) #endif // _ESPWSERVER_H_ \ No newline at end of file diff --git a/translation.hdwui.json b/translation.hdwui.json index d5a972f7..4a9a14fb 100644 --- a/translation.hdwui.json +++ b/translation.hdwui.json @@ -38,19 +38,19 @@ "ru": "Профили настроек" }, "OM_RESET_RESTORE": { - "en": "Reset/Restore", - "es": "Resetear/Restaurar", - "ru": "Сброс/Восстановление" + "en": "Reset / Restore", + "es": "Resetear / Restaurar", + "ru": "Сброс / Восстановление" }, "OM_RESET_GBS": { - "en": "Reset GBS", - "es": "Resetear ajustes", - "ru": "Сбросить настройки" + "en": "Restart device", + "es": "Reiniciar dispositivo", + "ru": "Перезагрузить" }, "OM_RESET_WIFI": { "en": "Reset WiFi settings", - "es": "Borrar ajustes WiFi", - "ru": "Сброс настройек WiFi" + "es": "Borrar ajustes de WiFi", + "ru": "Сброс настроек WiFi" }, "OM_RESTORE_FACTORY": { "en": "Restore Factory", diff --git a/translation.webui.json b/translation.webui.json index 9c87d552..89c88421 100644 --- a/translation.webui.json +++ b/translation.webui.json @@ -190,16 +190,17 @@ "ru": "Соответствать Профилю", "zh": "" }, - - - - "MATCH_PRESETS_SWITCH_HELP_1": { "en": "If enabled, default to 1280x960 for NTSC 60 and 1280x1024 for PAL 50 (does not apply for 720p / 1080p presets).", "es": "Si está habilitado, el valor predeterminado es 1280x960 para NTSC 60 y 1280x1024 para PAL 50 (no se aplica a los ajustes preestablecidos de 720p/1080p).", "ru": "Если этот параметр включен, по умолчанию используется разрешение 1280x960 для NTSC 60 и 1280x1024 для PAL 50 (не применяется к предустановкам 720p/1080p).", "zh": "" }, + + + + + "FULL_HEIGHT_SWITCH": { "en": "Full Height", "es": "Estirar en altura", @@ -411,9 +412,9 @@ "zh": "" }, "DEVELOPER_MODE_SWITCH_HELP_1": { - "en": "Enables the developer menu which contains various debugging tools", - "es": "Habilita el menú de desarrollador que contiene varias herramientas adicionales.", - "ru": "Включает меню разработчика, содержащее различные инструменты отладки.", + "en": "Enables the developer menu and real time debug console which contains various debugging tools", + "es": "Habilita el menú de desarrollador y consola de registro que contiene varias herramientas adicionales.", + "ru": "Включает меню разработчика и консоль отладки, содержащее различные инструменты отладки.", "zh": "" }, "DEVELOPER_LEGEND": { @@ -422,6 +423,12 @@ "ru": "Разработчик", "zh": "" }, + "DEVELOPER_JS_ALERT_TEXTDECODER": { + "en": "This browser does not support TextDecoder feature...", + "es": "Este navegador no es compatible con la función TextDecoder...", + "ru": "Этот браузер не поддерживает функцию TextDecoder...", + "zh": "" + }, "TOGGLE_CONSOLE_BUTTON": { "en": "Toggle Console", "es": "Ocultar/Mostrar consola", @@ -591,9 +598,9 @@ "zh": "" }, "RESET_BUTTON_JS_ALERT_MESSAGE": { - "en": "

    This action will reset:

    • Active Slot parameters,
    • Common parameters

    Are you ready to continue?

    ", - "es": "

    Esta por resetear:

    • Parámetros del Perfil activo,
    • Configuración común

    Quiere seguir reiniciando?

    ", - "ru": "

    Следующие параметры будут сброшены:

    • Параметры активного Профиля,
    • Общесистемные параметры

    Желаете продолжить?

    ", + "en": "

    This action will reset your device to factory state. The data to be deleted:

    • All Slots and Presets data,
    • Common parameters

    Are you ready to continue?

    ", + "es": "

    Restablecer el estado de fábrica. Los siguientes datos serán eliminados:

    • Todos Perfiles y sus ajustes,
    • Configuración común

    Quiere seguir reiniciando?

    ", + "ru": "

    Сброс устройства к заводскому состоянию. Следующие данные будут удалены:

    • Все Профили и предустановки,
    • Общесистемные параметры

    Желаете продолжить?

    ", "zh": "" }, "BACKUP_LEGEND": { From b8cf48e87dee01be817accdff3928f6f455e2542 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Mon, 10 Jun 2024 18:58:41 -0600 Subject: [PATCH 31/41] TEST: fix: clearing an object of non-trivial type 'class OLEDMenuItem'; use assignment or value-initialization instead [-Wclass-memaccess] --- .vscode/settings.json | 3 +- README.md | 10 +++++++ src/OLEDMenuManager.cpp | 65 ++++++++++++++++++++++++++++++++--------- src/OLEDMenuManager.h | 15 +++++++--- src/menu.cpp | 4 ++- src/options.h | 2 +- src/video.cpp | 6 ++-- 7 files changed, 81 insertions(+), 24 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index dd3ec869..3b26ab96 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,8 @@ "string": "cpp", "typeinfo": "cpp", "random": "cpp", - "*.html.tpl": "html" + "*.html.tpl": "html", + "new": "cpp" }, "editor.tabSize": 4, "editor.insertSpaces": true, diff --git a/README.md b/README.md index f6e4501b..174bbf8b 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Development threads: - [Slots vs Presets](#slots-vs-presets) - [Vocabulary](#vocabulary) - [How-to switch GBS-Control to upload mode?](#how-to-switch-gbs-control-to-upload-mode) +- [TODO:](#todo) - [Additional information](#additional-information) - [Old documentation](#old-documentation) @@ -294,6 +295,15 @@ The following diagram represents the structure of system and user configurations ESP8266 version of the factory built GBSC, boots into firmware upload mode by pressing the knob button while the device is off and connecting it to a computer with USB cable. +## TODO: + +- [ ] Full height doesn't work +- [ ] Invert Sync issue +- [ ] PassThrough doesn't work +- [ ] preferScalingRgbhv doesn't work (?) +- [ ] feature request #553 +- [ ] creation/destruction OLEDMenuItem procedure + ## Additional information See [/doc/developer_guide.md](./doc/DEVELOPER_GUIDE.md). diff --git a/src/OLEDMenuManager.cpp b/src/OLEDMenuManager.cpp index fd8b6fd3..daa98a06 100644 --- a/src/OLEDMenuManager.cpp +++ b/src/OLEDMenuManager.cpp @@ -10,12 +10,26 @@ * * @param display */ -OLEDMenuManager::OLEDMenuManager(SSD1306Wire *display) - : display(display) - , rootItem(registerItem(nullptr, 0, nullptr)) +OLEDMenuManager::OLEDMenuManager(SSD1306Wire * _display) { + display = _display; + // allocate memory for menu items list + allItems = new OLEDMenuItem * [OLED_MENU_MAX_ITEMS_NUM]; + uint8_t i = 0; + while(i < OLED_MENU_MAX_ITEMS_NUM) { + allItems[i] = nullptr; + i++; + } +} + +/** + * @brief initializer does what constructor can NOT do + * + */ +void OLEDMenuManager::init() { + rootItem = registerItem(nullptr, 0, nullptr); pushItem(rootItem); - randomSeed(millis()); // does this work? + // randomSeed(millis()); // does this work? } /** @@ -26,21 +40,36 @@ OLEDMenuManager::OLEDMenuManager(SSD1306Wire *display) OLEDMenuItem *OLEDMenuManager::allocItem() { int i = 0; - OLEDMenuItem *newItem = nullptr; + OLEDMenuItem * newItem = nullptr; + auto lambdaAllocItem = [&newItem]() { + newItem = new OLEDMenuItem(); + newItem->used = true; + }; while (i < OLED_MENU_MAX_ITEMS_NUM) { - if (!this->allItems[i].used) { - // FIXME - memset(&this->allItems[i], 0, sizeof(OLEDMenuItem)); - newItem = &this->allItems[i]; - newItem->used = true; + if(this->allItems[i] == nullptr) { + lambdaAllocItem(); + break; + } + else if (!this->allItems[i]->used) + { + delete this->allItems[i]; + lambdaAllocItem(); break; } + // if (!this->allItems[i].used) { + // // FIXME + // memset(&this->allItems[i], 0, sizeof(OLEDMenuItem)); + // newItem = &this->allItems[i]; + // newItem->used = true; + // break; + // } i++; } - if (!newItem) { - char msg[40]; - sprintf(msg, PSTR("Maximum number of items reached: %d"), OLED_MENU_MAX_ITEMS_NUM); - panicAndDisable(msg); + if (newItem == nullptr) { + // char msg[40]; + _DBGF(PSTR("reached max. menu items: %d"), OLED_MENU_MAX_ITEMS_NUM); + // sprintf(msg, PSTR("Maximum number of items reached: %d"), OLED_MENU_MAX_ITEMS_NUM); + // panicAndDisable(msg); } return newItem; } @@ -67,6 +96,8 @@ OLEDMenuItem *OLEDMenuManager::registerItem( OLEDDISPLAY_TEXT_ALIGNMENT alignment) { OLEDMenuItem *newItem = allocItem(); + if(newItem == nullptr) + goto register_image_item_end; if (alignment == OLEDDISPLAY_TEXT_ALIGNMENT::TEXT_ALIGN_CENTER_BOTH) { alignment = OLEDDISPLAY_TEXT_ALIGNMENT::TEXT_ALIGN_CENTER; @@ -85,6 +116,8 @@ OLEDMenuItem *OLEDMenuManager::registerItem( itemUnderCursor = rootItem->subItems[0]; } } + +register_image_item_end: return newItem; } @@ -108,6 +141,9 @@ OLEDMenuItem *OLEDMenuManager::registerItem( OLEDDISPLAY_TEXT_ALIGNMENT alignment) { OLEDMenuItem *newItem = allocItem(); + if(newItem == nullptr) + goto register_text_item_end; + newItem->str = string; if (font == nullptr) { font = DejaVu_Sans_Mono_12; @@ -128,6 +164,7 @@ OLEDMenuItem *OLEDMenuManager::registerItem( itemUnderCursor = rootItem->subItems[0]; } } +register_text_item_end: return newItem; } diff --git a/src/OLEDMenuManager.h b/src/OLEDMenuManager.h index d5c3a4bc..5d50e4d9 100644 --- a/src/OLEDMenuManager.h +++ b/src/OLEDMenuManager.h @@ -8,6 +8,7 @@ #include "OLEDMenuItem.h" #include "OLEDMenuTranslations.h" #include "options.h" +#include "wserial.h" #define IMAGE_ITEM(name) name##_WIDTH, name##_HEIGHT, name #define CENTER_IMAGE(name) (OLED_MENU_WIDTH - name##_WIDTH) / 2, (OLED_MENU_HEIGHT - name##_HEIGHT) / 2, name##_WIDTH, name##_HEIGHT, name @@ -29,9 +30,10 @@ enum class OLEDMenuNav class OLEDMenuManager { private: - OLEDDisplay *const display; - OLEDMenuItem allItems[OLED_MENU_MAX_ITEMS_NUM]; - OLEDMenuItem *itemStack[OLED_MENU_MAX_DEPTH]; + OLEDDisplay * display = nullptr; + // OLEDMenuItem allItems[OLED_MENU_MAX_ITEMS_NUM]; + OLEDMenuItem ** allItems; + OLEDMenuItem * itemStack[OLED_MENU_MAX_DEPTH]; uint8_t itemSP; OLEDMenuItem *itemUnderCursor; // null means the status bar is currently selected OLEDMenuState state; @@ -119,13 +121,18 @@ class OLEDMenuManager public: OLEDMenuManager(SSD1306Wire *display); + ~OLEDMenuManager() { + delete[] allItems; + allItems = NULL; + } OLEDMenuItem *allocItem(); OLEDMenuItem *registerItem(OLEDMenuItem *parent, uint16_t tag, uint16_t imageWidth, uint16_t imageHeight, const uint8_t *xbmImage, MenuItemHandler handler = nullptr, OLEDDISPLAY_TEXT_ALIGNMENT alignment = TEXT_ALIGN_CENTER); OLEDMenuItem *registerItem(OLEDMenuItem *parent, uint16_t tag, const char *string, MenuItemHandler handler = nullptr, const uint8_t *font = nullptr, OLEDDISPLAY_TEXT_ALIGNMENT alignment = TEXT_ALIGN_CENTER); + void init(); void tick(OLEDMenuNav btn); void goBack(bool preserveCursor = true); void goMain(bool preserveCursor = true); - OLEDMenuItem *const rootItem; + OLEDMenuItem * rootItem = nullptr; void clearSubItems(OLEDMenuItem *item) { diff --git a/src/menu.cpp b/src/menu.cpp index 87a04d7a..867897b1 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Sunday, 2nd June 2024 5:26:25 pm # +# Last Modified: Monday, 10th June 2024 6:34:38 pm # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -824,6 +824,8 @@ void IRAM_ATTR isrRotaryEncoderPushForNewMenu() * */ void menuInit() { + oledMenu.init(); + #if USE_NEW_OLED_MENU attachInterrupt(digitalPinToInterrupt(PIN_CLK), isrRotaryEncoderRotateForNewMenu, FALLING); diff --git a/src/options.h b/src/options.h index 8640593b..58cb89b8 100644 --- a/src/options.h +++ b/src/options.h @@ -22,7 +22,7 @@ #define WEBSOCK_HBEAT_INTVAL 1500UL #define WEBSOCK_HBEAT_PONG_TOUT 1500UL #define WEBSOCK_HBEAT_DISCONN_CNT 5 -#define WEBSOCK_HBEAT_DEV_INTVAL 500UL +#define WEBSOCK_HBEAT_DEV_INTVAL 300UL #define WEBSOCK_HBEAT_DEV_PONG_TOUT 1000UL #define WEBSOCK_HBEAT_DEV_DISCONN_CNT 3 #define THIS_DEVICE_MASTER diff --git a/src/video.cpp b/src/video.cpp index edcff645..0b20f5f9 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Monday, 10th June 2024 4:04:57 pm # +# Last Modified: Monday, 10th June 2024 4:55:33 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -1693,7 +1693,7 @@ void setOutModeHdBypass(bool regsInitialized) GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out delay(200); optimizePhaseSP(); - _WSN(F("pass-through on")); + _WSN(F("output mode HD bypass")); } /** @@ -4236,7 +4236,7 @@ void runSyncWatcher() } if (newVideoModeCounter != 0) { // apply new mode - _WSF(PSTR(" %d \n"), vidModeReadout); + _WSF(PSTR(" %d (%d -> %d)\n"), vidModeReadout, rto->videoStandardInput, detectedVideoMode); // _WS("Old: "); _WS(rto->videoStandardInput); // _WS(" New: "); _WSN(detectedVideoMode); rto->videoIsFrozen = false; From e015e4f86b4f9686f0f29599e7a8463c1f44a888 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Tue, 11 Jun 2024 15:05:48 -0600 Subject: [PATCH 32/41] TEST: large UI update, feature request #553 implementation, fix: FW version string position on screen saver --- README.md | 5 +- configure.json | 2 +- package.json | 2 +- public/scripts/build.js | 3 + public/src/index.html.tpl | 33 +-- public/src/index.ts | 8 +- public/src/style.css | 127 +++++++--- src/OLEDMenuImplementation.cpp | 124 +++++++++- src/OLEDMenuImplementation.h | 17 ++ src/OLEDMenuManager.h | 2 +- src/OLEDMenuTranslations.h | 435 ++++++++++++++++++++++++++++++++- src/wserver.cpp | 10 +- translation.hdwui.json | 121 ++++++++- translation.webui.json | 5 +- 14 files changed, 816 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index 174bbf8b..efe3cd10 100644 --- a/README.md +++ b/README.md @@ -301,8 +301,9 @@ ESP8266 version of the factory built GBSC, boots into firmware upload mode by pr - [ ] Invert Sync issue - [ ] PassThrough doesn't work - [ ] preferScalingRgbhv doesn't work (?) -- [ ] feature request #553 -- [ ] creation/destruction OLEDMenuItem procedure +- [ ] fix OLEDMenu items list offset +- [x] feature request [#553] +- [x] creation/destruction OLEDMenuItem procedure ## Additional information diff --git a/configure.json b/configure.json index f6e0a5a8..3364ac4b 100644 --- a/configure.json +++ b/configure.json @@ -21,5 +21,5 @@ "ui-lang": "en", "ui-hdw-fonts": "12@FreeSans,16@FreeSans", "ui-web-font": "Oswald Regular", - "version": "24.0610" + "version": "24.0611" } \ No newline at end of file diff --git a/package.json b/package.json index 0f69fa7c..feeb77ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gbscontrol-webui", - "version": "1.2.2", + "version": "1.3.0", "description": "gbscontrol-webui", "author": "", "license": "GPL-3.0", diff --git a/public/scripts/build.js b/public/scripts/build.js index 5058a9f8..8b3d3f34 100755 --- a/public/scripts/build.js +++ b/public/scripts/build.js @@ -16,6 +16,7 @@ var js = fs.readFileSync('public/src/index.js', 'utf-8') // const default_ui_lang = 'en'; const config = require(path.resolve(__dirname + '/../../configure.json')); +const package = require(path.resolve(__dirname + '/../../package.json')); const lang = require(path.resolve(__dirname + '/../../translation.webui.json')); String.prototype.format = function() { a = this; @@ -90,6 +91,8 @@ fs.writeFileSync( .replace('${styles}', css) .replace('${js}', js) .replace('${favicon}', `data:image/png;base64,${favicon}`) + .replace('${VERSION_FIRMWARE}', config['version']) + .replace('${VERSION_UI}', package['version']) .replace( '${manifest}', `data:application/json;base64,${Buffer.from(manifest).toString('base64')}` diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 024e151b..bb5d8783 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -36,22 +36,24 @@ - - - - + + + + - - @@ -554,7 +556,7 @@
    L{DEVELOPER_LEGEND}
    - @@ -841,11 +843,14 @@
    -
    +
    +
    diff --git a/public/src/index.ts b/public/src/index.ts index 1a925676..383a1be2 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -1331,13 +1331,11 @@ const updateConsoleVisibility = () => { const consoleStatus = GBSStorage.read('consoleVisible') as boolean if (consoleStatus != true) { GBSStorage.write('consoleVisible', true) - // GBSControl.consoleVisible = true - GBSControl.ui.toggleConsole.setAttribute('active', '') + GBSControl.ui.toggleConsole.removeAttribute('active') document.body.classList.remove('gbs-output-hide') } else { GBSStorage.write('consoleVisible', false) - // GBSControl.consoleVisible = false - GBSControl.ui.toggleConsole.removeAttribute('active') + GBSControl.ui.toggleConsole.setAttribute('active', '') document.body.classList.add('gbs-output-hide') } } @@ -1356,8 +1354,6 @@ const toggleDeveloperMode = () => { } GBSControl.ui.developerSwitch.setAttribute('active', '') GBSControl.ui.developerSwitch.querySelector('.gbs-icon').innerText = "toggle_on" - // if(!GBSControl.wsHeartbeatInterval) - // GBSControl.wsHeartbeatInterval = window.setInterval(webSocketHeartbeat, 900); } else { el.setAttribute('hidden', '') GBSStorage.write('consoleVisible', true) diff --git a/public/src/style.css b/public/src/style.css index b7c364fe..d8590a62 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -95,8 +95,8 @@ body { /** main screen scrollable area */ .gbs-scroll { - height: calc(100% - 54px); - margin-bottom: 148px; + height: calc(100% - 75px); + /* margin-bottom: 148px; */ overflow-x: hidden; overflow-y: auto; } @@ -114,12 +114,72 @@ body { border-radius: 20px; } +.gbs-scroll__footer { + position: absolute; + bottom: 0px; + left: 0px; + width: 100%; + display: flex; + margin: 0px; + background-color: var(--color-cod-gray-light); + color: rgba(var(--color-secondary-rgba), 0.7); + border-radius: 0 0 16px 16px; +} + +.gbs-scroll__footer > div { + /* box-shadow: 0 0px 30px -10px rgba(var(--color-primary-rgba), .9); */ + padding: 5px 10px 8px; + width: 100%; + text-align: right; + font-size: 10px; + font-weight: bold; + line-height: normal; +} + +/* menu */ +.gbs-menu { + background-color: var(--color-cod-gray-light); + /* box-shadow: 0 0px 30px -10px rgba(var(--color-primary-rgba), .9); */ + border-top: 1px solid rgba(var(--color-primary-rgba), .4); + bottom: 0; + box-sizing: border-box; + color: var(--color-primary); + display: flex; + height: 75px; + padding: 8px 5px 15px; + position: absolute; + text-align: center; + width: 100%; + z-index: 10; +} + +.gbs-menu__logo { + display: none; + margin: auto; + margin-right: 8px; + width: 30%; +} + +.gbs-menu__button-group { + border: 1px dashed rgba(var(--color-primary-rgba), .5); + /* padding: 2px; */ + width: 60%; + display:flex; + border-radius: 8px; + margin-right: 2px; +} + +.gbs-button__uwidth { + width: 15% !important; +} + /* buttons */ .gbs-button { appearance: none; background-color: var(--color-mine-shaft-light); border-radius: 4px; - border: 1px dashed rgba(var(--color-primary-rgba), 0.2); + /* border: 1px dashed rgba(var(--color-primary-rgba), 0.2); */ + border: 1px solid rgba(var(--color-primary-rgba), .2); color: rgba(var(--color-primary-rgba), 0.6); cursor: pointer; flex-grow: 1; @@ -251,28 +311,6 @@ body { text-align: right; } -/* menu */ -.gbs-menu { - background-color: var(--color-cod-gray-light); - border-top: 1px solid #282828; - bottom: 0; - box-sizing: border-box; - color: var(--color-primary); - display: flex; - height: 54px; - padding: 8px; - position: absolute; - text-align: center; - width: 100%; -} - -.gbs-menu__logo { - display: none; - margin: auto; - margin-right: 8px; - width: 200%; -} - /* fieldset */ .gbs-fieldset { border-radius: 4px; @@ -318,6 +356,20 @@ body { width: 100%; } +.gbs-preferences tr > td:first-child { + width: 90%; + text-align: left; +} + +.gbs-preferences tr > td:last-child:hover { + color: rgba(var(--color-secondary-rgba), 0.7); + -webkit-transition: all 0.3s linear; + -moz-transition: all 0.3s linear; + -ms-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; +} + .gbs-preferences td { color: var(--color-silver-chalice); text-align: left; @@ -453,6 +505,7 @@ body { position: fixed; top: 0; width: 100%; + z-index:20; } .gbs-loader img { @@ -620,6 +673,12 @@ section[name="alert"] { padding-right: 16px; } +@media (max-width: 414px) { + .gbs-scroll__footer { + display: none; + } +} + @media (min-width: 415px) { .gbs-button:hover { border: 1px solid var(--color-primary); @@ -641,13 +700,19 @@ section[name="alert"] { height: 60px; } + .gbs-scroll { + height: calc(100% - 85px); + } + .gbs-menu { - border-bottom: 1px solid rgba(var(--color-primary-rgba), 0.4); + border-bottom: 1px solid rgba(var(--color-primary-rgba), .4); + box-shadow: none; bottom: initial; - padding-left: 8px; - padding-right: 8px; + padding: 8px; position: relative; top: 0; + height: 55px; + border-radius: 16px 16px 0 0; } .gbs-menu__logo { @@ -678,10 +743,12 @@ section[name="alert"] { .gbs-output-hide .gbs-container { border-radius: 16px; - box-shadow: 0 0 64px 4px rgba(var(--color-primary-rgba), 0.4); + box-shadow: 0 0 40px 10px rgba(var(--color-primary-rgba), 0.3); + /* box-shadow: 0 5px 32px 3px rgba(0 0 0, 0.9); */ display: block; height: calc(100vh - 64px); - margin-top: 32px; + margin: 32px auto; + border: 1px solid rgba(var(--color-primary-rgba), .5); } .gbs-fieldset-output { diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index d1e2aa91..d8e26f0b 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -243,7 +243,7 @@ bool resetMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, } /** - * @brief + * @brief Display current output status in accordance with active slot+preset * * @param manager * @param nav @@ -286,7 +286,7 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav // rto->presetID = static_cast(GBS::GBS_PRESET_ID::read()); // uopt->resolutionID = static_cast(GBS::GBS_PRESET_ID::read()); - display.setFont(URW_Gothic_L_Book_20); + // display.setFont(URW_Gothic_L_Book_20); display.setTextAlignment(TEXT_ALIGN_LEFT); // if (rto->presetID == 0x01 || rto->presetID == 0x11) { @@ -341,6 +341,99 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav return false; } +/** + * @brief Handle user activity in Active Slot and System-wide Paramters menu + * + * @param manager + * @param item + * @param isFirstTime + * @return true + * @return false + */ +bool settingsMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool isFirstTime) { + if (!isFirstTime) { + if (millis() - oledMenuFreezeStartTime >= oledMenuFreezeTimeoutInMS) { + manager->unfreeze(); + } + return false; + } + // prepare display to inform user + OLEDDisplay &display = *manager->getDisplay(); + display.clear(); + display.setColor(OLEDDISPLAY_COLOR::WHITE); + // display.setFont(ArialMT_Plain_10); + // display.setTextAlignment(OLEDDISPLAY_TEXT_ALIGNMENT::TEXT_ALIGN_CENTER); + // changing settings on the next loop + switch(item->tag) { + // active slot parameters + case MT_SSET_AUTOGAIN: + serialCommand = 'T'; + uopt->enableAutoGain == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_SCANLINES: + userCommand = '7'; + uopt->wantScanlines == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_LINFILTR: + userCommand = 'm'; + uopt->wantVdsLineFilter == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_PEAKING: + serialCommand = 'f'; + uopt->wantPeaking == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_STPRESP: + serialCommand = 'V'; + uopt->wantStepResponse == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_FULHEIGHT: + userCommand = 'v'; + uopt->wantFullHeight == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_F50FREQ60: + userCommand = '0'; + uopt->PalForce60 == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_FTL: + userCommand = '5'; + uopt->enableFrameTimeLock == 0 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_SSET_FTLMETHOD: + userCommand = 'i'; + uopt->frameTimeLockMethod == 0 ? display.drawXbm(CENTER_IMAGE(OM_FTL_METHOD_0)) : display.drawXbm(CENTER_IMAGE(OM_FTL_METHOD_1)); + break; + case MT_SSET_DEINT_BOB_MAD: + userCommand = 'q'; + uopt->deintMode != 1 ? display.drawXbm(CENTER_IMAGE(OM_BOB_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_MAD_ENABLED)); + break; + + // common settings + case MT_CPRM_UPSCALE: + userCommand = 'x'; + uopt->preferScalingRgbhv != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_CPRM_FORCECOMPOSITE: + serialCommand = 'L'; + uopt->wantOutputComponent != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + case MT_CPRM_DISEXTCLK: + userCommand = 'X'; + uopt->disableExternalClockGenerator != 1 ? display.drawXbm(CENTER_IMAGE(OM_DISABLED)) : display.drawXbm(CENTER_IMAGE(OM_ENABLED)); + break; + case MT_CPRM_ADCCALIBR: + userCommand = 'w'; + uopt->enableCalibrationADC != 1 ? display.drawXbm(CENTER_IMAGE(OM_ENABLED)) : display.drawXbm(CENTER_IMAGE(OM_DISABLED)); + break; + } + display.display(); + + oledMenuFreezeStartTime = millis(); + oledMenuFreezeTimeoutInMS = 2500; + manager->freeze(); + + return true; +} + /** * @brief * @@ -349,7 +442,7 @@ bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *, OLEDMenuNav * @return true * @return false */ -bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool) +bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool isFirstTime) { static char ssid[64]; static char ip[25]; @@ -476,13 +569,34 @@ void initOLEDMenu() oledMenu.registerItem(resMenu, MT_DOWNSCALE, IMAGE_ITEM(OM_DOWNSCALE), resolutionMenuHandler); oledMenu.registerItem(resMenu, MT_BYPASS, IMAGE_ITEM(OM_PASSTHROUGH), resolutionMenuHandler); - // Presets + // Slots oledMenu.registerItem(root, MT_NULL, IMAGE_ITEM(OM_PRESET), presetsCreationMenuHandler); + // Slot Parameters + OLEDMenuItem *activeSlotParameters = oledMenu.registerItem(root, MT_NULL, IMAGE_ITEM(OM_ACTIVE_SLOT_PARAMETERS)); + oledMenu.registerItem(activeSlotParameters, MT_SSET_AUTOGAIN, IMAGE_ITEM(OM_SSET_AUTOGAIN), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_SCANLINES, IMAGE_ITEM(OM_SSET_SCANLINES), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_LINFILTR, IMAGE_ITEM(OM_SSET_LINFILTR), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_PEAKING, IMAGE_ITEM(OM_SSET_PEAKING), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_STPRESP, IMAGE_ITEM(OM_SSET_STPRESP), settingsMenuHandler); + + oledMenu.registerItem(activeSlotParameters, MT_SSET_FULHEIGHT, IMAGE_ITEM(OM_SSET_FULHEIGHT), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_F50FREQ60, IMAGE_ITEM(OM_SSET_F50FREQ60), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_FTL, IMAGE_ITEM(OM_SSET_FTL), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_FTLMETHOD, IMAGE_ITEM(OM_SSET_FTLMETHOD), settingsMenuHandler); + oledMenu.registerItem(activeSlotParameters, MT_SSET_DEINT_BOB_MAD, IMAGE_ITEM(OM_SSET_DEINT_BOB_MAD), settingsMenuHandler); + + // System-wide parameters + OLEDMenuItem *systemSettings = oledMenu.registerItem(root, MT_NULL, IMAGE_ITEM(OM_SYSTEM_PARAMETERS)); + oledMenu.registerItem(systemSettings, MT_CPRM_UPSCALE, IMAGE_ITEM(OM_CPRM_UPSCALE), settingsMenuHandler); + oledMenu.registerItem(systemSettings, MT_CPRM_FORCECOMPOSITE, IMAGE_ITEM(OM_CPRM_FORCECOMPOSITE), settingsMenuHandler); + oledMenu.registerItem(systemSettings, MT_CPRM_DISEXTCLK, IMAGE_ITEM(OM_CPRM_DISEXTCLK), settingsMenuHandler); + oledMenu.registerItem(systemSettings, MT_CPRM_ADCCALIBR, IMAGE_ITEM(OM_CPRM_ADCCALIBR), settingsMenuHandler); + // WiFi oledMenu.registerItem(root, MT_NULL, IMAGE_ITEM(OM_WIFI), wifiMenuHandler); - // Current Settings + // Current Output status oledMenu.registerItem(root, MT_NULL, IMAGE_ITEM(OM_CURRENT), currentSettingHandler); // Reset (Misc.) diff --git a/src/OLEDMenuImplementation.h b/src/OLEDMenuImplementation.h index 967c6e32..7033925a 100644 --- a/src/OLEDMenuImplementation.h +++ b/src/OLEDMenuImplementation.h @@ -34,6 +34,22 @@ enum MenuItemTag: uint16_t { MT_RESET_GBS, MT_RESTORE_FACTORY, MT_RESET_WIFI, + + MT_SSET_AUTOGAIN, + MT_SSET_SCANLINES, + MT_SSET_LINFILTR, + MT_SSET_PEAKING, + MT_SSET_STPRESP, + MT_SSET_FTL, + MT_SSET_FTLMETHOD, + MT_SSET_FULHEIGHT, + MT_SSET_F50FREQ60, + MT_SSET_DEINT_BOB_MAD, + + MT_CPRM_UPSCALE, + MT_CPRM_FORCECOMPOSITE, + MT_CPRM_DISEXTCLK, + MT_CPRM_ADCCALIBR, }; // declarations of resolutionMenuHandler, presetSelectionMenuHandler, presetsCreationMenuHandler, resetMenuHandler, currentSettingHandler, wifiMenuHandler bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav nav, bool isFirstTime); @@ -41,6 +57,7 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL bool presetsCreationMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav nav, bool isFirstTime); bool resetMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav nav, bool isFirstTime); bool currentSettingHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav nav, bool isFirstTime); +bool settingsMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav, bool isFirstTime); bool wifiMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav nav, bool isFirstTime); bool OSDHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMenuNav nav, bool isFirstTime); void initOLEDMenu(); diff --git a/src/OLEDMenuManager.h b/src/OLEDMenuManager.h index 5d50e4d9..c6389f4c 100644 --- a/src/OLEDMenuManager.h +++ b/src/OLEDMenuManager.h @@ -106,7 +106,6 @@ class OLEDMenuManager constexpr int16_t max_y = OLED_MENU_HEIGHT - (OM_SCREEN_SAVER_HEIGHT + versionStrHeight); uint16_t rx = rand() % max_x; uint16_t ry = rand() % max_y; - display->drawXbm(rx, ry, IMAGE_ITEM(OM_SCREEN_SAVER)); // display FW version versionX = OM_SCREEN_SAVER_WIDTH - versionStrWidth; if(versionX <= 0) @@ -115,6 +114,7 @@ class OLEDMenuManager versionX /= 2; versionX += rx; } + display->drawXbm(rx, ry, IMAGE_ITEM(OM_SCREEN_SAVER)); this->display->drawString(versionX, ry + versionStrHeight, versionStr); display->display(); } diff --git a/src/OLEDMenuTranslations.h b/src/OLEDMenuTranslations.h index acebe973..378de636 100644 --- a/src/OLEDMenuTranslations.h +++ b/src/OLEDMenuTranslations.h @@ -99,6 +99,421 @@ const unsigned char OM_PRESET [] PROGMEM = { }; +#define OM_ACTIVE_SLOT_PARAMETERS_WIDTH 86 +#define OM_ACTIVE_SLOT_PARAMETERS_HEIGHT 17 +const unsigned char OM_ACTIVE_SLOT_PARAMETERS [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x3c,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x66,0x2,0x8,0x0, +0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x42,0x2,0x8,0x0,0x0,0x0,0x0,0x0,0x8, +0x0,0x0,0x6,0xf2,0x18,0x1e,0x8b,0x5b,0xec,0xf3,0xd8,0xe3,0x1e,0x3c,0x12,0x9, +0x22,0x90,0x80,0x64,0x12,0x49,0x24,0x2,0x60,0x1a,0x9,0x22,0x9c,0xe0,0x64,0xf2, +0xc9,0x27,0xe,0x42,0x12,0x9,0x22,0x91,0x88,0x64,0x12,0x48,0x20,0x10,0x42,0x12, +0x9,0x22,0x99,0xc8,0x64,0x12,0x49,0x24,0x12,0x7c,0xf2,0x18,0x1e,0x9f,0xf8,0x64, +0xf2,0xd8,0x23,0x1e,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_AUTOGAIN_WIDTH 54 +#define OM_SSET_AUTOGAIN_HEIGHT 15 +const unsigned char OM_SSET_AUTOGAIN [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x80,0x7,0x20,0x0,0x18,0x0,0x1,0x40, +0xc,0x0,0x0,0x38,0x0,0x1,0x20,0x8,0x0,0x0,0x24,0x22,0x7b,0x20,0xc0,0x22, +0x1b,0x24,0x22,0x89,0x20,0xe,0x24,0x11,0x7e,0x22,0x8d,0x20,0x18,0x27,0x11,0x66, +0x22,0x89,0x20,0x58,0x24,0x11,0x42,0x32,0x89,0x60,0x58,0x26,0x11,0xc3,0x3e,0x7b, +0xc0,0xd7,0x27,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_SCANLINES_WIDTH 54 +#define OM_SSET_SCANLINES_HEIGHT 15 +const unsigned char OM_SSET_SCANLINES [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x0,0x20,0x1,0x0,0x0,0x66,0x0,0x0,0x20, +0x0,0x0,0x0,0x42,0x0,0x0,0x20,0x0,0x0,0x0,0x6,0x9e,0xc5,0x26,0xd9,0x3c, +0x1e,0x3c,0x2,0x48,0x24,0x89,0x44,0x2,0x60,0x1,0x4e,0x24,0x89,0x7c,0xe,0x42, +0x81,0x48,0x24,0x89,0x4,0x10,0x42,0xb2,0x4c,0x24,0x89,0x44,0x12,0x7c,0x9e,0x4f, +0x24,0x89,0x3c,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_LINFILTR_WIDTH 54 +#define OM_SSET_LINFILTR_HEIGHT 15 +const unsigned char OM_SSET_LINFILTR [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x2,0x1,0x0,0xf0,0x4b,0x0,0x0,0x2,0x0,0x0,0x10, +0x40,0x2,0x0,0x2,0x0,0x0,0x10,0x40,0x2,0x0,0x2,0xd9,0x3c,0x10,0x48,0xf6, +0x38,0x2,0x89,0x44,0xf0,0x49,0x12,0x9,0x2,0x89,0x7c,0x10,0x48,0xf2,0x9,0x2, +0x89,0x4,0x10,0x48,0x12,0x8,0x2,0x89,0x44,0x10,0x48,0x12,0x9,0x3e,0x89,0x3c, +0x10,0x48,0xf6,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_PEAKING_WIDTH 45 +#define OM_SSET_PEAKING_HEIGHT 17 +const unsigned char OM_SSET_PEAKING [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x3e,0x0,0x80,0x20,0x0,0x0,0x62,0x0,0x80,0x0,0x0,0x0,0x42,0x0, +0x80,0x0,0x0,0x0,0x42,0x1e,0x8b,0x24,0x9b,0xf,0x7e,0x22,0x90,0x22,0x91,0x8, +0x2,0x3e,0x9c,0x23,0x51,0x8,0x2,0x2,0x91,0x22,0x51,0x8,0x2,0x22,0x99,0x24, +0x91,0xc,0x2,0x1e,0x9f,0x2c,0x91,0xf,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0, +0x0,0x0,0x80,0x4,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_STPRESP_WIDTH 79 +#define OM_SSET_STPRESP_HEIGHT 17 +const unsigned char OM_SSET_STPRESP [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x66,0x2,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x42,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0xf6,0x78,0xe0, +0x1e,0xcf,0xe3,0xb1,0x79,0x1e,0x3c,0x12,0x89,0x20,0x22,0x41,0x24,0x12,0x9,0x22, +0x60,0xf2,0x89,0x20,0x3e,0x47,0x34,0x12,0x39,0x3e,0x42,0x12,0x88,0x20,0x2,0x48, +0x24,0x12,0x41,0x2,0x42,0x12,0x89,0x20,0x22,0x49,0x24,0x12,0x49,0x22,0x7c,0xf6, +0x78,0x20,0x1e,0xcf,0xe3,0x11,0x79,0x1e,0x0,0x0,0x8,0x0,0x0,0x40,0x0,0x0, +0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_FULHEIGHT_WIDTH 58 +#define OM_SSET_FULHEIGHT_HEIGHT 17 +const unsigned char OM_SSET_FULHEIGHT [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x80,0x4,0x1,0x40,0x0,0x1,0x0, +0x2,0x80,0x4,0x1,0x0,0x0,0x81,0x0,0x2,0x80,0x4,0x1,0x0,0x0,0x81,0x0, +0x2,0x91,0x4,0x9b,0x47,0x3e,0x9b,0x1,0x3e,0x91,0x4,0x91,0x48,0x22,0x91,0x0, +0x2,0x91,0x4,0x91,0x4f,0x21,0x91,0x0,0x2,0x91,0x4,0x91,0x40,0x21,0x91,0x0, +0x2,0x99,0x4,0x91,0x48,0x32,0x91,0x0,0x2,0x9f,0x4,0x91,0x47,0x3e,0x91,0x1, +0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x12,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_F50FREQ60_WIDTH 163 +#define OM_SSET_F50FREQ60_HEIGHT 17 +const unsigned char OM_SSET_F50FREQ60 [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e, +0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x1,0x20,0x0, +0xe0,0x83,0x21,0x0,0x2,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0xb0, +0x78,0x4,0x1,0x10,0x0,0x20,0x86,0x21,0x0,0x2,0x0,0x0,0x0,0x8,0x0,0x0, +0x0,0x0,0x0,0x0,0x10,0x89,0x4,0x1,0x10,0x0,0x20,0x84,0x23,0x0,0x2,0x8f, +0x7b,0x1e,0xd8,0x3d,0x3e,0x91,0xc7,0xe6,0x4d,0x10,0x88,0x4,0x79,0xb0,0xc7,0x21, +0x44,0x22,0x0,0x3e,0x91,0x8,0x22,0x48,0x44,0x22,0x91,0x48,0x24,0x48,0xf0,0x88, +0xfc,0x61,0x90,0x48,0xe0,0x47,0x22,0x0,0x82,0x91,0x4,0x3e,0x48,0x7c,0x21,0x91, +0x4f,0x14,0x48,0x10,0x89,0x4,0x21,0xd0,0x48,0x20,0xe0,0x27,0x0,0x2,0x91,0x4, +0x2,0x48,0x4,0x21,0x91,0x40,0x14,0x30,0x10,0x89,0x4,0x11,0x90,0x48,0x20,0x60, +0x26,0x0,0x2,0x91,0xc8,0x22,0x48,0x44,0x22,0x99,0x48,0x24,0x33,0x10,0x89,0x4, +0x9,0x90,0x48,0x20,0x20,0x24,0x0,0x2,0x8f,0x78,0x1e,0x48,0x3c,0x3e,0x9f,0x47, +0xe4,0x31,0xf0,0x70,0x4,0x7d,0x90,0x47,0x20,0x30,0xec,0x3,0x0,0x0,0x0,0x0, +0x0,0x0,0x20,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0, +0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_FTL_WIDTH 92 +#define OM_SSET_FTL_HEIGHT 15 +const unsigned char OM_SSET_FTL [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x0,0xf8,0xb,0x0,0x0,0x4,0x0,0x40,0x0, +0x2,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x4,0x0,0x40,0x0,0x2,0x0,0x0,0x0, +0x40,0x0,0x0,0x0,0x4,0x0,0x40,0x0,0x2,0xb7,0xd8,0xe7,0x41,0xc8,0x3e,0xf, +0x4,0x1e,0x4f,0x2,0x3e,0x1,0xc9,0x24,0x42,0x48,0x26,0x11,0x4,0x22,0x41,0x1, +0x2,0xc1,0xc9,0xe4,0x43,0x48,0x26,0x1f,0x4,0xa3,0xc0,0x1,0x2,0x11,0xc9,0x24, +0x40,0x48,0x26,0x1,0x4,0xa2,0x40,0x1,0x2,0x91,0xc9,0x24,0x42,0x48,0x26,0x11, +0x4,0x22,0x59,0x2,0x2,0xf1,0xc9,0xe4,0x41,0x48,0x26,0xf,0x7c,0x1e,0x4f,0x6, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_FTLMETHOD_WIDTH 174 +#define OM_SSET_FTLMETHOD_HEIGHT 15 +const unsigned char OM_SSET_FTLMETHOD [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x3c,0x0,0x4,0x40,0x0,0x3f,0x0,0x0,0x0,0xfc,0x5,0x0,0x0,0x2, +0x0,0x20,0x40,0x20,0x0,0x4,0x0,0x10,0x66,0x0,0x20,0x40,0x0,0x1,0x0,0x0, +0x0,0x20,0x0,0x0,0x0,0x2,0x0,0x20,0xc0,0x30,0x80,0x4,0x0,0x10,0x42,0x0, +0x20,0x40,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x2,0x0,0x20,0xc0,0x30, +0x80,0x4,0x0,0x10,0x6,0x99,0x64,0xcf,0x6,0x81,0x5b,0xec,0xf3,0x20,0x64,0x9f, +0x7,0x2,0x8f,0x27,0x41,0x29,0x8f,0x6d,0x1e,0x1f,0x3c,0x9a,0x24,0x41,0x4,0x9f, +0x80,0x64,0x12,0x21,0x24,0x93,0x8,0x2,0x91,0xa0,0x40,0x29,0x91,0x44,0x22,0x11, +0x60,0xaa,0xa4,0x40,0x4,0x81,0xe0,0x64,0xf2,0x21,0x24,0x93,0xf,0x82,0x51,0xe0, +0x40,0x29,0x9f,0x44,0xa3,0x10,0x42,0x6a,0xa4,0x40,0x4,0x81,0x88,0x64,0x12,0x20, +0x24,0x93,0x0,0x2,0x51,0xa0,0x40,0x22,0x81,0x44,0xa2,0x10,0x42,0x66,0x24,0x59, +0x4,0x81,0xc8,0x64,0x12,0x21,0x24,0x93,0x8,0x2,0x91,0x2c,0x41,0x26,0x91,0x44, +0x22,0x11,0x7c,0x64,0x64,0x4f,0x4,0x81,0xf8,0x64,0xf2,0x20,0x24,0x93,0x7,0x3e, +0x8f,0x27,0x43,0x26,0x8f,0x45,0x1e,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SSET_DEINT_BOB_MAD_WIDTH 112 +#define OM_SSET_DEINT_BOB_MAD_HEIGHT 17 +const unsigned char OM_SSET_DEINT_BOB_MAD [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x4,0x40,0x0,0x1f, +0x0,0x1,0x0,0x0,0x1,0x0,0x1,0x0,0x66,0x0,0x20,0x40,0x0,0x31,0x0,0x0, +0x4,0x0,0x1,0x0,0x0,0x0,0x42,0x0,0x20,0x40,0x0,0x61,0x0,0x0,0x4,0x0, +0x1,0x0,0x0,0x0,0x6,0x99,0x64,0xcf,0x6,0x41,0x1e,0xd9,0xec,0x71,0x59,0x3c, +0xd9,0x7c,0x3c,0x9a,0x24,0x41,0x4,0x41,0x22,0x89,0x24,0x12,0x81,0x4,0x89,0x44, +0x60,0xaa,0xa4,0x40,0x4,0x41,0x3e,0x89,0xe4,0x13,0xe1,0x2,0x89,0x42,0x42,0x6a, +0xa4,0x40,0x4,0x41,0x2,0x89,0x24,0x10,0x89,0x2,0x89,0x42,0x42,0x66,0x24,0x59, +0x4,0x21,0x22,0x89,0x24,0x12,0xc9,0x64,0x89,0x64,0x7c,0x64,0x64,0x4f,0x4,0x1f, +0x1e,0x89,0xec,0x11,0xf9,0x3c,0x89,0x7c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_ENABLED_WIDTH 46 +#define OM_ENABLED_HEIGHT 15 +const unsigned char OM_ENABLED [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x7e,0x0,0x0,0x40,0x0,0x10,0x2,0x0,0x80,0x40,0x0,0x10,0x2,0x0, +0x80,0x40,0x0,0x10,0x2,0x36,0x8b,0x4f,0x1e,0x1f,0x7e,0x22,0x90,0x48,0x22,0x11, +0x2,0x22,0x9c,0x48,0xbe,0x10,0x2,0x22,0x91,0x48,0x82,0x10,0x2,0x22,0x99,0x48, +0x22,0x11,0x7e,0x22,0x9f,0x47,0x1e,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_DISABLED_WIDTH 49 +#define OM_DISABLED_HEIGHT 15 +const unsigned char OM_DISABLED [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x3e,0x4,0x0,0x0,0x2,0x80,0x0,0x62,0x0,0x0,0x4, +0x2,0x80,0x0,0xc2,0x0,0x0,0x4,0x2,0x80,0x0,0x82,0xe4,0x59,0x7c,0xf2,0xf8, +0x0,0x82,0x24,0x80,0x44,0x12,0x89,0x0,0x82,0xe4,0xe0,0x44,0xf2,0x85,0x0,0x82, +0x4,0x89,0x44,0x12,0x84,0x0,0x42,0x24,0xc9,0x44,0x12,0x89,0x0,0x3e,0xe4,0xf9, +0x3c,0xf2,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_BOB_ENABLED_WIDTH 70 +#define OM_BOB_ENABLED_HEIGHT 15 +const unsigned char OM_BOB_ENABLED [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x0, +0x0,0x40,0x0,0x10,0x62,0x0,0x1,0x0,0x0,0x80,0x40,0x0,0x10,0x42,0x0,0x1, +0x0,0x0,0x80,0x40,0x0,0x10,0x42,0x1e,0x1f,0x3c,0x36,0x8b,0x4f,0x1e,0x1f,0x3e, +0x22,0x11,0x44,0x22,0x90,0x48,0x22,0x11,0x42,0x23,0x11,0x7c,0x22,0x9c,0x48,0xbe, +0x10,0x42,0x22,0x11,0x4,0x22,0x91,0x48,0x82,0x10,0x42,0x22,0x11,0x44,0x22,0x99, +0x48,0x22,0x11,0x3e,0x1e,0xf,0x3c,0x22,0x9f,0x47,0x1e,0x1f,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_MAD_ENABLED_WIDTH 136 +#define OM_MAD_ENABLED_HEIGHT 17 +const unsigned char OM_MAD_ENABLED [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x2,0x1,0x20,0x0,0x0,0x18,0x20,0x0,0x0,0x2,0x0,0x0,0x0, +0x0,0x0,0x1,0x40,0x86,0x1,0x4,0x0,0x0,0x18,0x20,0x0,0x40,0x0,0x0,0x0, +0x0,0x0,0x2,0x1,0x40,0x86,0x1,0x4,0x0,0x0,0x38,0x20,0x0,0x40,0x0,0x0, +0x0,0x0,0x0,0x2,0x1,0x40,0x4a,0x79,0x2c,0x8f,0xd,0x24,0x3e,0x8b,0xc7,0x9a, +0x3d,0xf0,0xd8,0x2c,0x3e,0x79,0x7c,0x4a,0x89,0x24,0x91,0x8,0x24,0x22,0x90,0x48, +0x92,0x44,0x10,0x89,0x40,0x22,0x89,0x44,0x4a,0x8d,0xa4,0x91,0x8,0x7e,0x21,0x9c, +0x48,0x92,0x7c,0xf0,0x89,0x70,0x22,0xf9,0x42,0x12,0x89,0x24,0x91,0x8,0x66,0x21, +0x91,0x48,0x52,0x4,0x10,0x88,0x44,0x22,0x9,0x42,0x32,0x89,0x24,0x91,0x8,0x42, +0x22,0x99,0x48,0x62,0x44,0x10,0x89,0x64,0x22,0x89,0x44,0x32,0x79,0x2c,0x8f,0x8, +0xc3,0x3e,0x9f,0xc7,0x62,0x3c,0xf0,0x88,0x7c,0x1e,0x79,0x7c,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0, + +}; + +#define OM_FTL_METHOD_0_WIDTH 74 +#define OM_FTL_METHOD_0_HEIGHT 15 +const unsigned char OM_FTL_METHOD_0 [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x8,0x0,0x8,0xf0,0xf0,0xfc,0x1,0x80,0x0,0x2,0x8,0x0,0x8,0x99,0x99, +0x21,0x0,0x80,0x0,0x2,0x8,0x0,0x8,0x9,0x9,0x21,0x0,0xb3,0x3d,0xb6,0x8, +0x8,0x90,0x19,0x18,0x20,0x0,0x92,0x44,0x2,0x9,0x8,0x90,0xf0,0xf0,0x20,0x0, +0x92,0x46,0xc2,0x9,0x8,0x90,0x80,0x81,0x21,0x0,0x8a,0x44,0x12,0x9,0x3e,0xe0, +0x8,0x9,0x21,0x0,0x8c,0x44,0x92,0x9,0x8,0x60,0x8,0x9,0x21,0x0,0x8c,0x3d, +0xf6,0x9,0x8,0x60,0xf0,0xf1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_FTL_METHOD_1_WIDTH 55 +#define OM_FTL_METHOD_1_HEIGHT 17 +const unsigned char OM_FTL_METHOD_1 [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x80,0x0,0x80,0x0,0x2,0x8, +0x0,0x80,0x0,0x80,0x0,0x2,0x8,0x0,0x80,0x0,0xb3,0x3d,0xb6,0x8,0x1e,0x9b, +0x26,0x92,0x44,0x2,0x9,0x22,0x91,0x24,0x92,0x46,0xc2,0x9,0x23,0x91,0x24,0x8a, +0x44,0x12,0x9,0x22,0x91,0x18,0x8c,0x44,0x92,0x9,0x22,0x91,0x18,0x8c,0x3d,0xf6, +0x9,0x1e,0x91,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0, +0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_SYSTEM_PARAMETERS_WIDTH 105 +#define OM_SYSTEM_PARAMETERS_HEIGHT 17 +const unsigned char OM_SYSTEM_PARAMETERS [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x66,0x0,0x20,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x40,0x0,0x0,0x0,0x42,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x40,0x0,0x0,0x0,0x6,0x93,0x67,0x8f,0x7d,0xf0,0x58,0xdc,0x62,0x9f,0xc7,0x1e, +0xf7,0x0,0x3c,0x92,0x20,0x91,0x4c,0x10,0x81,0x4,0x24,0x93,0x48,0x22,0x11,0x0, +0x60,0x92,0x23,0x9f,0x4c,0x10,0xe1,0x4,0x27,0x93,0x4f,0x3e,0x71,0x0,0x42,0xc, +0x24,0x81,0x4c,0x10,0x89,0x44,0x24,0x93,0x40,0x2,0x81,0x0,0x42,0x8c,0x24,0x91, +0x4c,0x10,0xc9,0x44,0x26,0x93,0x48,0x22,0x91,0x0,0x7c,0x8c,0x67,0x8f,0x4c,0xf0, +0xf8,0xc4,0x27,0x93,0xc7,0x1e,0xf1,0x0,0x0,0x4,0x0,0x0,0x0,0x10,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_CPRM_UPSCALE_WIDTH 161 +#define OM_CPRM_UPSCALE_HEIGHT 17 +const unsigned char OM_CPRM_UPSCALE [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x82, +0x0,0x0,0x0,0x90,0x0,0x0,0x10,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x40,0x0, +0x8,0x0,0x0,0x0,0x82,0x0,0x0,0x0,0x10,0x0,0x0,0x8,0x0,0x10,0x0,0x0, +0x0,0x0,0x0,0x40,0x0,0x1,0x0,0x0,0x0,0x82,0x0,0x0,0x0,0x10,0x0,0x0, +0x8,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x1,0x0,0x0,0x0,0x82,0x3c, +0x9e,0x67,0x91,0x6c,0x3e,0xd8,0xe3,0x10,0x78,0x32,0xc1,0x3d,0x9e,0x47,0x22,0xcb, +0x63,0xf3,0x0,0x82,0x44,0x82,0x0,0x92,0x44,0x22,0x48,0x24,0x10,0x88,0x34,0x41, +0x44,0x82,0x48,0x22,0x49,0x24,0x12,0x0,0x82,0x44,0x4e,0x80,0x93,0x44,0x21,0x68, +0x24,0x10,0x8c,0x54,0x41,0x7c,0xce,0x48,0x22,0x69,0x24,0x72,0x0,0x82,0x44,0x50, +0x20,0x92,0x44,0x21,0x48,0x24,0x10,0x88,0xd4,0x40,0x4,0x90,0x48,0x22,0x49,0x24, +0x82,0x0,0x46,0x44,0x92,0x2c,0x93,0x44,0x32,0x48,0x24,0x10,0x88,0xcc,0x40,0x44, +0x92,0x48,0x32,0x49,0x24,0x92,0x0,0x7c,0x3c,0x9e,0xe7,0x93,0x44,0x3e,0xc8,0x23, +0xf0,0x79,0xc8,0x40,0x3c,0x9e,0x47,0x3e,0xcb,0x23,0xf2,0x0,0x0,0x4,0x0,0x0, +0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_CPRM_FORCECOMPOSITE_WIDTH 195 +#define OM_CPRM_FORCECOMPOSITE_HEIGHT 17 +const unsigned char OM_CPRM_FORCECOMPOSITE [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0xe0,0x3,0x8f,0x8f,0x20,0x1,0xe0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x4,0x1,0x20,0x8c, +0x98,0x98,0x20,0x21,0x12,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x0,0x0, +0x0,0x0,0x0,0x2,0x0,0x4,0x1,0x20,0x48,0x90,0x90,0x20,0x21,0xa,0x2,0x0, +0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x8f,0x7b,0x1e,0x78,0x44,0xf6,0x88,0xc,0x7b, +0x20,0x4c,0x80,0x90,0x20,0x32,0x8,0xf0,0xd8,0xe7,0xf1,0xd8,0x3c,0x36,0x3,0x3e, +0x91,0x8,0x22,0x88,0x44,0x12,0x89,0x4,0x89,0xe0,0x47,0x9c,0x8f,0x3f,0x12,0x9, +0x10,0xc9,0x24,0x12,0x89,0x44,0x22,0x1,0x82,0x91,0x4,0x3e,0x8c,0x44,0x12,0x89, +0x4,0x8d,0x20,0x44,0xb0,0x90,0x20,0x12,0x9,0x18,0xc9,0x24,0x1a,0x89,0x7c,0x22, +0x1,0x2,0x91,0x4,0x2,0x88,0x44,0x12,0x89,0x4,0x89,0x20,0x48,0xb0,0x90,0x20, +0x1c,0x8,0x12,0xc9,0x24,0x12,0x89,0x4,0x22,0x1,0x2,0x91,0xc8,0x22,0x88,0x64, +0x12,0xc9,0x4,0x89,0x20,0xc8,0xb0,0x90,0x20,0x8c,0x18,0x13,0xc9,0x24,0x12,0x89, +0x44,0x22,0x1,0x2,0x8f,0x78,0x1e,0x78,0x7c,0xf6,0xf8,0xc,0x7b,0x20,0x88,0xaf, +0x8f,0x20,0x8c,0xf0,0xf1,0xc8,0xe4,0xf1,0x88,0x3c,0x22,0x3,0x0,0x0,0x0,0x0, +0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_CPRM_DISEXTCLK_WIDTH 137 +#define OM_CPRM_DISEXTCLK_HEIGHT 15 +const unsigned char OM_CPRM_DISEXTCLK [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x0,0x0,0x8,0x38,0x4,0x0,0x4, +0xe0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x80,0x0,0x0,0x0,0x8,0x44,0x4, +0x0,0x4,0x10,0x3,0x0,0x0,0x0,0x10,0x0,0x0,0x2,0x80,0x0,0x0,0x0,0x8, +0x82,0x4,0x0,0x4,0x8,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x2,0x92,0x3d,0x6e, +0xb3,0x8,0x2,0xe4,0xf1,0x24,0x8,0xf0,0xd8,0x3c,0x6e,0xb1,0xc7,0x1,0x7e,0x8c, +0x44,0x22,0x2,0x9,0x2,0x24,0x12,0x14,0x88,0x13,0x89,0x44,0x2,0x92,0x48,0x0, +0x2,0x8c,0x7c,0x22,0xc2,0x9,0x2,0x34,0xa,0x1c,0x8,0xf6,0x89,0x7c,0x82,0xd3, +0x48,0x0,0x2,0x8c,0x4,0x22,0x12,0x9,0x82,0x24,0xa,0x14,0x8,0x16,0x88,0x4, +0x22,0x92,0x48,0x0,0x2,0x92,0x44,0x22,0x92,0x9,0xc6,0x24,0x92,0x25,0x18,0x16, +0x89,0x44,0x22,0x93,0x48,0x0,0x7e,0x92,0x3d,0x22,0xf2,0x9,0x7c,0xe4,0xf1,0x64, +0xf0,0xf5,0x88,0x3c,0xe2,0xb3,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + +}; + +#define OM_CPRM_ADCCALIBR_WIDTH 86 +#define OM_CPRM_ADCCALIBR_HEIGHT 15 +const unsigned char OM_CPRM_ADCCALIBR [] PROGMEM = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x18,0x3e,0x70,0x0,0x0,0x48,0x0,0x0,0x40,0x0,0x0,0x18,0x62,0x88,0x0, +0x0,0x8,0x2,0x0,0x8,0x0,0x0,0x38,0xc2,0x4,0x1,0x0,0x8,0x2,0x0,0x8, +0x0,0x0,0x24,0x82,0x4,0xc0,0xb3,0x48,0x3e,0xb7,0x58,0x1e,0x1b,0x24,0x82,0x4, +0x40,0x0,0x49,0x22,0x1,0x49,0x22,0x11,0x7e,0x82,0x4,0x20,0xc0,0x49,0x22,0xc1, +0x49,0x23,0x11,0x66,0x82,0x4,0x21,0x10,0x49,0x22,0x11,0x49,0x22,0x11,0x42,0x42, +0x8c,0x41,0x96,0x49,0x22,0x91,0x49,0x22,0x11,0xc3,0x3e,0xf8,0xc0,0xf3,0x49,0x1e, +0xf1,0x59,0x1e,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0, + +}; + #define OM_RESET_RESTORE_WIDTH 84 #define OM_RESET_RESTORE_HEIGHT 15 const unsigned char OM_RESET_RESTORE [] PROGMEM = { @@ -170,21 +585,19 @@ const unsigned char OM_RESTORE_FACTORY [] PROGMEM = { }; -#define OM_CURRENT_WIDTH 81 +#define OM_CURRENT_WIDTH 71 #define OM_CURRENT_HEIGHT 17 const unsigned char OM_CURRENT [] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0xc4,0x0,0x2,0x0,0x4,0x40,0x0,0x1,0x0,0x82,0x0,0x2, +0x0,0x4,0x40,0x0,0x1,0x0,0x2,0x45,0xf6,0x88,0xc,0xcf,0x16,0x8b,0x3c,0x3, +0x45,0x12,0x89,0x4,0x41,0x20,0x89,0x4,0x2,0x45,0x12,0x89,0x4,0x47,0x38,0x89, +0x1c,0x82,0x45,0x12,0x89,0x4,0x48,0x22,0x89,0x20,0x86,0x64,0x12,0xc9,0x4,0x49, +0x32,0xc9,0x24,0x7c,0x7c,0xf6,0xf8,0xc,0xcf,0x3e,0xfb,0x3c,0x0,0x0,0x10,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x38,0x0,0x0,0x0,0x0,0x80,0x3,0x0,0x0,0x0,0x0,0x44,0x0,0x0,0x0, -0x80,0x40,0xc,0x20,0x0,0x40,0x0,0x82,0x0,0x0,0x0,0x80,0x20,0x8,0x20,0x0, -0x40,0x0,0x2,0x44,0xee,0x1e,0x9b,0x21,0x50,0x64,0x8f,0xc8,0x0,0x2,0x44,0x22, -0x22,0x91,0x30,0x50,0x24,0x91,0x48,0x0,0x2,0x44,0x22,0x3e,0x91,0x20,0x50,0x24, -0x91,0x48,0x0,0x82,0x44,0x22,0x2,0x91,0x20,0x58,0x24,0x91,0x48,0x0,0xc6,0x64, -0x22,0x22,0x91,0x60,0x48,0x26,0x91,0x4c,0x0,0x7c,0x7c,0x22,0x1e,0x91,0xc1,0xc7, -0x67,0x8f,0xcf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, }; diff --git a/src/wserver.cpp b/src/wserver.cpp index 14c2377d..4835e843 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Monday, 10th June 2024 4:21:05 pm # +# Last Modified: Tuesday, 11th June 2024 1:38:34 pm # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -2025,7 +2025,7 @@ void handleUserCommand() switch (userCommand) { - case '0': + case '0': // force increase frequency to 60Hz for PAL 50Hz _WS(F("pal force 60hz ")); uopt->PalForce60 = !uopt->PalForce60; if (uopt->PalForce60 == 1) @@ -2201,6 +2201,12 @@ void handleUserCommand() } break; case 'i': // toggle active frametime lock method + // enable FTL if disabled + if (uopt->enableFrameTimeLock == 0) + { + _WSN(F("FTL on")); + uopt->enableFrameTimeLock = 1; + } if (!rto->extClockGenDetected) { FrameSync::reset(uopt->frameTimeLockMethod); diff --git a/translation.hdwui.json b/translation.hdwui.json index 4a9a14fb..7a62832a 100644 --- a/translation.hdwui.json +++ b/translation.hdwui.json @@ -35,7 +35,122 @@ "OM_PRESET": { "en": "Slots", "es": "Perfiles", - "ru": "Профили настроек" + "ru": "Профили" + }, + "OM_ACTIVE_SLOT_PARAMETERS": { + "en": "Slot parameters", + "es": "Parameters de Perfil", + "ru": "Настройки Профиля" + }, + "OM_SSET_AUTOGAIN": { + "en": "Auto Gain", + "es": "Aumento automatico", + "ru": "Авто. усиление" + }, + "OM_SSET_SCANLINES": { + "en": "Scanlines", + "es": "Scanlines", + "ru": "Строчность" + }, + "OM_SSET_LINFILTR": { + "en": "Line Filter", + "es": "Filtro lineal", + "ru": "Строчный фильтр" + }, + "OM_SSET_PEAKING": { + "en": "Peaking", + "es": "Sensibilidad", + "ru": "Чувствительность" + }, + "OM_SSET_STPRESP": { + "en": "Step response", + "es": "Respuesta Escalonada", + "ru": "Ступенчатая хар-ка" + }, + "OM_SSET_FULHEIGHT": { + "en": "Full height", + "es": "Estirar en altura", + "ru": "Растягивать по-высоте" + }, + "OM_SSET_F50FREQ60": { + "en": "Force frequency 60Hz for PAL", + "es": "Forzar frequencia de 60Hz para", + "ru": "Повышать частоту до 60Гц для PAL" + }, + "OM_SSET_FTL": { + "en": "FrameTime Lock", + "es": "Cambiar bloqueo de FrameTime", + "ru": "Блокировка FrameTime" + }, + "OM_SSET_FTLMETHOD": { + "en": "Switch FrameTime Lock Method", + "es": "Cambiar método de bloqueo de FrameTime", + "ru": "Переключить метод блокировки FrameTime" + }, + "OM_SSET_DEINT_BOB_MAD": { + "en": "Switch Deinterlacing", + "es": "Cambiar método de Desentrelazado", + "ru": "Переключить Деинтерлейсинг" + }, + "OM_ENABLED": { + "en": "Enabled", + "es": "Encendido", + "ru": "Включено" + }, + "OM_DISABLED": { + "en": "Disabled", + "es": "Apagado", + "ru": "Выключено" + }, + "OM_BOB_ENABLED": { + "en": "Bob enabled", + "es": "método Bob activado", + "ru": "Bob-метод" + }, + "OM_MAD_ENABLED": { + "en": "Motion Adaptive enabled", + "es": "Motion Adaptive activado", + "ru": "Motion Adaptive" + }, + "OM_FTL_METHOD_0": { + "en": "vtotal + VSST", + "es": "vtotal y VSST", + "ru": "vtotal и VSST" + }, + "OM_FTL_METHOD_1": { + "en": "vtotal only", + "es": "solo vtotal", + "ru": "только vtotal" + }, + "OM_SYSTEM_PARAMETERS": { + "en": "System parameters", + "es": "Configuración de Sistema", + "ru": "Общесистемные настройки", + "zh": "" + }, + "OM_CPRM_UPSCALE": { + "en": "Upscaling for Low resolutions", + "es": "Usar Ampliación (Upscaling) para resoluciones bajas", + "ru": "Использовать масштабирование (Upsacale)", + "zh": "" + }, + "OM_CPRM_FORCECOMPOSITE": { + "en": "Force output to RGBHV/Component", + "es": "Forzar salida a RGBHV/Componente", + "ru": "Изменять выход на RGBHV/Компонентный", + "zh": "" + }, + "OM_CPRM_DISEXTCLK": { + "en": "External Clock Generator", + "es": "Generador de reloj externo", + "ru": "Внешний тактовый генератор", + "zh": "" + }, + "OM_CPRM_ADCCALIBR": { + "en": "ADC calibration", + "es": "Calibración del CAD", + "ru": "Калибровка АЦП", + "zh": "" }, "OM_RESET_RESTORE": { "en": "Reset / Restore", @@ -58,8 +173,8 @@ "ru": "Восстановить заводские настройки" }, "OM_CURRENT": { - "en": "Current Output", - "es": "Salida actual", + "en": "Output status", + "es": "Señal de salida", "ru": "Выходной сигнал" }, "OM_WIFI": { diff --git a/translation.webui.json b/translation.webui.json index 89c88421..913914ac 100644 --- a/translation.webui.json +++ b/translation.webui.json @@ -201,6 +201,7 @@ + "FULL_HEIGHT_SWITCH": { "en": "Full Height", "es": "Estirar en altura", @@ -310,8 +311,8 @@ "zh": "" }, "SYSTEM_PREFERENCES_LEGEND": { - "en": "Common parameters", - "es": "Configuración común", + "en": "System parameters", + "es": "Configuración de Sistema", "ru": "Общесистемные настройки", "zh": "" }, From 017dff5d2a1457fa9ac86914ea0099b7de3ce728 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Tue, 11 Jun 2024 18:43:25 -0600 Subject: [PATCH 33/41] TEST: fix: OLED menu items vertical offset calculation --- README.md | 6 +++--- configure.json | 1 + gbs-control.ino | 2 +- public/src/index.html.tpl | 8 ++++++++ public/src/style.css | 32 +++++++++++++++++++++++++---- src/OLEDMenuItem.cpp | 8 +++++--- src/OLEDMenuManager.cpp | 28 +++++++++++++++++-------- src/OLEDMenuManager.h | 43 ++++++++++++++++++++++----------------- src/options.h | 5 ++++- 9 files changed, 93 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index efe3cd10..6641dfae 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ If your objective is to make changes to the Project, please use VSCode + Platfor 1. Clone the repository, open it with your VSCode and press Build/Upload. It's never been easier :) >***Please note:***\ -Platformio IDE enables upload speed limitation on ESP8266. Upload process at any higher upload speed will fail. +Platformio IDE enables upload speed limitation on ESP8266. Upload process at any higher upload speed may fail. ### Using Arduino IDE @@ -274,7 +274,7 @@ While managing Slots the following principles must be taken into account: The following diagram represents the structure of system and user configurations: -![gbs-control user configuration structure](./doc/img/Slot-Preset-prefs.png) +![gbs-control user configuration structure](./doc/img/slot-preset-prefs.png) ### Vocabulary @@ -301,7 +301,7 @@ ESP8266 version of the factory built GBSC, boots into firmware upload mode by pr - [ ] Invert Sync issue - [ ] PassThrough doesn't work - [ ] preferScalingRgbhv doesn't work (?) -- [ ] fix OLEDMenu items list offset +- [x] fix OLEDMenu items list offset - [x] feature request [#553] - [x] creation/destruction OLEDMenuItem procedure diff --git a/configure.json b/configure.json index 3364ac4b..ac3f6b11 100644 --- a/configure.json +++ b/configure.json @@ -7,6 +7,7 @@ "use_new_oled_menu": 1, "reverse_rotary_encoder_for_osd": 0, "reverse_rotary_encoder_for_oled_menu": 0, + "oled_menu_items_per_screen": 4, "oled_menu_max_items_num": 64, "oled_menu_max_subitems_num": 16, "oled_menu_max_depth": 8, diff --git a/gbs-control.ino b/gbs-control.ino index 84970452..cabeffea 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -1,7 +1,7 @@ //! This is autogenerated file //! Please do not edit if you're using PlatformIO -#define VERSION "24.0610" +#define VERSION "24.0611" /* ########################################################################### diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index bb5d8783..7c5cdae3 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -844,6 +844,14 @@ diff --git a/public/src/style.css b/public/src/style.css index d8590a62..5bf58b42 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -126,11 +126,25 @@ body { border-radius: 0 0 16px 16px; } +.gbs-scroll__footer div:first-child { + text-align: left; + padding: 5px 0 8px 35px; + position: relative; +} + +.gbs-scroll__footer div:first-child svg { + position: absolute; + margin: 2px 0 0 -20px; +} + +.gbs-scroll__footer div:last-child { + text-align: right; + padding: 5px 15px 8px; +} + .gbs-scroll__footer > div { /* box-shadow: 0 0px 30px -10px rgba(var(--color-primary-rgba), .9); */ - padding: 5px 10px 8px; - width: 100%; - text-align: right; + width: 50%; font-size: 10px; font-weight: bold; line-height: normal; @@ -161,7 +175,7 @@ body { } .gbs-menu__button-group { - border: 1px dashed rgba(var(--color-primary-rgba), .5); + border: 1px dashed rgba(var(--color-primary-rgba), .65); /* padding: 2px; */ width: 60%; display:flex; @@ -173,6 +187,16 @@ body { width: 15% !important; } +a { + color: rgba(var(--color-secondary-rgba), 0.7); + text-decoration: none; + cursor: pointer; +} + +a:hover { + text-decoration: underline; +} + /* buttons */ .gbs-button { appearance: none; diff --git a/src/OLEDMenuItem.cpp b/src/OLEDMenuItem.cpp index fcf9f823..2a4723b5 100644 --- a/src/OLEDMenuItem.cpp +++ b/src/OLEDMenuItem.cpp @@ -3,7 +3,7 @@ void OLEDMenuItem::calculate() { if(!this->parent){ - return; // root + return; // root } if (this->str) { size_t strLength = strlen(this->str); @@ -48,17 +48,19 @@ void OLEDMenuItem::calculate() // decide which page this item belongs to uint16_t lastLineAt = 0; - for (int i = 0; i < parent->numSubItem - 1; ++i) { + uint8_t i = 0; + while (i < parent->numSubItem - 1) { // find all items on the last page, see if it fits // put it on the next page if not. // last item in parent->numSubItem is always "this" OLEDMenuItem *item = parent->subItems[i]; + i++; if (item->pageInParent != parent->maxPageIndex) { continue; } lastLineAt += item->imageHeight; } - lastLineAt += imageHeight; // self + lastLineAt += this->imageHeight; // self if (lastLineAt <= OLED_MENU_USABLE_AREA_HEIGHT) { this->pageInParent = parent->maxPageIndex; diff --git a/src/OLEDMenuManager.cpp b/src/OLEDMenuManager.cpp index daa98a06..820e8e9c 100644 --- a/src/OLEDMenuManager.cpp +++ b/src/OLEDMenuManager.cpp @@ -57,7 +57,6 @@ OLEDMenuItem *OLEDMenuManager::allocItem() break; } // if (!this->allItems[i].used) { - // // FIXME // memset(&this->allItems[i], 0, sizeof(OLEDMenuItem)); // newItem = &this->allItems[i]; // newItem->used = true; @@ -67,7 +66,7 @@ OLEDMenuItem *OLEDMenuManager::allocItem() } if (newItem == nullptr) { // char msg[40]; - _DBGF(PSTR("reached max. menu items: %d"), OLED_MENU_MAX_ITEMS_NUM); + _DBGF(PSTR("reached max. menu items: %d\n"), OLED_MENU_MAX_ITEMS_NUM); // sprintf(msg, PSTR("Maximum number of items reached: %d"), OLED_MENU_MAX_ITEMS_NUM); // panicAndDisable(msg); } @@ -96,6 +95,7 @@ OLEDMenuItem *OLEDMenuManager::registerItem( OLEDDISPLAY_TEXT_ALIGNMENT alignment) { OLEDMenuItem *newItem = allocItem(); + constexpr uint8_t maxMenuItemHeight = OLED_MENU_USABLE_AREA_HEIGHT / (OLED_MENU_ITEMS_PER_SCREEN - 1); if(newItem == nullptr) goto register_image_item_end; @@ -103,7 +103,10 @@ OLEDMenuItem *OLEDMenuManager::registerItem( alignment = OLEDDISPLAY_TEXT_ALIGNMENT::TEXT_ALIGN_CENTER; } newItem->imageWidth = imageWidth; - newItem->imageHeight = imageHeight; + + // fixing the height of image items (at the first row is always a menu control item) + newItem->imageHeight = (imageHeight > maxMenuItemHeight) ? maxMenuItemHeight : imageHeight; + newItem->xbmImage = xbmImage; newItem->tag = tag; @@ -154,9 +157,13 @@ OLEDMenuItem *OLEDMenuManager::registerItem( newItem->alignment = alignment; if (parent) { if (parent->numSubItem == OLED_MENU_MAX_SUBITEMS_NUM) { - char msg[50]; - sprintf(msg, PSTR("Maximum number of sub items reached: %d"), OLED_MENU_MAX_SUBITEMS_NUM); - panicAndDisable(msg); + _DBGF(PSTR("Maximum number of sub items reached: %d\n"), OLED_MENU_MAX_SUBITEMS_NUM); + delete newItem; + newItem = nullptr; + goto register_text_item_end; + // char msg[50]; + // sprintf(msg, PSTR("Maximum number of sub items reached: %d"), OLED_MENU_MAX_SUBITEMS_NUM); + // panicAndDisable(msg); } parent->addSubItem(newItem); if (parent == rootItem) { @@ -243,11 +250,12 @@ void OLEDMenuManager::drawOneItem(OLEDMenuItem *item, uint16_t yOffset, bool neg */ void OLEDMenuManager::drawSubItems(OLEDMenuItem *parent) { + uint8_t i = 0; display->clear(); drawStatusBar(itemUnderCursor == nullptr); uint16_t yOffset = OLED_MENU_STATUS_BAR_HEIGHT; uint8_t targetPage = itemUnderCursor == nullptr ? 0 : itemUnderCursor->pageInParent; - for (int i = 0; i < parent->numSubItem; ++i) { + while(i < parent->numSubItem) { OLEDMenuItem *subItem = parent->subItems[i]; #if OLED_MENU_OVER_DRAW if (subItem->pageInParent >= targetPage) { @@ -265,6 +273,7 @@ void OLEDMenuManager::drawSubItems(OLEDMenuItem *parent) break; } } + i++; } display->display(); } @@ -388,7 +397,7 @@ void OLEDMenuManager::enterItem(OLEDMenuItem *item, OLEDMenuNav btn, bool isFirs { bool willEnter = true; if (this->state == OLEDMenuState::IDLE) { - pushItem(item); + if(!pushItem(item)) return; this->state = OLEDMenuState::ITEM_HANDLING; } if (item->handler) { @@ -477,7 +486,8 @@ OLEDMenuItem *OLEDMenuManager::popItem(bool preserveCursor) return top; } } - panicAndDisable("invalid item: item cannot be found in its parent's subItems"); + // panicAndDisable("invalid item: item cannot be found in its parent's subItems"); + _DBGN(F("invalid item: item cannot be found in its parent's subItems")); return nullptr; } cursor = 0; diff --git a/src/OLEDMenuManager.h b/src/OLEDMenuManager.h index c6389f4c..b6d7a5ce 100644 --- a/src/OLEDMenuManager.h +++ b/src/OLEDMenuManager.h @@ -31,7 +31,6 @@ class OLEDMenuManager { private: OLEDDisplay * display = nullptr; - // OLEDMenuItem allItems[OLED_MENU_MAX_ITEMS_NUM]; OLEDMenuItem ** allItems; OLEDMenuItem * itemStack[OLED_MENU_MAX_DEPTH]; uint8_t itemSP; @@ -52,22 +51,26 @@ class OLEDMenuManager void resetScroll(); void drawStatusBar(bool negative = false); - inline void drawOneItem(OLEDMenuItem *item, uint16_t yOffset, bool negative); + void drawOneItem(OLEDMenuItem *item, uint16_t yOffset, bool negative); void drawSubItems(OLEDMenuItem *parent); - inline void enterItem(OLEDMenuItem *item, OLEDMenuNav btn, bool isFirstTime); + void enterItem(OLEDMenuItem *item, OLEDMenuNav btn, bool isFirstTime); void nextItem(); void prevItem(); - void pushItem(OLEDMenuItem *item) + bool pushItem(OLEDMenuItem *item) { if (itemSP == OLED_MENU_MAX_DEPTH - 1) { - char msg[30]; - sprintf(msg, PSTR("Maximum depth reached: %d"), OLED_MENU_MAX_DEPTH); - panicAndDisable(msg); + // char msg[30]; + // sprintf(msg, PSTR("Maximum depth reached: %d"), OLED_MENU_MAX_DEPTH); + // panicAndDisable(msg); + _DBGF(PSTR("Maximum depth reached: %d\n"), OLED_MENU_MAX_DEPTH); + return false; } itemStack[itemSP++] = item; + return true; } + // ! explanation wanted OLEDMenuItem *popItem(bool preserveCursor = true); OLEDMenuItem *peakItem() { @@ -77,18 +80,20 @@ class OLEDMenuManager } return itemStack[itemSP - 1]; } - void panicAndDisable(const char *msg) - { - this->display->clear(); - this->display->setColor(OLEDDISPLAY_COLOR::WHITE); - this->display->fillRect(0, 0, OLED_MENU_WIDTH, OLED_MENU_HEIGHT); - this->display->setColor(OLEDDISPLAY_COLOR::BLACK); - this->display->setTextAlignment(OLEDDISPLAY_TEXT_ALIGNMENT::TEXT_ALIGN_LEFT); - this->display->setFont(ArialMT_Plain_10); - this->display->drawString(0, 0, msg); - this->display->display(); - while (1); - } + // ! this is not informative and disables debug ability + // + // void panicAndDisable(const char *msg) + // { + // this->display->clear(); + // this->display->setColor(OLEDDISPLAY_COLOR::WHITE); + // this->display->fillRect(0, 0, OLED_MENU_WIDTH, OLED_MENU_HEIGHT); + // this->display->setColor(OLEDDISPLAY_COLOR::BLACK); + // this->display->setTextAlignment(OLEDDISPLAY_TEXT_ALIGNMENT::TEXT_ALIGN_LEFT); + // this->display->setFont(ArialMT_Plain_10); + // this->display->drawString(0, 0, msg); + // this->display->display(); + // while (1); + // } /** * @brief Display screen saver diff --git a/src/options.h b/src/options.h index 58cb89b8..f7677d38 100644 --- a/src/options.h +++ b/src/options.h @@ -101,7 +101,10 @@ #define STRING(x) _STR(x) // do not edit these -#define OLED_MENU_STATUS_BAR_HEIGHT (OLED_MENU_HEIGHT / 4) // status bar uses 1/4 of the screen +#ifndef OLED_MENU_ITEMS_PER_SCREEN +#define OLED_MENU_ITEMS_PER_SCREEN 4 +#endif // OLED_MENU_ITEMS_PER_SCREEN +#define OLED_MENU_STATUS_BAR_HEIGHT (OLED_MENU_HEIGHT / OLED_MENU_ITEMS_PER_SCREEN) // status bar uses 1/4 of the screen #define OLED_MENU_USABLE_AREA_HEIGHT (OLED_MENU_HEIGHT - OLED_MENU_STATUS_BAR_HEIGHT) #define OLED_MENU_SCROLL_LEAD_IN_FRAMES (OLED_MENU_SCROLL_LEAD_IN_TIME_IN_MS / OLED_MENU_REFRESH_INTERVAL_IN_MS) From 949492c57762fca0c14cbb58abfcb78577346de7 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Sat, 15 Jun 2024 20:45:34 -0600 Subject: [PATCH 34/41] WIP: do not upload... --- .vscode/settings.json | 32 ++- README.md | 12 +- configure.json | 2 +- gbs-control.ino | 129 +++++----- public/src/index.html.tpl | 14 +- public/src/index.ts | 118 +++++---- public/src/style.css | 5 +- src/OLEDMenuImplementation.cpp | 32 ++- src/OLEDMenuImplementation.h | 11 +- src/OLEDMenuManager.h | 8 +- src/OSDManager.cpp | 20 +- src/OSDManager.h | 2 + src/framesync.h | 4 - src/main.cpp | 127 +++++----- src/menu.cpp | 68 +++-- src/options.h | 148 +++++------ src/prefs.cpp | 89 +++++++ src/prefs.h | 25 ++ src/presets.cpp | 437 +++++++++++++++------------------ src/presets.h | 7 +- src/slot.cpp | 60 ++--- src/utils.cpp | 96 +++++++- src/utils.h | 8 +- src/video.cpp | 223 ++++++++--------- src/video.h | 9 +- src/wifiman.cpp | 43 ++-- src/wifiman.h | 4 +- src/wserial.cpp | 6 +- src/wserial.h | 16 +- src/wserver.cpp | 131 +++++----- src/wserver.h | 8 +- translation.webui.json | 6 + 32 files changed, 1071 insertions(+), 829 deletions(-) create mode 100644 src/prefs.cpp create mode 100644 src/prefs.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 3b26ab96..bbb7807f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,5 +13,35 @@ }, "editor.tabSize": 4, "editor.insertSpaces": true, - "editor.renderWhitespace": "all" + "editor.renderWhitespace": "all", + "psi-header.templates": [ + { + "language": "*", + "template": [ + "#########################################################################", + " File: <>", + " File Created: <>", + " Author: <>", + " Last Modified: <>", + " Modified By: <>", + " License: <>", + "#########################################################################", + " CHANGELOG:", + "#########################################################################" + ], + "changeLogCaption": " CHANGELOG:", + "changeLogHeaderLineCount": 3, + "changeLogEntryTemplate": [ + " <>\t<>\t" + ] + } + ], + "psi-header.changes-tracking": { + "isActive": true, + "modAuthor": "Modified By:", + "modDate": "Last Modified:", + "modDateFormat": "date", + "exclude": ["json"], + "autoHeader": "off" + }, } \ No newline at end of file diff --git a/README.md b/README.md index 6641dfae..602f47dc 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,8 @@ For more details visit: https://github.com/JAndrassy/ArduinoOTA/blob/master/READ ### Slots vs Presets -- Preset - is a collection of predefined runtime values (including output screen resolution, etc). +- Preset - is a collection of predefined runtime values (including output screen resolution, etc). + - Custom presets - a collection of predefined runtime values stored on GBSC filesystem. - Slot - is a collection of Presets. - Preferences - a collection of parameters which are used system-wide independently of Slots and Presets. So when Slot changes which causes Preset to change, Preferences will remain the same until user not to switch them manually. @@ -288,8 +289,12 @@ The following diagram represents the structure of system and user configurations - Interlacing - a type of video scanning where each frame is made up of 2 images that divide it horizontally by alternating pixel lines (the even and the odd). [[?]](https://en.wikipedia.org/wiki/Interlaced_video) - Peaking - it takes the high resolution RGB video signal and increases its signal amplitude (the higher peaking the sharper image with more details). - Progressive scanning (a.k.a noninterlaced scanning) - a format of displaying, storing, or transmitting moving images in which all the lines of each frame are drawn in sequence. [[?]](https://en.wikipedia.org/wiki/Progressive_scan) +- RGBs (Red, Green, Blue and sync) - both the horizontal and vertical sync signals are combined into this one line. [[?]](https://www.retrorgb.com/sync.html) +- RGBHV (RGB Horizontal sync Vertical sync) - is essentially the same as RGBs, however the horizontal and vertical sync signals are sent down their own individual lines, totaling 5 channels. "VGA" uses RGBHV. +- RGsB (Sync on green) - the green cable also carries the horizontal and vertical sync signals, totaling only three cables. The only time you’ll run into RGsB in the classic gaming world is with the PlayStation 2 and it’s usually just better to use component video. - Scanline - one row in a raster scanning pattern, such as a line of video on a CRT display. - Step Response - system response to the step input. +- YUV - is the color model found in the PAL analogue color TV standard (excluding PAL-N). A color is described as a Y component (luma) and two chroma components U and V (colorspaces that are encoded using YCbCr). ### How-to switch GBS-Control to upload mode? @@ -297,10 +302,13 @@ ESP8266 version of the factory built GBSC, boots into firmware upload mode by pr ## TODO: -- [ ] Full height doesn't work +- [ ] Full height doesn't work (?) - [ ] Invert Sync issue - [ ] PassThrough doesn't work - [ ] preferScalingRgbhv doesn't work (?) +- [ ] device disconnects from WiFi when displaying Output status on screen +- [ ] disable ambigous preset paramters inside slots + - [ ] startup reuntime parameters loading malfunction - [x] fix OLEDMenu items list offset - [x] feature request [#553] - [x] creation/destruction OLEDMenuItem procedure diff --git a/configure.json b/configure.json index ac3f6b11..5ae0a06c 100644 --- a/configure.json +++ b/configure.json @@ -22,5 +22,5 @@ "ui-lang": "en", "ui-hdw-fonts": "12@FreeSans,16@FreeSans", "ui-web-font": "Oswald Regular", - "version": "24.0611" + "version": "24.0615" } \ No newline at end of file diff --git a/gbs-control.ino b/gbs-control.ino index cabeffea..8f52d547 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -1,14 +1,14 @@ //! This is autogenerated file //! Please do not edit if you're using PlatformIO -#define VERSION "24.0611" +#define VERSION "24.0615" /* ########################################################################### # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Monday, 10th June 2024 4:04:57 pm # +# Last Modified: Saturday, 15th June 2024 2:13:02 pm # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -39,6 +39,7 @@ #include "src/wifiman.h" #include "src/menu.h" #include "src/wserver.h" +#include "src/prefs.h" // ESP8266-ping library to aid debugging WiFi issues, install via Arduino library manager #ifdef HAVE_PINGER_LIBRARY #include @@ -115,9 +116,6 @@ void setup() menuInit(); - rto->webServerEnabled = true; - rto->webServerStarted = false; // make sure this is set - startWire(); // run some dummy commands to init I2C to GBS and cached segments GBS::SP_SOG_MODE::read(); @@ -157,9 +155,7 @@ void setup() rto->inputIsYPbPr = false; rto->videoStandardInput = 0; rto->outModeHdBypass = false; - rto->videoIsFrozen = false; - if (!rto->webServerEnabled) - rto->webServerStarted = false; + // rto->videoIsFrozen = false; rto->printInfos = false; rto->sourceDisconnected = true; rto->isInLowPowerMode = false; @@ -172,11 +168,11 @@ void setup() rto->thisSourceMaxLevelSOG = 31; // 31 = auto sog has not (yet) run // dev - rto->invertSync = false; - rto->debugView = false; - rto->developerMode = false; - rto->freezeCapture = false; - rto->adcFilter = false; + uopt->invertSync = false; + uopt->debugView = false; + uopt->developerMode = false; + uopt->freezeCapture = false; + uopt->adcFilter = true; adco->r_gain = 0; adco->g_gain = 0; @@ -189,7 +185,7 @@ void setup() pinMode(LED_BUILTIN, OUTPUT); LEDON; // enable the LED, lets users know the board is starting up - if (rto->webServerEnabled) { +#if WEB_SERVER_ENABLE == 1 wifiInit(); serverWebSocketInit(); serverInit(); @@ -218,10 +214,9 @@ void setup() return true; }); #endif // HAVE_PINGER_LIBRARY - rto->webServerStarted = true; - } else { +#else wifiDisable(); - } +#endif // delay 1 of 2 // upped from < 500 to < 1500, allows more time for wifi and GBS startup @@ -243,23 +238,7 @@ void setup() _WSN(F("FS mount failed! ((1M FS) selected?)")); } else { // load user preferences file - fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); - if (!f) { - _WSN(F("no preferences file yet, create new")); - loadDefaultUserOptions(); - saveUserPrefs(); // if this fails, there must be a data problem - } else { - // !############################### - // ! prefs.dat structure - // !############################### - uopt->slotID = f.read(); - uopt->wantOutputComponent = f.read(); - uopt->preferScalingRgbhv = f.read(); - uopt->enableCalibrationADC = f.read(); // #17 - uopt->disableExternalClockGenerator = f.read(); // #19 - - f.close(); - + if(prefsLoad()) { // prefs data loaded, load current slot if(!slotLoad(uopt->slotID)) slotResetFlush(uopt->slotID); @@ -303,7 +282,7 @@ void setup() break; } // unstuck if ((i % 7) == 0) { - delay(1); + delay(10); } i++; } @@ -316,12 +295,12 @@ void setup() if (!checkBoardPower()) { stopWire(); powerOrWireIssue = 1; // fail - rto->boardHasPower = false; + // rto->boardHasPower = false; rto->syncWatcherEnabled = false; } else { // recover success rto->syncWatcherEnabled = true; - rto->boardHasPower = true; - _DBGN(F("recovered")); + // rto->boardHasPower = true; + _DBGN(F("power is recovered")); } } @@ -344,7 +323,7 @@ void setup() uint8_t productId = GBS::CHIP_ID_PRODUCT::read(); uint8_t revisionId = GBS::CHIP_ID_REVISION::read(); - _DBGF(PSTR("Chip ID: 0x%02X 0x%02X\n"), productId, revisionId); + _DBGF(PSTR("GBS chip ID: 0x%02X rev: 0x%02X\n"), productId, revisionId); if (uopt->enableCalibrationADC) { // enabled by default @@ -410,7 +389,7 @@ void loop() GBS::TEST_BUS_SEL::write(0x0); } // unsigned long startTime = millis(); - _WSF( + _DBGF( PSTR("running frame sync, clock gen enabled = %d\n"), rto->extClockGenDetected ); @@ -427,9 +406,13 @@ void loop() if (debug_backup != 0x0) { GBS::TEST_BUS_SEL::write(debug_backup); } +_DBGN(F("11")); } lastVsyncLock = millis(); +_DBGN(F("1")); } + + // syncWatcherEnabled is enabled by-default if (rto->syncWatcherEnabled && rto->boardHasPower) { if ((millis() - lastTimeInterruptClear) > 3000) { GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD @@ -437,6 +420,7 @@ void loop() lastTimeInterruptClear = millis(); } } + // information mode if (rto->printInfos == true) { printInfo(); @@ -479,7 +463,9 @@ void loop() } } } + // init frame sync + besthtotal routine + // autoBestHtotalEnabled is enabled by default if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { if (rto->continousStableCounter >= 10 && rto->coastPositionIsSet && ((millis() - lastVsyncLock) > 500)) { @@ -492,32 +478,34 @@ void loop() } } } + // update clamp + coast positions after preset change // do it quickly if ((rto->videoStandardInput <= 14 && rto->videoStandardInput != 0) && rto->syncWatcherEnabled && !rto->coastPositionIsSet) { if (rto->continousStableCounter >= 7) { if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto->videoStandardInput)) { updateCoastPosition(0); - if (rto->coastPositionIsSet) { - if (videoStandardInputIsPalNtscSd()) { - // todo: verify for other csync formats - GBS::SP_DIS_SUB_COAST::write(0); // enable 5_3e 5 - GBS::SP_H_PROTECT::write(0); // no 5_3e 4 - } + if (rto->coastPositionIsSet && videoStandardInputIsPalNtscSd()) { + // todo: verify for other csync formats + GBS::SP_DIS_SUB_COAST::write(0); // enable 5_3e 5 + GBS::SP_H_PROTECT::write(0); // no 5_3e 4 +_DBGN(F("53")); } +_DBGN(F("52")); } } } + // don't exclude modes 13 / 14 / 15 (rgbhv bypass) if ((rto->videoStandardInput != 0) && (rto->continousStableCounter >= 4) && !rto->clampPositionIsSet && rto->syncWatcherEnabled) { updateClampPosition(); - if (rto->clampPositionIsSet) { - if (GBS::SP_NO_CLAMP_REG::read() == 1) { - GBS::SP_NO_CLAMP_REG::write(0); - } + if (rto->clampPositionIsSet && GBS::SP_NO_CLAMP_REG::read() == 1) { + GBS::SP_NO_CLAMP_REG::write(0); +_DBGN(F("6")); } } + // later stage post preset adjustments if ((rto->applyPresetDoneStage == 1) && ((rto->continousStableCounter > 35 && rto->continousStableCounter < 45) || // this @@ -528,10 +516,12 @@ void loop() GBS::DAC_RGBS_PWDNZ::write(1); // 2nd chance if (!uopt->wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 2nd chance +_DBGN(F("72")); } if (!rto->syncWatcherEnabled) { updateClampPosition(); GBS::SP_NO_CLAMP_REG::write(0); // 5_57 0 +_DBGN(F("73")); } if (rto->extClockGenDetected && rto->videoStandardInput != 14) { @@ -544,34 +534,44 @@ void loop() Si.enable(0); delayMicroseconds(800); GBS::PLL648_CONTROL_01::write(0x75); +_DBGN(F("76")); } +_DBGN(F("75")); } // sync clocks now externalClockGenSyncInOutRate(); +_DBGN(F("74")); } rto->applyPresetDoneStage = 0; +_DBGN(F("71")); } } else if (rto->applyPresetDoneStage == 1 && (rto->continousStableCounter > 35)) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance if (!uopt->wantOutputComponent) { GBS::PAD_SYNC_OUT_ENZ::write(0); // enable sync out // 3rd chance +_DBGN(F("81")); } // sync clocks now externalClockGenSyncInOutRate(); rto->applyPresetDoneStage = 0; // timeout +_DBGN(F("8")); } + if (rto->applyPresetDoneStage == 10) { rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets - setOutModeHdBypass(false); + setOutputHdBypassMode(false); +_DBGN(F("9")); } + + // Input signal detection if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { if (checkBoardPower()) { - inputAndSyncDetect(); // source is off or just started; keep looking for new input + inputAndSyncDetect(); } else { - rto->boardHasPower = false; + // rto->boardHasPower = false; rto->continousStableCounter = 0; rto->syncWatcherEnabled = false; } @@ -588,26 +588,32 @@ void loop() } } } - // has the GBS board lost power? // check at 2 points, in case one doesn't register + + // has the GBS board lost power? + // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues if ((rto->noSyncCounter == 61 || rto->noSyncCounter == 62) && rto->boardHasPower) { if (!checkBoardPower()) { rto->noSyncCounter = 1; // some neutral "no sync" value - rto->boardHasPower = false; + // rto->boardHasPower = false; rto->continousStableCounter = 0; // rto->syncWatcherEnabled = false; stopWire(); // sets pinmodes SDA, SCL to INPUT +_DBGN(F("113")); } else { rto->noSyncCounter = 63; // avoid checking twice +_DBGN(F("112")); } } - // power good now? // added syncWatcherEnabled check to enable passive mode + + // power good now? + // added syncWatcherEnabled check to enable passive mode // (passive mode = watching OFW without interrupting) if (!rto->boardHasPower && rto->syncWatcherEnabled) { // then check if power has come on if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { - _WSN(F("power good")); + _DBGN(F("power good")); delay(350); // i've seen the MTV230 go on briefly on GBS power cycle startWire(); { @@ -622,9 +628,12 @@ void loop() rto->boardHasPower = true; delay(100); goLowPowerWithInputDetection(); +_DBGN(F("122")); } +_DBGN(F("121")); } } + #ifdef HAVE_PINGER_LIBRARY // periodic pings for debugging WiFi issues if (WiFi.status() == WL_CONNECTED) { @@ -640,9 +649,8 @@ void loop() // Serial takes precedence handleSerialCommand(); - // skip the code below if we don't hava the web server - if (!rto->webServerEnabled || !rto->webServerStarted) - return; + // skip the code below if we don't have the web server +#if WEB_SERVER_ENABLE == 1 // handle user commands handleUserCommand(); // web client handler @@ -655,6 +663,7 @@ void loop() if (rto->allowUpdatesOTA) { ArduinoOTA.handle(); } +#endif // handle reset routine resetInMSec(); } diff --git a/public/src/index.html.tpl b/public/src/index.html.tpl index 7c5cdae3..54e6eb89 100644 --- a/public/src/index.html.tpl +++ b/public/src/index.html.tpl @@ -99,27 +99,27 @@
    - diff --git a/public/src/index.ts b/public/src/index.ts index 8a55594f..9fe8c7d8 100644 --- a/public/src/index.ts +++ b/public/src/index.ts @@ -240,6 +240,7 @@ const GBSControl = { promptContent: null, promptInput: null, removeSlotButton: null, + createSlotButton: null, }, updateTerminalTimer: 0, webSocketServerUrl: '', @@ -511,7 +512,7 @@ const toggleButtonCheck = ( } /** - * Description placeholder + * Enable / Disable 'remove slot' button depending on active slot * * @param {HTMLElement} button this is a slot button HTMLElement */ @@ -526,6 +527,23 @@ const removeSlotButtonCheck = (button: Element) => { } } + +/** + * Enable / Disable 'create slot' button depending on active slot + * + * @param {Element} button + */ +const createSlotButtonCheck = (button: Element) => { + if (button.hasAttribute('active')) { + const currentName = button.getAttribute('gbs-name') + if (currentName && currentName.trim() === 'Empty') { + GBSControl.ui.createSlotButton.removeAttribute('disabled') + } else { + GBSControl.ui.createSlotButton.setAttribute('disabled', '') + } + } +} + /** * Description placeholder */ @@ -635,6 +653,7 @@ const createWebSocket = () => { GBSControl.ui.slotButtonList.forEach(toggleButtonActive(slotId)) // control slot remove button removeSlotButtonCheck(activeSlotButton) + createSlotButtonCheck(activeSlotButton) } // curent resolution // const resID = GBSControl.buttonMapping[String.fromCharCode(optionByte2)] @@ -1073,7 +1092,10 @@ const initUIElements = () => { promptContent: document.querySelector('[gbs-prompt-content]'), promptInput: document.querySelector('[gbs-input="prompt-input"]'), removeSlotButton: document.querySelector( - '[gbs-element-ref="buttonRemoveCustomPreset"]' + '[gbs-element-ref="buttonRemoveSlot"]' + ), + createSlotButton: document.querySelector( + '[gbs-element-ref="buttonCreateSlot"]' ), } } @@ -1728,6 +1750,9 @@ const initGeneralListeners = () => { GBSControl.ui.removeSlotButton.addEventListener('click', () => { removePreset() }) + GBSControl.ui.createSlotButton.addEventListener('click', () => { + savePreset() + }) GBSControl.ui.alertAck.addEventListener('click', () => { GBSControl.ui.alert.setAttribute('hidden', '') diff --git a/public/src/style.css b/public/src/style.css index cf6c4617..5d32e824 100644 --- a/public/src/style.css +++ b/public/src/style.css @@ -69,7 +69,6 @@ body { background-color: var(--color-cod-gray); font-family: "${webUIFontName}", sans-serif; overflow: hidden; - position: relative; } * { diff --git a/src/OLEDMenuImplementation.cpp b/src/OLEDMenuImplementation.cpp index 033f9f5d..66dfdbb5 100644 --- a/src/OLEDMenuImplementation.cpp +++ b/src/OLEDMenuImplementation.cpp @@ -93,6 +93,7 @@ bool resolutionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OLEDMen } // saveUserPrefs(); savePresetToFS(); + slotFlush(); manager->freeze(); return false; } @@ -136,8 +137,8 @@ bool presetSelectionMenuHandler(OLEDMenuManager *manager, OLEDMenuItem *item, OL } else { // normal path applyPresets(rto->videoStandardInput); + savePresetToFS(); } - savePresetToFS(); // saveUserPrefs(); manager->freeze(); oledMenuFreezeTimeoutInMS = 2000; diff --git a/src/main.cpp b/src/main.cpp index da28dc5a..abc294c8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Saturday, 15th June 2024 2:13:02 pm # +# Last Modified: Sunday, 16th June 2024 2:21:46 am # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -95,34 +95,13 @@ void setup() { unsigned long initDelay = millis(); bool retryExtClockDetect = false; - bool powerOrWireIssue = false; + // bool powerOrWireIssue = false; Serial.begin(115200); // Arduino IDE Serial Monitor requires the same 115200 bauds! Serial.setTimeout(10); - pinMode(PIN_CLK, INPUT_PULLUP); - pinMode(PIN_DATA, INPUT_PULLUP); - pinMode(PIN_SWITCH, INPUT_PULLUP); - - // inits OLED on I2C bus - if(!display.init()) - _DBGN(F("display init failed")); - display.flipScreenVertically(); // orientation fix for OLED - - menuInit(); - - startWire(); - // run some dummy commands to init I2C to GBS and cached segments - GBS::SP_SOG_MODE::read(); - writeOneByte(0xF0, 0); - writeOneByte(0x00, 0); - GBS::STATUS_00::read(); - -#ifdef HAVE_PINGER_LIBRARY - pingLastTime = millis(); -#endif - - loadDefaultUserOptions(); + rto->systemInitOK = false; + prefsLoadDefaults(); rto->allowUpdatesOTA = false; // ESP over the air updates. default to off, enable via web interface rto->enableDebugPings = false; rto->autoBestHtotalEnabled = true; // automatically find the best horizontal total pixel value for a given input timing @@ -146,7 +125,6 @@ void setup() rto->useHdmiSyncFix = 0; rto->notRecognizedCounter = 0; - // more run time variables rto->inputIsYPbPr = false; rto->videoStandardInput = 0; rto->outModeHdBypass = false; @@ -180,39 +158,67 @@ void setup() pinMode(LED_BUILTIN, OUTPUT); LEDON; // enable the LED, lets users know the board is starting up -#if WEB_SERVER_ENABLE == 1 - wifiInit(); - serverWebSocketInit(); - serverInit(); - - #ifdef HAVE_PINGER_LIBRARY - // pinger library - pinger.OnReceive([](const PingerResponse &response) { - if (response.ReceivedResponse) { - _DBGF( - PSTR("Reply from %s: time=%lums\n"), - response.DestIPAddress.toString().c_str(), - response.ResponseTime); - - pingLastTime = millis() - 900; // produce a fast stream of pings if connection is good - } else { - _DBGN(F("Request timed out.")); - } + pinMode(PIN_CLK, INPUT_PULLUP); + pinMode(PIN_DATA, INPUT_PULLUP); + pinMode(PIN_SWITCH, INPUT_PULLUP); - // Return true to continue the ping sequence. - // If current event returns false, the ping sequence is interrupted. - return true; - }); + // filesystem (web page, custom presets, etc) + if (!LittleFS.begin()) { + _DBGN(F("FS mount failed ((1M FS) selected?)")); + return; + } - pinger.OnEnd([](const PingerResponse &response) { - // detailed info not necessary - return true; - }); - #endif // HAVE_PINGER_LIBRARY -#else - wifiDisable(); + // inits OLED on I2C bus + if(!display.init()) + _DBGN(F("display init failed")); + display.flipScreenVertically(); // orientation fix for OLED + + menuInit(); + + startWire(); + // run some dummy commands to init I2C to GBS and cached segments + GBS::SP_SOG_MODE::read(); + writeOneByte(0xF0, 0); + writeOneByte(0x00, 0); + GBS::STATUS_00::read(); + +#ifdef HAVE_PINGER_LIBRARY + pingLastTime = millis(); #endif +#if WEB_SERVER_ENABLE == 1 + wifiInit(); + serverWebSocketInit(); + serverInit(); + +#ifdef HAVE_PINGER_LIBRARY + // pinger library + pinger.OnReceive([](const PingerResponse &response) { + if (response.ReceivedResponse) { + _DBGF( + PSTR("Reply from %s: time=%lums\n"), + response.DestIPAddress.toString().c_str(), + response.ResponseTime); + + pingLastTime = millis() - 900; // produce a fast stream of pings if connection is good + } else { + _DBGN(F("Request timed out.")); + } + + // Return true to continue the ping sequence. + // If current event returns false, the ping sequence is interrupted. + return true; + }); + + pinger.OnEnd([](const PingerResponse &response) { + // detailed info not necessary + return true; + }); +#endif // HAVE_PINGER_LIBRARY +#else // WEB_SERVER_ENABLE + wifiDisable(); +#endif // WEB_SERVER_ENABLE + // delay 1 of 2 // upped from < 500 to < 1500, allows more time for wifi and GBS startup while (millis() - initDelay < 1500) { @@ -228,21 +234,15 @@ void setup() GBS::PLLAD_VCORST::write(1); GBS::PLLAD_PDZ::write(0); // AD PLL off - // file system (web page, custom presets, ect) - if (!LittleFS.begin()) { - _WSN(F("FS mount failed! ((1M FS) selected?)")); - } else { - // load user preferences file - if(prefsLoad()) { - // prefs data loaded, load current slot - if(!slotLoad(uopt->slotID)) - slotResetFlush(uopt->slotID); - } - } + // load user preferences file + if(!prefsLoad()) + prefsLoadDefaults(); GBS::PAD_CKIN_ENZ::write(1); // disable to prevent startup spike damage - if(externalClockGenDetectAndInitialize() == -1) + if(externalClockGenDetectAndInitialize() == -1) { retryExtClockDetect = true; + _DBGN(F("(!) unable to detect ext. clock, going to try later...")); + } // library may change i2c clock or pins, so restart startWire(); GBS::STATUS_00::read(); @@ -264,8 +264,12 @@ void setup() // check board vitals if (!checkBoardPower()) { + _DBGN(F("(!) board has no power")); int i = 0; stopWire(); // sets pinmodes SDA, SCL to INPUT + // let is stop + delay(100); + // wait... while (i < 40) { // I2C SDA probably stuck, attempt recovery (max attempts in tests was around 10) startWire(); @@ -282,58 +286,35 @@ void setup() i++; } - // restart and dummy - startWire(); - delay(10); - GBS::STATUS_00::read(); - if (!checkBoardPower()) { stopWire(); - powerOrWireIssue = 1; // fail - // rto->boardHasPower = false; rto->syncWatcherEnabled = false; - } else { // recover success + _DBGN(F("(!) timeout, unable to init board connection")); + } else { rto->syncWatcherEnabled = true; - // rto->boardHasPower = true; - _DBGN(F("power is recovered")); + _DBGN(F("(!) power is recovered")); } } - if (powerOrWireIssue == 0) { + // if (powerOrWireIssue == 0) { + if (rto->boardHasPower) { // second init, in cases where i2c got stuck earlier but has recovered // *if* ext clock gen is installed and *if* i2c got stuck, then clockgen must be already running - if (!rto->extClockGenDetected && retryExtClockDetect) { + if (!rto->extClockGenDetected && retryExtClockDetect) externalClockGenDetectAndInitialize(); - } - if (rto->extClockGenDetected == 1) { - _DBGN(F("ext clockgen detected")); - } else { - _DBGN(F("no ext clockgen")); - } zeroAll(); - _DBGN(F("(!) reset runtime parameters while setup")); setResetParameters(); prepareSyncProcessor(); - uint8_t productId = GBS::CHIP_ID_PRODUCT::read(); - uint8_t revisionId = GBS::CHIP_ID_REVISION::read(); - _DBGF(PSTR("GBS chip ID: 0x%02X rev: 0x%02X\n"), productId, revisionId); - if (uopt->enableCalibrationADC) { // enabled by default calibrateAdcOffset(); } - // FIXME double reset? - // setResetParameters(); - // startup reliability test routine - /*rto->videoStandardInput = 1; - writeProgramArrayNew(ntsc_240p, 0); - doPostPresetLoadSteps(); - int i = 100000; - while (i-- > 0) loop(); - ESP.restart();*/ + // prefs data loaded, load current slot + if(!slotLoad(uopt->slotID)) + slotResetFlush(uopt->slotID); // rto->syncWatcherEnabled = false; // allows passive operation by disabling syncwatcher here // inputAndSyncDetect(); @@ -348,26 +329,60 @@ void setup() // } } else { _WSN(F("Please check board power and cabling or restart!")); + return; } LEDOFF; // LED behaviour: only light LED on active sync // some debug tools leave garbage in the serial rx buffer discardSerialRxData(); - // setup done - _DBGF(PSTR("\n\n GBS-Control v.%s\n\n\n"), STRING(VERSION)); + + _DBGF(PSTR("\n\n GBS-Control v.%s\n\n\nTV id: 0x%02X rev: 0x%02X\n"), + STRING(VERSION), + GBS::CHIP_ID_PRODUCT::read(), + GBS::CHIP_ID_REVISION::read() + ); + // system init is OK + rto->systemInitOK = true; } void loop() { + // stay in loop_wrapper if setup has not been completed + if(!rto->systemInitOK) return; + static unsigned long lastTimeSyncWatcher = millis(); // 500 to start right away (after setup it will be 2790ms when we get here) static unsigned long lastTimeSourceCheck = 500; static unsigned long lastTimeInterruptClear = millis(); menuLoop(); - wifiLoop(); // WiFi + OTA + WS + MDNS, checks for server enabled + started + wifiLoop(); + + // Input signal detection + if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { + if ((millis() - lastTimeSourceCheck) >= 500) { + if (checkBoardPower()) { + inputAndSyncDetect(); + } else { + // rto->boardHasPower = false; + rto->continousStableCounter = 0; + rto->syncWatcherEnabled = false; + } + lastTimeSourceCheck = millis(); + + // vary SOG slicer level from 2 to 6 + uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); + if (currentSOG >= 3) { + rto->currentLevelSOG = currentSOG - 1; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } else { + rto->currentLevelSOG = 6; + GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); + } + } + } // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false @@ -404,7 +419,6 @@ void loop() _DBGN(F("11")); } lastVsyncLock = millis(); -_DBGN(F("1")); } // syncWatcherEnabled is enabled by-default @@ -481,12 +495,10 @@ _DBGN(F("1")); if ((getStatus16SpHsStable() == 1) && (getVideoMode() == rto->videoStandardInput)) { updateCoastPosition(0); if (rto->coastPositionIsSet && videoStandardInputIsPalNtscSd()) { - // todo: verify for other csync formats + // TODO: verify for other csync formats GBS::SP_DIS_SUB_COAST::write(0); // enable 5_3e 5 GBS::SP_H_PROTECT::write(0); // no 5_3e 4 -_DBGN(F("53")); } -_DBGN(F("52")); } } } @@ -560,30 +572,6 @@ _DBGN(F("8")); _DBGN(F("9")); } - // Input signal detection - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { - if ((millis() - lastTimeSourceCheck) >= 500) { - if (checkBoardPower()) { - inputAndSyncDetect(); - } else { - // rto->boardHasPower = false; - rto->continousStableCounter = 0; - rto->syncWatcherEnabled = false; - } - lastTimeSourceCheck = millis(); - - // vary SOG slicer level from 2 to 6 - uint8_t currentSOG = GBS::ADC_SOGCTRL::read(); - if (currentSOG >= 3) { - rto->currentLevelSOG = currentSOG - 1; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); - } else { - rto->currentLevelSOG = 6; - GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); - } - } - } - // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues @@ -594,10 +582,9 @@ _DBGN(F("9")); rto->continousStableCounter = 0; // rto->syncWatcherEnabled = false; stopWire(); // sets pinmodes SDA, SCL to INPUT -_DBGN(F("113")); + _DBGN(F("(!) board has lost power")); } else { rto->noSyncCounter = 63; // avoid checking twice -_DBGN(F("112")); } } @@ -608,7 +595,7 @@ _DBGN(F("112")); if (digitalRead(SCL) && digitalRead(SDA)) { delay(50); if (digitalRead(SCL) && digitalRead(SDA)) { - _DBGN(F("power good")); + _DBGN(F("board power is ok")); delay(350); // i've seen the MTV230 go on briefly on GBS power cycle startWire(); { @@ -623,9 +610,7 @@ _DBGN(F("112")); rto->boardHasPower = true; delay(100); goLowPowerWithInputDetection(); -_DBGN(F("122")); } -_DBGN(F("121")); } } diff --git a/src/menu.cpp b/src/menu.cpp index 7ccf00ec..0d17a9b6 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -3,7 +3,7 @@ # File: menu.cpp # # File Created: Thursday, 2nd May 2024 11:31:34 pm # # Author: # -# Last Modified: Saturday, 15th June 2024 8:35:48 pm # +# Last Modified: Sunday, 16th June 2024 2:32:56 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -201,9 +201,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(videoMode); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); oled_selectOption = 1; oled_subsetFrame = 1; } @@ -225,9 +225,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(videoMode); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); oled_selectOption = 1; oled_subsetFrame = 1; } @@ -249,9 +249,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(videoMode); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); oled_selectOption = 1; oled_subsetFrame = 1; } @@ -273,9 +273,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(videoMode); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); oled_selectOption = 1; oled_subsetFrame = 1; } @@ -296,9 +296,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(videoMode); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); oled_selectOption = 1; oled_subsetFrame = 2; } @@ -320,9 +320,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(videoMode); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); oled_selectOption = 1; oled_subsetFrame = 2; } @@ -408,9 +408,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); // allowing "catchup" oled_selectOption = 1; // reset select container oled_subsetFrame = 1; // switch back to prev frame (prev screen) @@ -435,9 +435,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); oled_selectOption = 1; oled_subsetFrame = 1; @@ -462,9 +462,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); oled_selectOption = 1; oled_subsetFrame = 1; @@ -489,9 +489,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); oled_selectOption = 1; oled_subsetFrame = 1; @@ -516,9 +516,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); oled_selectOption = 1; oled_subsetFrame = 2; @@ -543,9 +543,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); oled_selectOption = 1; oled_subsetFrame = 2; @@ -570,9 +570,9 @@ void settingsMenuOLED() rto->videoStandardInput = 15; } else { applyPresets(rto->videoStandardInput); + // saveUserPrefs(); + savePresetToFS(); } - // saveUserPrefs(); - savePresetToFS(); delay(50); oled_selectOption = 1; oled_subsetFrame = 2; @@ -627,7 +627,7 @@ void settingsMenuOLED() display.display(); } // webSocket.close(); - loadDefaultUserOptions(); + prefsLoadDefaults(); // saveUserPrefs(); prefsSave(); // delay(60); diff --git a/src/options.h b/src/options.h index 6cf8c0af..5a77eaa2 100644 --- a/src/options.h +++ b/src/options.h @@ -182,6 +182,8 @@ struct userOptions // runTimeOptions holds system variables struct runTimeOptions { + // system state + bool systemInitOK; // source identification bool boardHasPower; uint8_t continousStableCounter; diff --git a/src/prefs.cpp b/src/prefs.cpp index f2df5f6f..3ce0c6f2 100644 --- a/src/prefs.cpp +++ b/src/prefs.cpp @@ -3,7 +3,7 @@ # File: prefs.cpp # # File Created: Thursday, 13th June 2024 12:16:38 am # # Author: Sergey Ko # -# Last Modified: Thursday, 13th June 2024 12:28:25 am # +# Last Modified: Sunday, 16th June 2024 1:45:22 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -16,7 +16,7 @@ * @brief * */ -void loadDefaultUserOptions() +void prefsLoadDefaults() { // uopt->resolutionID = Output240p; // uopt->enableFrameTimeLock = 0; // permanently adjust frame timing to avoid glitch vertical bar. does not work on all displays! @@ -50,7 +50,7 @@ bool prefsLoad() { fs::File f = LittleFS.open(FPSTR(preferencesFile), "r"); if (!f) { _WSN(F("no preferences file yet, create new")); - loadDefaultUserOptions(); + prefsLoadDefaults(); prefsSave(); return false; } diff --git a/src/prefs.h b/src/prefs.h index 4c1475ed..fe4a1ac1 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -3,7 +3,7 @@ # File: prefs.h # # File Created: Thursday, 13th June 2024 12:16:48 am # # Author: Sergey Ko # -# Last Modified: Thursday, 13th June 2024 12:27:13 am # +# Last Modified: Sunday, 16th June 2024 1:45:22 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -17,7 +17,7 @@ #include "options.h" #include "wserial.h" -void loadDefaultUserOptions(); +void prefsLoadDefaults(); bool prefsLoad(); bool prefsSave(); diff --git a/src/presets.cpp b/src/presets.cpp index 8bdae62b..92b1c146 100644 --- a/src/presets.cpp +++ b/src/presets.cpp @@ -3,7 +3,7 @@ # File: preset.cpp # # File Created: Thursday, 2nd May 2024 6:38:23 pm # # Author: # -# Last Modified: Saturday, 15th June 2024 8:28:39 pm # +# Last Modified: Sunday, 16th June 2024 2:26:12 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -34,7 +34,7 @@ void loadPresetMdSection() } /** - * @brief reset runtime parameters and some PLC registers + * @brief reset runtime parameters and some registers * */ void setResetParameters() @@ -1230,7 +1230,7 @@ void applyPresets(uint8_t videoMode) // TODO replace videoMode with VideoStandardInput enum if (!rto->boardHasPower) { - _WSN(F("(!) GBS board not responding!")); + _WSN(F("(!) board not responding!")); return; } @@ -1283,7 +1283,11 @@ void applyPresets(uint8_t videoMode) if (videoMode == 0) { // Unknown - _WSF(PSTR("(!) source format not properly recognized, resolutionID: %c\n"), uopt->resolutionID); + _WSF( + PSTR("(!) source format not properly recognized, videoMode: %d, resolutionID: %c\n"), + videoMode, + uopt->resolutionID + ); videoMode = 3; // in case of success: override to 480p60 GBS::ADC_INPUT_SEL::write(1); // RGB delay(10); @@ -1326,10 +1330,7 @@ void applyPresets(uint8_t videoMode) // it *enables* the output (showing a green screen) even if // previously disabled, and we want to *disable* it. // rto->presetID = Output240p; - // - // @sk: supressed for now - // - // uopt->resolutionID = Output240p; + uopt->resolutionID = Output240p; return; } } @@ -1337,7 +1338,7 @@ void applyPresets(uint8_t videoMode) if (uopt->PalForce60 == 1) { - // != custom. custom saved as pal preset has ntsc customization + // not equal to custom, saved as pal preset has ntsc customization // if (uopt->presetPreference != 2) { if (!rto->isCustomPreset) { _DBG(F("not a custom preset, ")); @@ -1367,6 +1368,7 @@ void applyPresets(uint8_t videoMode) /// resolution. If so, setup bypass and skip the rest of applyPresets(). auto applySavedBypassPreset = [&videoMode]() -> bool { + // TODO the following description difers from reality, requires an update /* Types: @@ -1439,16 +1441,20 @@ void applyPresets(uint8_t videoMode) // if we're using ESP8266, check if there is saved preset data first #if defined(ESP8266) - const uint8_t *preset = loadPresetFromFS(videoMode); - if(preset != nullptr) { - writeProgramArrayNew(preset, false); - if (applySavedBypassPreset()) - { - _DBGN(F("Bypass preset applied")); - return; + // skip loading from FS if we changing resolution + if(uopt->resolutionID == (OutputResolution)GBS::GBS_PRESET_ID::read()) { + const uint8_t *preset = loadPresetFromFS(videoMode); + if(preset != nullptr) { + writeProgramArrayNew(preset, false); + if (applySavedBypassPreset()) + { + _DBGN(F("Bypass preset applied")); + return; + } + delete preset; + goto apply_presets_skip_preset_loading; } - delete preset; - } else + } // else if (uopt->presetPreference == OutputCustomized) { // { // @@ -1589,6 +1595,7 @@ void applyPresets(uint8_t videoMode) return; } +apply_presets_skip_preset_loading: rto->videoStandardInput = videoMode; _DBGF(PSTR("video mode set: %d\n"), videoMode); if (waitExtra) @@ -1731,7 +1738,7 @@ const uint8_t *loadPresetFromFS(byte forVideoMode) * @brief Save "preset.slot" data. If preset file exists it will be overriden * Logic: * - create preset file ("preset.current_slot"). Preset name identified by input video signal - * - read all registers of PLC and save the data into preset file. In other words the PLC snapshot with + * - read all registers and save the data into preset file. In other words the snapshot with * all the previous changes being saved into preset file and will be autoloaded next time * if the current slot is active and the input video signal matches preset. */ @@ -1805,7 +1812,7 @@ void savePresetToFS() _WSF(PSTR("preset data saved into: %s\n"), buffer); // GBS::GBS_PRESET_CUSTOM::write(1); // use one reserved bit to mark this as a custom preset - // don't store scanlines + // TODO don't store scanlines - WHY? if (GBS::GBS_OPTION_SCANLINES_ENABLED::read() == 1) { disableScanlines(); diff --git a/src/slot.cpp b/src/slot.cpp index e86300d2..24b5b2d7 100644 --- a/src/slot.cpp +++ b/src/slot.cpp @@ -3,7 +3,7 @@ # File: slot.cpp # # File Created: Friday, 31st May 2024 8:41:15 am # # Author: Sergey Ko # -# Last Modified: Thursday, 13th June 2024 12:12:55 am # +# Last Modified: Sunday, 16th June 2024 1:45:22 am # # Modified By: Sergey Ko # ########################################################################### # CHANGELOG: # @@ -29,6 +29,7 @@ bool slotLoad(const uint8_t & slotIndex) { slotsBinaryFile.close(); // update parameters uopt->resolutionID = slotsObject.slot[slotIndex].resolutionID; + GBS::GBS_PRESET_ID::write((uint8_t)uopt->resolutionID); uopt->wantScanlines = (bool)slotsObject.slot[slotIndex].scanlines; uopt->scanlineStrength = slotsObject.slot[slotIndex].scanlinesStrength; uopt->wantVdsLineFilter = (bool)slotsObject.slot[slotIndex].wantVdsLineFilter; @@ -228,9 +229,10 @@ void slotResetDefaults(SlotMetaArray & slotsObject, const uint8_t & slotIndex) { sizeof(slotsObject.slot[slotIndex].name) ); // if that was current slot, also reset the runtime paramters - // TODO: see loadDefaultUserOptions() + // TODO: see prefsLoadDefaults() if(slotIndex == uopt->slotID) { uopt->resolutionID = Output240p; + GBS::GBS_PRESET_ID::write((uint8_t)uopt->resolutionID); uopt->wantScanlines = false; uopt->scanlineStrength = SCANLINE_STRENGTH_INIT; uopt->wantVdsLineFilter = false; diff --git a/src/slot.h b/src/slot.h index 4ef109bd..4de63101 100644 --- a/src/slot.h +++ b/src/slot.h @@ -3,6 +3,7 @@ #include #include "options.h" +#include "tv5725.h" #include "wserial.h" // SLOTS diff --git a/src/video.cpp b/src/video.cpp index d23d32b7..1499f81f 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -3,7 +3,7 @@ # File: video.cpp # # File Created: Thursday, 2nd May 2024 4:07:57 pm # # Author: # -# Last Modified: Saturday, 15th June 2024 8:27:35 pm # +# Last Modified: Sunday, 16th June 2024 1:51:52 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -354,7 +354,7 @@ int8_t externalClockGenDetectAndInitialize() rto->extClockGenDetected = 0; if (uopt->disableExternalClockGenerator) { - _WSN(F("external clock generator disabled, skipping detection")); + _DBGN(F("(!) external clock generator disabled, skipping detection")); return 0; } @@ -366,7 +366,7 @@ int8_t externalClockGenDetectAndInitialize() // 2 = received NACK on transmit of address // 0 = success retVal = Wire.endTransmission(); - _DBGF(PSTR("a problem while detect external clock, err: %d\n"), retVal); + _DBGF(PSTR("(!) a problem while detect external clock, err: %d\n"), retVal); if (retVal != 0) { return -1; } @@ -388,6 +388,8 @@ int8_t externalClockGenDetectAndInitialize() return -1; } + _DBGN(F("ext. clock detected")); + Si.init(25000000L); // many Si5351 boards come with 25MHz crystal; 27000000L for one with 27MHz Wire.beginTransmission(SIADDR); Wire.write(183); // XTAL_CL @@ -1209,7 +1211,7 @@ void updateSpDynamic(bool withCurrentVideoModeCheck) return; } - _DBGF(PSTR("updateSpDynamic %s video mode check\n"), withCurrentVideoModeCheck ? PSTR("WITH") : PSTR("NO")); + // _DBGF(PSTR("updateSpDynamic %s video mode check\n"), withCurrentVideoModeCheck ? PSTR("WITH") : PSTR("NO")); uint8_t vidModeReadout = getVideoMode(); if (vidModeReadout == 0) { @@ -2080,22 +2082,25 @@ void disableMotionAdaptDeinterlace() } /** - * @brief + * @brief Clear tv5725 registers * */ void zeroAll() { + uint8_t y = 0, + z = 0, + w = 0; // turn processing units off first writeOneByte(0xF0, 0); writeOneByte(0x46, 0x00); // reset controls 1 writeOneByte(0x47, 0x00); // reset controls 2 // zero out entire register space - for (int y = 0; y < 6; y++) { + while (y < 6) { writeOneByte(0xF0, (uint8_t)y); - for (int z = 0; z < 16; z++) { + while (z < 16) { uint8_t bank[16]; - for (int w = 0; w < 16; w++) { + while(w < 16) { bank[w] = 0; // exceptions // if (y == 5 && z == 0 && w == 2) { @@ -2107,9 +2112,12 @@ void zeroAll() // if (y == 5 && z == 5 && w == 7) { // bank[w] = 0xC0; // 5_57 //} + w++; } writeBytes(z * 16, bank, 16); + z++; } + y++; } } diff --git a/src/wifiman.cpp b/src/wifiman.cpp index d5e144d1..49bb6240 100644 --- a/src/wifiman.cpp +++ b/src/wifiman.cpp @@ -3,7 +3,7 @@ # File: wifiman.cpp # # File Created: Friday, 19th April 2024 2:25:33 pm # # Author: Sergey Ko # -# Last Modified: Friday, 14th June 2024 9:00:12 pm # +# Last Modified: Sunday, 16th June 2024 2:04:38 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -280,7 +280,7 @@ void wifiLoop() { _connectCheckTime = millis(); WiFi.reconnect(); } else { - _DBGN(F("switched to AP mode")); + _DBGN(F("(!) switched to AP mode")); wifiStartApMode(); _connectCheckTime = 0; } diff --git a/src/wserver.cpp b/src/wserver.cpp index 37b4fce3..e10c5f00 100644 --- a/src/wserver.cpp +++ b/src/wserver.cpp @@ -3,7 +3,7 @@ # fs::File: server.cpp # # fs::File Created: Friday, 19th April 2024 3:11:40 pm # # Author: Sergey Ko # -# Last Modified: Saturday, 15th June 2024 8:39:40 pm # +# Last Modified: Sunday, 16th June 2024 2:37:07 am # # Modified By: Sergey Ko # ##################################################################################### # CHANGELOG: # @@ -726,7 +726,7 @@ void serverWiFiReset() } /** - * @brief Prints current system & PLC parameters + * @brief Prints current system & video * into WS and Serial output * */ @@ -2046,7 +2046,7 @@ void handleUserCommand() // active slot settings reset fsToFactory(); // common parameters reset - loadDefaultUserOptions(); + prefsLoadDefaults(); // saveUserPrefs(); prefsSave(); _WSN(F("options set to defaults, restarting")); @@ -2062,11 +2062,12 @@ void handleUserCommand() // vga upscale path: let synwatcher handle it rto->videoStandardInput = 15; } else { - // also does loadPresetFromFS() applyPresets(rto->videoStandardInput); + // if at this point isCustomPreset it true, + // then preset is loaded from FS, therefore no need to save it again + if(!rto->isCustomPreset) + savePresetToFS(); } - if(!rto->isCustomPreset) - savePresetToFS(); } break; // case '4': @@ -2171,6 +2172,7 @@ void handleUserCommand() uint8_t videoMode = getVideoMode(); if (videoMode == 0 && GBS::STATUS_SYNC_PROC_HSACT::read()) videoMode = rto->videoStandardInput; // last known good as fallback + // else videoMode stays 0 and we'll apply via some assumptions if (userCommand == 'f') // uopt->presetPreference = Output960P; // 1280x960 @@ -2204,13 +2206,18 @@ void handleUserCommand() } else { - // normal path - _DBGF(PSTR("apply preset of videoMode: %d resolutionID: %d\n"), videoMode, uopt->resolutionID); applyPresets(videoMode); + // resolution is stored in GBSC registers + // doing this after applyPresets to be able to find if resolution has changed + GBS::GBS_PRESET_ID::write(uopt->resolutionID); + // if at this point isCustomPreset it true, then preset is loaded from FS and + // resolution doesn't change, therefore no need to save it again + if(!rto->isCustomPreset) { + savePresetToFS(); + slotFlush(); + } + // saveUserPrefs(); } - savePresetToFS(); - slotFlush(); - // saveUserPrefs(); } break; case 'i': // toggle active frametime lock method @@ -2486,16 +2493,17 @@ void handleUserCommand() prefsSave(); break; case 'X': // enable/disable ext. clock generator - _WS(F("ExternalClockGenerator: ")); - if (uopt->disableExternalClockGenerator == 0) + _WS(F("external clock generator: ")); + if (uopt->disableExternalClockGenerator == false) { - uopt->disableExternalClockGenerator = 1; _WSN(F("off")); + uopt->disableExternalClockGenerator = true; } else { - uopt->disableExternalClockGenerator = 0; - _WSN("on"); + _WSN(F("on, detecting...")); + uopt->disableExternalClockGenerator = false; + externalClockGenDetectAndInitialize(); } // saveUserPrefs(); prefsSave(); diff --git a/translation.webui.json b/translation.webui.json index 2cda232a..831a7316 100644 --- a/translation.webui.json +++ b/translation.webui.json @@ -24,7 +24,7 @@ "zh": "" }, "SAVE_PRESET": { - "en": "save to slot", + "en": "create slot", "es": "crear perfil", "ru": "создать профиль", "zh": "" From 73f7ca66a018eb6c994f8bf5a01afc4247973258 Mon Sep 17 00:00:00 2001 From: Sergey Ko Date: Tue, 18 Jun 2024 11:40:46 -0600 Subject: [PATCH 36/41] WIP: do not upload... --- README.md | 1 + doc/DEVELOPER_NOTES.md | 44 + doc/img/diagonal-bob-lpf-coeff.jpg | Bin 0 -> 19099 bytes doc/img/display-clock-tuning-reg.jpg | Bin 0 -> 86589 bytes doc/img/horizontal-stable-est-error-range.jpg | Bin 0 -> 14904 bytes doc/img/motion-index-delay-control.jpg | Bin 0 -> 24880 bytes doc/img/pipe-control-motion-index.jpg | Bin 0 -> 18419 bytes doc/img/reg-map.jpg | Bin 0 -> 85493 bytes doc/img/select-16bit-data.jpg | Bin 0 -> 18235 bytes doc/img/uv-delay-pipe-control.jpg | Bin 0 -> 33908 bytes doc/img/y-data-pipes-YUV422to444-conv.jpg | Bin 0 -> 15953 bytes doc/img/y-data-pipes-YUV444to422-conv.jpg | Bin 0 -> 16825 bytes doc/img/y-delay-pipe-control.jpg | Bin 0 -> 33822 bytes doc/tv5725_programming_guide.pdf | Bin 1936650 -> 1975165 bytes doc/tv5725_registers_definition_v1.1.pdf | Bin 1407751 -> 1491561 bytes gbs-control.ino | 65 +- public/src/index.ts | 20 +- public/src/style.css | 4 + src/OSDManager.cpp | 1 + src/framesync.cpp | 11 +- src/main.cpp | 65 +- src/options.h | 14 +- src/presets.cpp | 83 +- src/tv5725.h | 995 ++++++++++++------ src/utils.cpp | 7 +- src/video.cpp | 294 +++--- src/video.h | 4 +- src/wserver.cpp | 58 +- translation.webui.json | 12 + 29 files changed, 1097 insertions(+), 581 deletions(-) create mode 100644 doc/DEVELOPER_NOTES.md create mode 100644 doc/img/diagonal-bob-lpf-coeff.jpg create mode 100644 doc/img/display-clock-tuning-reg.jpg create mode 100644 doc/img/horizontal-stable-est-error-range.jpg create mode 100644 doc/img/motion-index-delay-control.jpg create mode 100644 doc/img/pipe-control-motion-index.jpg create mode 100644 doc/img/reg-map.jpg create mode 100644 doc/img/select-16bit-data.jpg create mode 100644 doc/img/uv-delay-pipe-control.jpg create mode 100644 doc/img/y-data-pipes-YUV422to444-conv.jpg create mode 100644 doc/img/y-data-pipes-YUV444to422-conv.jpg create mode 100644 doc/img/y-delay-pipe-control.jpg diff --git a/README.md b/README.md index 602f47dc..5562e3f3 100644 --- a/README.md +++ b/README.md @@ -309,6 +309,7 @@ ESP8266 version of the factory built GBSC, boots into firmware upload mode by pr - [ ] device disconnects from WiFi when displaying Output status on screen - [ ] disable ambigous preset paramters inside slots - [ ] startup reuntime parameters loading malfunction +- [ ] De-interlacer noise reduction ctl. - [x] fix OLEDMenu items list offset - [x] feature request [#553] - [x] creation/destruction OLEDMenuItem procedure diff --git a/doc/DEVELOPER_NOTES.md b/doc/DEVELOPER_NOTES.md new file mode 100644 index 00000000..54c125da --- /dev/null +++ b/doc/DEVELOPER_NOTES.md @@ -0,0 +1,44 @@ +# REGISTERS + +![register map](./img/reg-map.jpg) + +## (S0_41) Display clock tuning register + +![display clock tuning](./img/display-clock-tuning-reg.jpg) + +## (S1_00) Select 16bit data + +![Select 16bit data](./img/select-16bit-data.jpg) + +## (S1_01) Y data pipes control in YUV422to444 conversion + +![Y data pipes control in YUV422to444 conversion](./img/y-data-pipes-YUV422to444-conv.jpg) + +## (S1_02) Y data pipes control in YUV444to422 conversion + +![Y data pipes control in YUV444to422 conversion](./img/y-data-pipes-YUV444to422-conv.jpg) + +## (S1_62) Horizontal Stable Estimation Error Range Control + +![Horizontal Stable Estimation Error Range Control](./img/horizontal-stable-est-error-range.jpg) + +## (S2_00) Diagonal Bob Low pass Filter Coefficient Selection + +![diagonal bob coeff. selection](./img/diagonal-bob-lpf-coeff.jpg) + +## (S2_17) Y delay pipe control + +![Y delay pipe control](./img/y-delay-pipe-control.jpg) + +## (S2_17) UV delay pipe control + +![UV delay pipe control](./img/uv-delay-pipe-control.jpg) + +## (S2_3A) Delay pipe control for motion index feedback-bit + +![Delay pipe control for MI](./img/pipe-control-motion-index.jpg) + +## (S2_3C) Motion index delay control + +![Motion index delay control](./img/motion-index-delay-control.jpg) + diff --git a/doc/img/diagonal-bob-lpf-coeff.jpg b/doc/img/diagonal-bob-lpf-coeff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc0daa6c25780a918c45aa1720303841274c07fc GIT binary patch literal 19099 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 literal 0 HcmV?d00001 diff --git a/doc/img/horizontal-stable-est-error-range.jpg b/doc/img/horizontal-stable-est-error-range.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b700e0df568798f50f023bb52c942f127a6fc9ee GIT binary patch literal 14904 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 literal 0 HcmV?d00001 diff --git a/doc/img/motion-index-delay-control.jpg b/doc/img/motion-index-delay-control.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c9d0fb35d41966779c02515c7f3ca40fd7dafa1 GIT binary patch literal 24880 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 RwTVDKD2e{>#HlWK{~6;FihTe8 literal 0 HcmV?d00001 diff --git a/doc/img/pipe-control-motion-index.jpg b/doc/img/pipe-control-motion-index.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e9697d076d9242d79e08a7998d664791f9c235b GIT binary patch literal 18419 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 literal 0 HcmV?d00001 diff --git a/doc/img/select-16bit-data.jpg b/doc/img/select-16bit-data.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08ff2a18638553838d61637646e4e9de47095fcf GIT binary patch literal 18235 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 Xl7sO-0_4*wdjjOzYagz`u+#q!Dl1Hr literal 0 HcmV?d00001 diff --git a/doc/img/uv-delay-pipe-control.jpg b/doc/img/uv-delay-pipe-control.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4653c3b367174a0a1952ed1c7ad5e083807db1d5 GIT binary patch literal 33908 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 literal 0 HcmV?d00001 diff --git a/doc/img/y-data-pipes-YUV422to444-conv.jpg b/doc/img/y-data-pipes-YUV422to444-conv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf0430c93248d2b9e4ee451ba4c4851745efd6d2 GIT binary patch literal 15953 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 literal 0 HcmV?d00001 diff --git a/doc/img/y-delay-pipe-control.jpg b/doc/img/y-delay-pipe-control.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49218882e1a5ec502cb31eb54baba65fa534353d GIT binary patch literal 33822 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�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

    Z3?8%-LHYEJ3tb}#(I2zj`kz~f$W=J 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 ofY!5QLlyx&QzG diff --git a/builds/firmware.bin b/builds/firmware.bin index 2c2ac314baaeee895ac48031d4ec3829bb3a1b16..50562f50f437eab0a1c8e0b4cd323bc62da8d3eb 100644 GIT binary patch delta 91577 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%0A}+d0V+PaU5Ih^rWJv>Eb(?vO42N0T1c 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≷3zyx#m)yROQ4+n(O3h+6 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 z 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 diff --git a/gbs-control.ino b/gbs-control.ino index 49a46646..c90c7aae 100644 --- a/gbs-control.ino +++ b/gbs-control.ino @@ -3,7 +3,7 @@ # File: main.cpp # # File Created: Friday, 19th April 2024 3:13:38 pm # # Author: Robert Neumann # -# Last Modified: Thursday, 30th May 2024 12:59:29 pm # +# Last Modified: Saturday, 1st June 2024 12:03:28 am # # Modified By: Sergey Ko # # # # License: GPLv3 # @@ -64,6 +64,27 @@ struct adcOptions *adco = &adcopts; char serialCommand = '@'; // Serial / Web Server commands char userCommand = '@'; // Serial / Web Server commands unsigned long lastVsyncLock = millis(); +unsigned long resetCountdown = 0; + +/** + * @brief Schedule the device reset + * + * @param millis + */ +void resetInMSec(unsigned long ms) { + if(ms != 0) + resetCountdown = ms + millis(); + if(resetCountdown == 0) + return; + if(millis() >= resetCountdown) { + server.stop(); + webSocket.close(); + LittleFS.end(); + _WSN(F("restarting...")); + delay(100); + ESP.reset(); + } +} /** * @brief @@ -235,73 +256,62 @@ void setup() // uopt->presetPreference = Output960P; // fresh data ? uopt->presetSlot = lowByte(f.read()); - uopt->enableFrameTimeLock = (uint8_t)(f.read() - '0'); - if (uopt->enableFrameTimeLock > 1) - uopt->enableFrameTimeLock = 0; - - uopt->frameTimeLockMethod = (uint8_t)(f.read() - '0'); - if (uopt->frameTimeLockMethod > 1) - uopt->frameTimeLockMethod = 0; - - uopt->enableAutoGain = (uint8_t)(f.read() - '0'); - if (uopt->enableAutoGain > 1) - uopt->enableAutoGain = 0; - - uopt->wantScanlines = (uint8_t)(f.read() - '0'); - if (uopt->wantScanlines > 1) - uopt->wantScanlines = 0; - - uopt->wantOutputComponent = (uint8_t)(f.read() - '0'); - if (uopt->wantOutputComponent > 1) - uopt->wantOutputComponent = 0; - - uopt->deintMode = (uint8_t)(f.read() - '0'); - if (uopt->deintMode > 2) - uopt->deintMode = 0; - - uopt->wantVdsLineFilter = (uint8_t)(f.read() - '0'); - if (uopt->wantVdsLineFilter > 1) - uopt->wantVdsLineFilter = 0; - - uopt->wantPeaking = (uint8_t)(f.read() - '0'); - if (uopt->wantPeaking > 1) - uopt->wantPeaking = 1; - - uopt->preferScalingRgbhv = (uint8_t)(f.read() - '0'); - if (uopt->preferScalingRgbhv > 1) - uopt->preferScalingRgbhv = 1; - - uopt->wantTap6 = (uint8_t)(f.read() - '0'); - if (uopt->wantTap6 > 1) - uopt->wantTap6 = 1; - - uopt->PalForce60 = (uint8_t)(f.read() - '0'); - if (uopt->PalForce60 > 1) - uopt->PalForce60 = 0; - - uopt->matchPresetSource = (uint8_t)(f.read() - '0'); // #14 - if (uopt->matchPresetSource > 1) - uopt->matchPresetSource = 1; - - uopt->wantStepResponse = (uint8_t)(f.read() - '0'); // #15 - if (uopt->wantStepResponse > 1) - uopt->wantStepResponse = 1; - - uopt->wantFullHeight = (uint8_t)(f.read() - '0'); // #16 - if (uopt->wantFullHeight > 1) - uopt->wantFullHeight = 1; - - uopt->enableCalibrationADC = (uint8_t)(f.read() - '0'); // #17 - if (uopt->enableCalibrationADC > 1) - uopt->enableCalibrationADC = 1; - - uopt->scanlineStrength = (uint8_t)(f.read() - '0'); // #18 - if (uopt->scanlineStrength > 0x60) - uopt->enableCalibrationADC = 0x30; - - uopt->disableExternalClockGenerator = (uint8_t)(f.read() - '0'); // #19 - if (uopt->disableExternalClockGenerator > 1) - uopt->disableExternalClockGenerator = 0; + uopt->wantOutputComponent = f.read(); + // if (uopt->wantOutputComponent > 1) + // uopt->wantOutputComponent = 0; + + uopt->preferScalingRgbhv = f.read(); + // if (uopt->preferScalingRgbhv > 1) + // uopt->preferScalingRgbhv = 1; + + uopt->enableCalibrationADC = f.read(); // #17 + // if (uopt->enableCalibrationADC > 1) + // uopt->enableCalibrationADC = 1; + + uopt->disableExternalClockGenerator = f.read(); // #19 + // if (uopt->disableExternalClockGenerator > 1) + // uopt->disableExternalClockGenerator = 0; + + // @sk: the commented options were merged with/moved to slots + // uopt->enableFrameTimeLock = (uint8_t)(f.read() - '0'); + // if (uopt->enableFrameTimeLock > 1) + // uopt->enableFrameTimeLock = 0; + // uopt->frameTimeLockMethod = (uint8_t)(f.read() - '0'); + // if (uopt->frameTimeLockMethod > 1) + // uopt->frameTimeLockMethod = 0; + // uopt->enableAutoGain = (uint8_t)(f.read() - '0'); + // if (uopt->enableAutoGain > 1) + // uopt->enableAutoGain = 0; + // uopt->wantPeaking = (uint8_t)(f.read() - '0'); + // if (uopt->wantPeaking > 1) + // uopt->wantPeaking = 1; + // uopt->wantScanlines = (uint8_t)(f.read() - '0'); + // if (uopt->wantScanlines > 1) + // uopt->wantScanlines = 0; + // uopt->deintMode = (uint8_t)(f.read() - '0'); + // if (uopt->deintMode > 2) + // uopt->deintMode = 0; + // uopt->wantVdsLineFilter = (uint8_t)(f.read() - '0'); + // if (uopt->wantVdsLineFilter > 1) + // uopt->wantVdsLineFilter = 0; + // uopt->wantTap6 = (uint8_t)(f.read() - '0'); + // if (uopt->wantTap6 > 1) + // uopt->wantTap6 = 1; + // uopt->PalForce60 = (uint8_t)(f.read() - '0'); + // if (uopt->PalForce60 > 1) + // uopt->PalForce60 = 0; + // uopt->matchPresetSource = (uint8_t)(f.read() - '0'); // #14 + // if (uopt->matchPresetSource > 1) + // uopt->matchPresetSource = 1; + // uopt->wantStepResponse = (uint8_t)(f.read() - '0'); // #15 + // if (uopt->wantStepResponse > 1) + // uopt->wantStepResponse = 1; + // uopt->wantFullHeight = (uint8_t)(f.read() - '0'); // #16 + // if (uopt->wantFullHeight > 1) + // uopt->wantFullHeight = 1; + // uopt->scanlineStrength = (uint8_t)(f.read() - '0'); // #18 + // if (uopt->scanlineStrength > 0x60) + // uopt->enableCalibrationADC = 0x30; f.close(); } @@ -388,6 +398,8 @@ void setup() zeroAll(); setResetParameters(); prepareSyncProcessor(); + // preferencesv2.txt data loaded, load current slot + slotLoad(uopt->presetSlot); uint8_t productId = GBS::CHIP_ID_PRODUCT::read(); uint8_t revisionId = GBS::CHIP_ID_REVISION::read(); @@ -443,13 +455,10 @@ void loop() menuLoop(); wifiLoop(0); // WiFi + OTA + WS + MDNS, checks for server enabled + started - // Serial takes precedence handleSerialCommand(); - yield(); // handle user commands handleUserCommand(); - yield(); // run FrameTimeLock if enabled if (uopt->enableFrameTimeLock && rto->sourceDisconnected == false @@ -485,21 +494,20 @@ void loop() } } lastVsyncLock = millis(); +_DBGN(F("6")); } - if (rto->syncWatcherEnabled && rto->boardHasPower) { if ((millis() - lastTimeInterruptClear) > 3000) { GBS::INTERRUPT_CONTROL_00::write(0xfe); // reset except for SOGBAD GBS::INTERRUPT_CONTROL_00::write(0x00); lastTimeInterruptClear = millis(); +_DBGN(F("7")); } } - // information mode if (rto->printInfos == true) { printInfo(); } - // uint16_t testbus = GBS::TEST_BUS::read() & 0x0fff; // if (testbus >= 0x0FFD){ // _WSN(testbus,HEX); @@ -537,8 +545,8 @@ void loop() GBS::PAD_BOUT_EN::write(debugPinBackup); // debug output pin back on } } +_DBGN(F("9")); } - // init frame sync + besthtotal routine if (rto->autoBestHtotalEnabled && !FrameSync::ready() && rto->syncWatcherEnabled) { if (rto->continousStableCounter >= 10 && rto->coastPositionIsSet && @@ -549,10 +557,10 @@ void loop() if (((htotal > (pllad - 3)) && (htotal < (pllad + 3)))) { runAutoBestHTotal(); } +_DBGN(F("10")); } } } - // update clamp + coast positions after preset change // do it quickly if ((rto->videoStandardInput <= 14 && rto->videoStandardInput != 0) && rto->syncWatcherEnabled && !rto->coastPositionIsSet) { @@ -567,9 +575,9 @@ void loop() } } } +_DBGN(F("11")); } } - // don't exclude modes 13 / 14 / 15 (rgbhv bypass) if ((rto->videoStandardInput != 0) && (rto->continousStableCounter >= 4) && !rto->clampPositionIsSet && rto->syncWatcherEnabled) { @@ -579,8 +587,8 @@ void loop() GBS::SP_NO_CLAMP_REG::write(0); } } +_DBGN(F("12")); } - // later stage post preset adjustments if ((rto->applyPresetDoneStage == 1) && ((rto->continousStableCounter > 35 && rto->continousStableCounter < 45) || // this @@ -614,6 +622,7 @@ void loop() } rto->applyPresetDoneStage = 0; } +_DBGN(F("13")); } else if (rto->applyPresetDoneStage == 1 && (rto->continousStableCounter > 35)) { // 3rd chance GBS::DAC_RGBS_PWDNZ::write(1); // enable DAC // 3rd chance @@ -624,13 +633,13 @@ void loop() // sync clocks now externalClockGenSyncInOutRate(); rto->applyPresetDoneStage = 0; // timeout +_DBGN(F("13.5")); } - if (rto->applyPresetDoneStage == 10) { rto->applyPresetDoneStage = 11; // set first, so we don't loop applying presets setOutModeHdBypass(false); +_DBGN(F("14")); } - if (rto->syncWatcherEnabled == true && rto->sourceDisconnected == true && rto->boardHasPower) { if ((millis() - lastTimeSourceCheck) >= 500) { if (checkBoardPower()) { @@ -651,9 +660,9 @@ void loop() rto->currentLevelSOG = 6; GBS::ADC_SOGCTRL::write(rto->currentLevelSOG); } +_DBGN(F("15")); } } - // has the GBS board lost power? // check at 2 points, in case one doesn't register // low values chosen to not do this check on small sync issues if ((rto->noSyncCounter == 61 || rto->noSyncCounter == 62) && rto->boardHasPower) { @@ -666,8 +675,8 @@ void loop() } else { rto->noSyncCounter = 63; // avoid checking twice } +_DBGN(F("16")); } - // power good now? // added syncWatcherEnabled check to enable passive mode // (passive mode = watching OFW without interrupting) if (!rto->boardHasPower && rto->syncWatcherEnabled) { // then check if power has come on @@ -690,9 +699,9 @@ void loop() delay(100); goLowPowerWithInputDetection(); } +_DBGN(F("17")); } } - #ifdef HAVE_PINGER_LIBRARY // periodic pings for debugging WiFi issues if (WiFi.status() == WL_CONNECTED) { @@ -714,4 +723,6 @@ void loop() if (rto->allowUpdatesOTA) { ArduinoOTA.handle(); } + // handle reset routine + resetInMSec(); } diff --git a/public/assets/fonts/material.woff2 b/public/assets/fonts/material.woff2 index 38e24a17fbe153f39915af23fc4759dd53e71415..2eb4fb4997c4987aa93c222b053a22d23e45f03c 100644 GIT binary patch literal 125116 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 literal 98812 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