OLED Display - Hide unused slot and center active one

If one slot is disabled, show active slot information only
This commit is contained in:
KD4Z 2018-04-08 18:29:35 -04:00
parent c623ba8730
commit c1d7c0972f
2 changed files with 66 additions and 53 deletions

113
OLED.cpp
View file

@ -107,11 +107,13 @@ const unsigned char logo_fusion_bmp [] =
}; };
COLED::COLED(unsigned char displayType, unsigned char displayBrightness, bool displayInvert, bool displayScroll) : COLED::COLED(unsigned char displayType, unsigned char displayBrightness, bool displayInvert, bool displayScroll, bool slot1Enabled, bool slot2Enabled) :
m_displayType(displayType), m_displayType(displayType),
m_displayBrightness(displayBrightness), m_displayBrightness(displayBrightness),
m_displayInvert(displayInvert), m_displayInvert(displayInvert),
m_displayScroll(displayScroll) m_displayScroll(displayScroll),
m_slot1Enabled(slot1Enabled),
m_slot2Enabled(slot2Enabled)
{ {
} }
@ -148,7 +150,7 @@ bool COLED::open()
display.display(); // display it (clear display) display.display(); // display it (clear display)
OLED_statusbar(); OLED_statusbar();
display.setCursor(0,OLED_LINE1); display.setCursor(0,OLED_LINE3);
display.print("Startup"); display.print("Startup");
display.display(); display.display();
@ -257,41 +259,41 @@ void COLED::writeDMRInt(unsigned int slotNo,const std::string& src,bool group,co
if (m_mode != MODE_DMR) { if (m_mode != MODE_DMR) {
display.clearDisplay(); display.clearDisplay();
m_mode = MODE_DMR;
m_mode = MODE_DMR; clearDMRInt(slotNo);
if (slotNo == 1U)
{
display.fillRect(0,OLED_LINE4,display.width(),20,BLACK); //20=> clear 2 lines
display.setCursor(0,OLED_LINE4);
display.print("2 Listening");
}
else
{
display.fillRect(0,OLED_LINE2,display.width(),20,BLACK); //20=> clear 2 lines
display.setCursor(0,OLED_LINE2);
display.print("1 Listening");
}
} }
// if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2
if (slotNo == 1U) // if single slot, use lines 3-4
{ if ( m_slot1Enabled && m_slot2Enabled ){
display.fillRect(0,OLED_LINE2,display.width(),20,BLACK); if (slotNo == 1U)
display.setCursor(0,OLED_LINE2); {
display.printf("%i %s %s",slotNo,type,src.c_str()); display.fillRect(0,OLED_LINE2,display.width(),40,BLACK);
display.setCursor(0,OLED_LINE3); display.setCursor(0,OLED_LINE2);
display.printf("%s%s",group ? "TG" : "",dst.c_str()); display.printf("%i %s %s",slotNo,type,src.c_str());
} display.setCursor(0,OLED_LINE3);
else display.printf("%s%s",group ? "TG" : "",dst.c_str());
{ }
display.fillRect(0,OLED_LINE4,display.width(),20,BLACK); else
display.setCursor(0,OLED_LINE4); {
display.printf("%i %s %s",slotNo,type,src.c_str()); display.fillRect(0,OLED_LINE4,display.width(),40,BLACK);
display.setCursor(0,OLED_LINE5); display.setCursor(0,OLED_LINE4);
display.printf("%s%s", group ? "TG" : "", dst.c_str()); display.printf("%i %s %s",slotNo,type,src.c_str());
} display.setCursor(0,OLED_LINE5);
display.setCursor(0,OLED_LINE6); display.printf("%s%s", group ? "TG" : "", dst.c_str());
}
}
else {
display.fillRect(0,OLED_LINE3,display.width(),40,BLACK);
display.setCursor(0,OLED_LINE3);
display.printf("%i %s %s",slotNo,type,src.c_str());
display.setCursor(0,OLED_LINE4);
display.printf("%s%s",group ? "TG" : "",dst.c_str());
}
display.fillRect(0,OLED_LINE6,display.width(),20,BLACK);
display.setCursor(0,OLED_LINE6);
display.printf("%s",m_ipaddress.c_str()); display.printf("%s",m_ipaddress.c_str());
OLED_statusbar(); OLED_statusbar();
display.display(); display.display();
@ -299,20 +301,31 @@ void COLED::writeDMRInt(unsigned int slotNo,const std::string& src,bool group,co
void COLED::clearDMRInt(unsigned int slotNo) void COLED::clearDMRInt(unsigned int slotNo)
{ {
if (slotNo == 1U) // if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2
{ // if single slot, use lines 3-4
display.fillRect(0, OLED_LINE2, display.width(), 20, BLACK); if ( m_slot1Enabled && m_slot2Enabled ){
display.setCursor(0,OLED_LINE2); if (slotNo == 1U)
display.print("1 Listening"); {
} display.fillRect(0, OLED_LINE2, display.width(), 40, BLACK);
else display.setCursor(0,OLED_LINE2);
{ display.print("1 Listening");
display.fillRect(0, OLED_LINE4, display.width(), 20, BLACK); }
display.setCursor(0, OLED_LINE4); else
display.print("2 Listening"); {
display.fillRect(0, OLED_LINE4, display.width(), 40, BLACK);
display.setCursor(0, OLED_LINE4);
display.print("2 Listening");
}
}
else {
display.fillRect(0, OLED_LINE3, display.width(), 40, BLACK);
display.setCursor(0,OLED_LINE3);
display.printf("%i Listening",slotNo);
}
}
display.setCursor(0,OLED_LINE6); display.fillRect(0, OLED_LINE5, display.width(), 20, BLACK);
display.setCursor(0,OLED_LINE5);
display.printf("%s",m_ipaddress.c_str()); display.printf("%s",m_ipaddress.c_str());
display.display(); display.display();
} }

6
OLED.h
View file

@ -40,7 +40,7 @@
class COLED : public CDisplay class COLED : public CDisplay
{ {
public: public:
COLED(unsigned char displayType, unsigned char displayBrighness, bool displayInvert, bool displayScroll); COLED(unsigned char displayType, unsigned char displayBrighness, bool displayInvert, bool displayScroll, bool slot1Enabled, bool slot2Enabled);
virtual ~COLED(); virtual ~COLED();
virtual bool open(); virtual bool open();
@ -78,12 +78,12 @@ private:
unsigned char m_displayBrightness; unsigned char m_displayBrightness;
bool m_displayInvert; bool m_displayInvert;
bool m_displayScroll; bool m_displayScroll;
bool m_slot1Enabled;
bool m_slot2Enabled;
std::string m_ipaddress; std::string m_ipaddress;
ArduiPi_OLED display; ArduiPi_OLED display;
void OLED_statusbar(); void OLED_statusbar();
}; };
#endif #endif