Added inheritance of LCD controller setting to OLED menus. Can show fan volts in detailed control menu.
This commit is contained in:
parent
cc98073eac
commit
4bc1c79a6d
|
@ -159,6 +159,7 @@ TelnetSpy DebugPort;
|
|||
sRxLine PCline;
|
||||
long lastRxTime; // used to observe inter character delays
|
||||
bool bHasOEMController = false;
|
||||
bool bHasOEMLCDController = false;
|
||||
bool bHasHtrData = false;
|
||||
|
||||
bool bReportBlueWireData = REPORT_RAW_DATA;
|
||||
|
@ -488,6 +489,7 @@ void loop()
|
|||
}
|
||||
if(CommState.is(CommStates::OEMCtrlRx)) {
|
||||
bHasOEMController = false;
|
||||
bHasOEMLCDController = false;
|
||||
if(bReportRecyleEvents)
|
||||
DebugPort.println("Timeout collecting OEM controller data, returning to Idle State");
|
||||
}
|
||||
|
@ -532,6 +534,7 @@ void loop()
|
|||
// Skip state machine immediately to BTC_Tx, sending our own settings.
|
||||
bHasHtrData = false;
|
||||
bHasOEMController = false;
|
||||
bHasOEMLCDController = false;
|
||||
bool isBTCmaster = true;
|
||||
TxManage.PrepareFrame(DefaultBTCParams, isBTCmaster); // use our parameters, and mix in NV storage values
|
||||
TxManage.Start(timenow);
|
||||
|
@ -593,6 +596,9 @@ void loop()
|
|||
|
||||
// filled OEM controller frame
|
||||
OEMCtrlFrame.setTime();
|
||||
// LCD controllers use 0x76 as first byte, rotary knobs use 0x78
|
||||
bHasOEMLCDController = (OEMCtrlFrame.Controller.Byte0 != 0x78);
|
||||
|
||||
CommState.set(CommStates::HeaterRx1);
|
||||
break;
|
||||
|
||||
|
@ -1125,6 +1131,11 @@ bool hasOEMcontroller()
|
|||
return bHasOEMController;
|
||||
}
|
||||
|
||||
bool hasOEMLCDcontroller()
|
||||
{
|
||||
return bHasOEMLCDController;
|
||||
}
|
||||
|
||||
int getSmartError()
|
||||
{
|
||||
return SmartError.getError();
|
||||
|
|
|
@ -112,7 +112,10 @@ CDetailedScreen::show()
|
|||
showGlowPlug(power);
|
||||
}
|
||||
|
||||
showFan(getHeaterInfo().getFan_Actual());
|
||||
if(_showTarget)
|
||||
showFanV(getHeaterInfo().getFan_Voltage());
|
||||
else
|
||||
showFan(getHeaterInfo().getFan_Actual());
|
||||
|
||||
showFuel(getHeaterInfo().getPump_Actual());
|
||||
|
||||
|
@ -227,6 +230,7 @@ CDetailedScreen::keyHandler(uint8_t event)
|
|||
if(event & key_Centre) { // short Centre press - show target
|
||||
_showTarget = millis() + 3500;
|
||||
}
|
||||
_ScreenManager.reqUpdate();
|
||||
}
|
||||
_keyRepeatCount = -1;
|
||||
}
|
||||
|
@ -354,6 +358,21 @@ CDetailedScreen::showFan(int RPM)
|
|||
_printMenuText(X_FAN_ICON + (W_FAN_ICON/2), Y_BASELINE, msg, false, eCentreJustify);
|
||||
}
|
||||
|
||||
void
|
||||
CDetailedScreen::showFanV(float volts)
|
||||
{
|
||||
// NOTE: fan rotation animation performed in animateOLED
|
||||
_animateRPM = volts != 0; // used by animation routine
|
||||
|
||||
_display.setTextColor(WHITE);
|
||||
char msg[16];
|
||||
sprintf(msg, "%.1fV", volts);
|
||||
#ifdef MINI_FANLABEL
|
||||
CTransientFont AF(_display, &MINIFONT); // temporarily use a mini font
|
||||
#endif
|
||||
_printMenuText(X_FAN_ICON + (W_FAN_ICON/2), Y_BASELINE, msg, false, eCentreJustify);
|
||||
}
|
||||
|
||||
void
|
||||
CDetailedScreen::showFuel(float rate)
|
||||
{
|
||||
|
|
|
@ -45,6 +45,7 @@ class CDetailedScreen : public CScreenHeader
|
|||
void showBodyThermometer(int actual);
|
||||
void showGlowPlug(float power);
|
||||
void showFan(int RPM);
|
||||
void showFanV(float volts);
|
||||
void showFuel(float rate);
|
||||
void showRunState(int state, int errstate);
|
||||
public:
|
||||
|
|
|
@ -43,6 +43,7 @@ static const int plugPowers[] = { 35, 40, 45, 80, 85, 90};
|
|||
CSettingsScreen::CSettingsScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr)
|
||||
{
|
||||
_animateCount = 0;
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -58,22 +59,35 @@ CSettingsScreen::show()
|
|||
|
||||
if(!CPasswordScreen::show()) {
|
||||
|
||||
sprintf(str, "%.0fV", getHeaterInfo().getSystemVoltage());
|
||||
_printMenuText(_display.width(), Line3, str, false, eRightJustify);
|
||||
if(_nAdoptSettings == 1) {
|
||||
_display.clearDisplay();
|
||||
_display.writeFillRect(0, 0, 128, 20, WHITE);
|
||||
_printInverted(_display.xCentre(), 2, "Adopt LCD controller", true, eCentreJustify);
|
||||
_printInverted(_display.xCentre(), 11, "settings? ", true, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 35, "Press RIGHT to", false, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 45, "inherit and save", false, eCentreJustify);
|
||||
}
|
||||
else if(_nAdoptSettings == 2) {
|
||||
_display.clearDisplay();
|
||||
_printInverted(_display.xCentre(), 2, " Cannot inherit knob ", true, eCentreJustify);
|
||||
_printInverted(_display.xCentre(), 11, " controller settings ", true, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 35, "Press any key", false, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 45, "to abort", false, eCentreJustify);
|
||||
}
|
||||
else {
|
||||
sprintf(str, "%.0fV", getHeaterInfo().getSystemVoltage());
|
||||
_printMenuText(_display.width(), Line3, str, false, eRightJustify);
|
||||
|
||||
sprintf(str, "Min: %.1f/%d", getHeaterInfo().getPump_Min(), getHeaterInfo().getFan_Min());
|
||||
_printMenuText(0, Line2, str);
|
||||
// sprintf(str, "SN-%d", getHeaterInfo().getFan_Sensor());
|
||||
// _printMenuText(_display.width(), yPos, str, false, eRightJustify);
|
||||
sprintf(str, "Min: %.1f/%d", getHeaterInfo().getPump_Min(), getHeaterInfo().getFan_Min());
|
||||
_printMenuText(0, Line2, str);
|
||||
|
||||
sprintf(str, "Max: %.1f/%d", getHeaterInfo().getPump_Max(), getHeaterInfo().getFan_Max());
|
||||
_printMenuText(0, Line1, str);
|
||||
// sprintf(str, "PF-%d", getHeaterInfo().getGlow_Drive());
|
||||
// _printMenuText(_display.width(), yPos, str, false, eRightJustify);
|
||||
// navigation line
|
||||
int yPos = 53;
|
||||
int xPos = _display.xCentre();
|
||||
_printMenuText(xPos, yPos, "<- enter ->", true, eCentreJustify);
|
||||
sprintf(str, "Max: %.1f/%d", getHeaterInfo().getPump_Max(), getHeaterInfo().getFan_Max());
|
||||
_printMenuText(0, Line1, str);
|
||||
|
||||
int yPos = 53;
|
||||
int xPos = _display.xCentre();
|
||||
_printMenuText(xPos, yPos, "<- enter ->", true, eCentreJustify);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -82,13 +96,16 @@ CSettingsScreen::show()
|
|||
bool
|
||||
CSettingsScreen::animate()
|
||||
{
|
||||
if(CScreen::animate())
|
||||
return true;
|
||||
|
||||
char msg[16];
|
||||
|
||||
if(isPasswordBusy()) { // Password screen activity
|
||||
_printMenuText(Column, Line1, " ");
|
||||
_printMenuText(Column, Line2, " ");
|
||||
}
|
||||
else {
|
||||
else if(_nAdoptSettings == 0) {
|
||||
_animateCount++;
|
||||
ROLLUPPERLIMIT(_animateCount, 9, 0);
|
||||
|
||||
|
@ -134,8 +151,23 @@ CSettingsScreen::keyHandler(uint8_t event)
|
|||
{
|
||||
if(CPasswordScreen::keyHandler(event)) {
|
||||
if(_isPasswordOK()) {
|
||||
_ScreenManager.selectSettingsScreen(true);
|
||||
if(_nAdoptSettings == 3) {
|
||||
setPumpMin(getHeaterInfo().getPump_Min());
|
||||
setPumpMax(getHeaterInfo().getPump_Max());
|
||||
setFanMin(getHeaterInfo().getFan_Min());
|
||||
setFanMax(getHeaterInfo().getFan_Max());
|
||||
setFanSensor(getHeaterInfo().getFan_Sensor());
|
||||
setSystemVoltage(getHeaterInfo().getSystemVoltage());
|
||||
saveNV();
|
||||
_showStoringMessage();
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
else {
|
||||
_ScreenManager.selectSettingsScreen(true);
|
||||
}
|
||||
}
|
||||
if(!isPasswordBusy())
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
|
||||
else {
|
||||
|
@ -143,19 +175,47 @@ CSettingsScreen::keyHandler(uint8_t event)
|
|||
if(event & keyPressed) {
|
||||
// press LEFT
|
||||
if(event & key_Left) {
|
||||
_ScreenManager.prevScreen();
|
||||
if(_nAdoptSettings == 0)
|
||||
_ScreenManager.prevScreen();
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
// press RIGHT
|
||||
if(event & key_Right) {
|
||||
_ScreenManager.nextScreen();
|
||||
if(_nAdoptSettings == 1) {
|
||||
_nAdoptSettings = 3;
|
||||
_getPassword();
|
||||
}
|
||||
else {
|
||||
if(_nAdoptSettings == 0)
|
||||
_ScreenManager.nextScreen();
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
}
|
||||
// press UP
|
||||
if(event & (key_Up | key_Centre)) {
|
||||
if(hasOEMcontroller())
|
||||
_reqOEMWarning();
|
||||
else {
|
||||
_getPassword();
|
||||
if(_nAdoptSettings == 0) {
|
||||
if(hasOEMcontroller()) {
|
||||
if(event & key_Centre)
|
||||
_reqOEMWarning();
|
||||
else {
|
||||
if(hasOEMLCDcontroller()) {
|
||||
_nAdoptSettings = 1;
|
||||
}
|
||||
else {
|
||||
_nAdoptSettings = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
_getPassword();
|
||||
}
|
||||
}
|
||||
else {
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
}
|
||||
if(event & key_Down) {
|
||||
_nAdoptSettings = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ class CScreenManager;
|
|||
|
||||
class CSettingsScreen : public CPasswordScreen {
|
||||
int _animateCount;
|
||||
int _nAdoptSettings;
|
||||
public:
|
||||
CSettingsScreen(C128x64_OLED& display, CScreenManager& mgr);
|
||||
bool show();
|
||||
|
|
|
@ -50,6 +50,7 @@ extern void resetWebModerator();
|
|||
extern void resetJSONmoderator();
|
||||
extern const char* getBlueWireStatStr();
|
||||
extern bool hasOEMcontroller();
|
||||
extern bool hasOEMLCDcontroller();
|
||||
extern int getBlueWireStat();
|
||||
extern int getSmartError();
|
||||
|
||||
|
|
Loading…
Reference in a new issue