Added inheritance of LCD controller setting to OLED menus. Can show fan volts in detailed control menu.

This commit is contained in:
rljonesau 2019-02-27 22:51:02 +11:00
parent cc98073eac
commit 4bc1c79a6d
6 changed files with 116 additions and 23 deletions

View file

@ -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();

View file

@ -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)
{

View file

@ -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:

View file

@ -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;
}
}
}

View file

@ -30,6 +30,7 @@ class CScreenManager;
class CSettingsScreen : public CPasswordScreen {
int _animateCount;
int _nAdoptSettings;
public:
CSettingsScreen(C128x64_OLED& display, CScreenManager& mgr);
bool show();

View file

@ -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();