@@ -24,6 +24,8 @@ namespace
2424{
2525 EthernetClass &Networking = Ethernet;
2626 typedef EthernetUDP SpaUdp;
27+
28+
2729}
2830#endif
2931
@@ -464,6 +466,12 @@ BalBoa::BalBoaSpa::GetRunningFilter() const
464466}
465467
466468
469+ BalBoa::TriState
470+ BalBoa::BalBoaSpa::IsTimeUnset () const
471+ {
472+ return _timeUnset;
473+ }
474+
467475BalBoa::TriState
468476BalBoa::BalBoaSpa::IsHeating () const
469477{
@@ -504,6 +512,15 @@ BalBoa::BalBoaSpa::GetPanelMessages() const
504512}
505513
506514
515+ BalBoa::TriState
516+ BalBoa::BalBoaSpa::IsPriming () const
517+ {
518+ _changes &= ~scPriming;
519+
520+ return _priming;
521+ }
522+
523+
507524void
508525BalBoa::BalBoaSpa::SetTime (
509526 const BalBoa::SpaTime &time)
@@ -582,32 +599,44 @@ void
582599BalBoa::BalBoaSpa::CrackStatusMessage (const byte *_messageBuffer)
583600{
584601 const StatusMessage *pMessage = reinterpret_cast <const StatusMessage *>(_messageBuffer);
602+
603+
604+ // Only mark this off if something changed.
605+ // _waitingForMessages &= ~wfmStatus;
606+
607+ unsigned int newChanges = 0 ;
585608
586609 if (pMessage->_hour != _time.hour )
587610 {
588611 _time.hour = pMessage->_hour ;
589- _changes |= scTime;
612+ newChanges |= scTime;
590613 }
591614
592615 if (pMessage->_minute != _time.minute )
593616 {
594617 _time.minute = pMessage->_minute ;
595- _changes |= scTime;
618+ newChanges |= scTime;
596619 }
597620
598621 if (pMessage->_24hrTime != _time.displayAs24Hr )
599622 {
600623 _time.displayAs24Hr = pMessage->_24hrTime ;
601- _changes |= scTime;
602- _changes |= scFilterTimes; // Because time format has changed.
624+ newChanges |= scTime;
625+ newChanges |= scFilterTimes; // Because time format has changed.
626+ }
627+
628+ if (pMessage->_timeUnset != _timeUnset)
629+ {
630+ _timeUnset = static_cast <TriState>(pMessage->_timeUnset );
631+ newChanges |= scTime;
603632 }
604633
605634 if (pMessage->_currentTemp != _currentTemp.temp )
606635 {
607636 _currentTemp.temp = pMessage->_currentTemp ;
608637 _currentTemp.isCelsiusX2 = pMessage->_tempScaleCelsius ;
609638
610- _changes |= scTemp;
639+ newChanges |= scTemp;
611640 }
612641
613642
@@ -616,68 +645,78 @@ BalBoa::BalBoaSpa::CrackStatusMessage(const byte *_messageBuffer)
616645 _setPoint.temp = pMessage->_setTemp ;
617646 _setPoint.isCelsiusX2 = pMessage->_tempScaleCelsius ;
618647
619- _changes |= scSetPoint;
648+ newChanges |= scSetPoint;
620649 }
621650
622651
623652 if (static_cast <TriState>(pMessage->_tempRange ) != _rangeHigh)
624653 {
625654 _rangeHigh = static_cast <TriState>(pMessage->_tempRange );
626- _changes |= scSetPoint;
655+ newChanges |= scSetPoint;
627656 }
628657
629658 if (static_cast <TriState>(pMessage->_tempScaleCelsius ) != _tempCelsius)
630659 {
631660 _tempCelsius = static_cast <TriState>(pMessage->_tempScaleCelsius );
632- _changes |= (scTemp | scSetPoint);
661+ newChanges |= (scTemp | scSetPoint);
633662 }
634663
635664 if (pMessage->_pump1 != _pump1Speed)
636665 {
637666 _pump1Speed = static_cast <BalBoa::PumpSpeed>(pMessage->_pump1 );
638667
639- _changes |= scPump1;
668+ newChanges |= scPump1;
640669 }
641670
642671 if (pMessage->_pump2 != _pump2Speed)
643672 {
644673 _pump2Speed = static_cast <BalBoa::PumpSpeed>(pMessage->_pump2 );
645674
646- _changes |= scPump2;
675+ newChanges |= scPump2;
647676 }
648677
649678 if (static_cast <TriState>(pMessage->_light != 0 ) != _lights)
650679 {
651680 _lights = static_cast <TriState>(pMessage->_light != 0 );
652- _changes |= scLights;
681+ newChanges |= scLights;
653682 }
654683
655684 if (static_cast <TriState>(pMessage->_heating != 0 ) != _heating)
656685 {
657686 _heating = static_cast <TriState>(pMessage->_heating != 0 );
658- _changes |= scHeating;
687+ newChanges |= scHeating;
659688 }
660689
661- if (static_cast <TriState>(pMessage->_filter1Running ) != _filter1Running)
690+ if (static_cast <TriState>(pMessage->_filter1Running != 0 ) != _filter1Running)
662691 {
663- _filter1Running = static_cast <TriState>(pMessage->_filter1Running );
664- _changes |= scFilterRunning;
692+ _filter1Running = static_cast <TriState>(pMessage->_filter1Running != 0 );
693+ newChanges |= scFilterRunning;
665694 }
666695
667- if (static_cast <TriState>(pMessage->_filter2Running ) != _filter2Running)
696+ if (static_cast <TriState>(pMessage->_filter2Running != 0 ) != _filter2Running)
668697 {
669- _filter2Running = static_cast <TriState>(pMessage->_filter2Running );
670- _changes |= scFilterRunning;
698+ _filter2Running = static_cast <TriState>(pMessage->_filter2Running != 0 );
699+ newChanges |= scFilterRunning;
671700 }
672701
673702 if (pMessage->_panelMessage != _messages)
674703 {
675704 _messages = pMessage->_panelMessage ;
676- _changes |= scPanelMessages;
705+ newChanges |= scPanelMessages;
677706 }
678707
679- _waitingForMessages &= ~wfmStatus;
708+ if (static_cast <TriState>(pMessage->_priming != 0 ) != _priming)
709+ {
710+ _priming = static_cast <TriState>(pMessage->_priming != 0 );
711+ newChanges |= scPriming;
712+ }
680713
714+ if (newChanges)
715+ {
716+ _waitingForMessages &= ~wfmStatus;
717+
718+ _changes |= newChanges;
719+ }
681720
682721 // Look to see how the 'unknown' areas change, maybe we can figure some more stuff
683722 // out.
@@ -694,6 +733,7 @@ BalBoa::BalBoaSpa::CrackStatusMessage(const byte *_messageBuffer)
694733 pMess->_panelMessage &= 0b11110001 ;
695734 pMess->_24hrTime = 0 ;
696735 pMess->_tempRange = 0 ;
736+ pMess->_timeUnset = 0 ;
697737 pMess->_heating = 0 ;
698738 pMess->_pump1 = 0 ;
699739 pMess->_pump2 = 0 ;
@@ -834,6 +874,7 @@ BalBoa::BalBoaSpa::ResetInfo()
834874 _pump1Speed = psUNKNOWN;
835875 _pump2Speed = psUNKNOWN;
836876 _recirc = psUNKNOWN;
877+ _timeUnset = tsUnknown;
837878 _lights = tsUnknown;
838879 _heating = tsUnknown;
839880 _filter1Running = tsUnknown;
0 commit comments