static void eepromLoadBaseConfig(unsigned char forceDefault) { // The compiler likes to join eepromLoadBaseConfig and eepromLoadProbeConfig s // this union saves stack space by reusing the same memory area for both structs union { struct __eeprom_data base; struct __eeprom_probe probe; } config; econfig_read_block(&config.base, 0, sizeof(__eeprom_data)); forceDefault = forceDefault || config.base.magic != EEPROM_MAGIC; if (forceDefault != 0) { memcpy_P(&config.base, &DEFAULT_CONFIG[forceDefault - 1], sizeof(__eeprom_data)); econfig_write_block(&config.base, 0, sizeof(__eeprom_data)); } pid.setSetPoint(config.base.setPoint); pid.LidOpenOffset = config.base.lidOpenOffset; pid.setLidOpenDuration(config.base.lidOpenDuration); memcpy(pid.Pid, config.base.pidConstants, sizeof(config.base.pidConstants)); if (config.base.manualMode) pid.setPidOutput(0); setLcdBacklight(config.base.lcdBacklight); #ifdef HEATERMETER_RFM12 memcpy(rfMap, config.base.rfMap, sizeof(rfMap)); #endif pid.setUnits(config.base.pidUnits == 'C' ? 'C' : 'F'); pid.setMinFanSpeed(config.base.minFanSpeed); pid.setMaxFanSpeed(config.base.maxFanSpeed); pid.setOutputFlags(config.base.pidOutputFlags); g_HomeDisplayMode = config.base.homeDisplayMode; pid.setMinServoPos(config.base.minServoPos); pid.setMaxServoPos(config.base.maxServoPos); for (unsigned char led = 0; led<LED_COUNT; ++led) ledmanager.setAssignment(led, config.base.ledConf[led]); }
static void storeMaxFanSpeed(unsigned char maxFanSpeed) { maxFanSpeed = constrain(maxFanSpeed, 0, 100); pid.setMaxFanSpeed(maxFanSpeed); config_store_byte(maxFanSpeed, maxFanSpeed); }