2016-05-06 23:03:39 +00:00
|
|
|
/*
|
2018-01-17 19:04:00 +00:00
|
|
|
* Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX
|
2016-05-06 23:03:39 +00:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "OLED.h"
|
2018-04-07 15:49:12 +00:00
|
|
|
#include "Log.h"
|
|
|
|
|
|
|
|
static bool networkInfoInitialized = false;
|
|
|
|
static unsigned char passCounter = 0;
|
2016-05-06 23:03:39 +00:00
|
|
|
|
2017-08-06 16:35:10 +00:00
|
|
|
//Logo MMDVM for Idle Screen
|
2016-10-20 20:49:51 +00:00
|
|
|
static unsigned char logo_glcd_bmp[] =
|
2017-08-06 16:35:10 +00:00
|
|
|
{
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
2017-08-12 16:42:23 +00:00
|
|
|
0x01, 0xF8, 0x03, 0xFC, 0x7F, 0x80, 0x3F, 0xC7, 0xFF, 0xFC, 0xF8, 0x00, 0xF9, 0xFC, 0x01, 0xFE,
|
|
|
|
0x01, 0xFC, 0x07, 0xFC, 0x7F, 0xC0, 0x7F, 0xC4, 0x00, 0x02, 0x48, 0x00, 0x91, 0xFE, 0x03, 0xFE,
|
|
|
|
0x03, 0xFC, 0x07, 0xFC, 0x7F, 0xC0, 0x7F, 0xC5, 0xFF, 0xF1, 0x24, 0x01, 0x23, 0xFE, 0x03, 0xFE,
|
|
|
|
0x03, 0xFE, 0x0F, 0xBC, 0x7B, 0xE0, 0xFB, 0xC5, 0x00, 0x09, 0x24, 0x01, 0x23, 0xDF, 0x07, 0xDE,
|
|
|
|
0x07, 0xDE, 0x0F, 0x3C, 0x79, 0xE0, 0xF3, 0xC5, 0x00, 0x05, 0x12, 0x02, 0x47, 0xCF, 0x07, 0x9E,
|
|
|
|
0x07, 0x9F, 0x1F, 0x3C, 0x79, 0xF1, 0xF3, 0xC5, 0x00, 0x05, 0x12, 0x02, 0x47, 0x8F, 0x8F, 0x9E,
|
|
|
|
0x0F, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC5, 0x00, 0x05, 0x09, 0x04, 0x8F, 0x87, 0x8F, 0x1E,
|
|
|
|
0x0F, 0x0F, 0xBE, 0x3C, 0x78, 0xFB, 0xE3, 0xC5, 0x00, 0x05, 0x09, 0x04, 0x8F, 0x07, 0xDF, 0x1E,
|
|
|
|
0x1F, 0x07, 0xFC, 0x3C, 0x78, 0x7F, 0xC3, 0xC5, 0x00, 0x05, 0x04, 0x89, 0x1F, 0x03, 0xFE, 0x1E,
|
|
|
|
0x1E, 0x03, 0xFC, 0x3C, 0x78, 0x7F, 0xC3, 0xC5, 0x00, 0x09, 0x04, 0x89, 0x1E, 0x01, 0xFE, 0x1E,
|
|
|
|
0x3E, 0x03, 0xF8, 0x3C, 0x78, 0x3F, 0x83, 0xC5, 0xFF, 0xF1, 0x02, 0x72, 0x3E, 0x01, 0xFC, 0x1E,
|
|
|
|
0x3C, 0x01, 0xF0, 0x3C, 0x78, 0x1F, 0x03, 0xC4, 0x00, 0x02, 0x02, 0x02, 0x3C, 0x00, 0xF8, 0x1E,
|
|
|
|
0x7C, 0x01, 0xF0, 0x3C, 0x78, 0x1F, 0x03, 0xC7, 0xFF, 0xFC, 0x01, 0xFC, 0x7C, 0x00, 0xF8, 0x1E,
|
2017-08-06 16:35:10 +00:00
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
|
|
};
|
|
|
|
|
|
|
|
//Logo D-Star 128x16 px
|
2016-11-11 21:26:07 +00:00
|
|
|
static unsigned char logo_dstar_bmp[] =
|
2017-08-06 16:35:10 +00:00
|
|
|
{
|
|
|
|
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x60, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0xFF, 0xFE, 0x07, 0x80, 0x3F, 0xF8,
|
|
|
|
0x00, 0x00, 0xC0, 0x07, 0xC1, 0xE0, 0x00, 0x00, 0x78, 0x7C, 0xFF, 0xFE, 0x0F, 0xC0, 0x3F, 0xFC,
|
|
|
|
0x00, 0x01, 0xC0, 0x07, 0x80, 0xF0, 0x00, 0x00, 0xE0, 0x3C, 0x07, 0x80, 0x0F, 0xC0, 0x78, 0x0E,
|
|
|
|
0x00, 0x03, 0xC0, 0x07, 0x80, 0x70, 0x00, 0x00, 0xE0, 0x38, 0x07, 0x00, 0x1B, 0xC0, 0x78, 0x0E,
|
|
|
|
0x00, 0x07, 0xC0, 0x07, 0x80, 0x70, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x00, 0x33, 0xC0, 0x70, 0x1E,
|
|
|
|
0x07, 0xFF, 0xFE, 0x07, 0x00, 0x70, 0x00, 0x01, 0xF8, 0x00, 0x07, 0x00, 0x63, 0xC0, 0x70, 0x3C,
|
|
|
|
0x01, 0xFF, 0xF8, 0x0F, 0x00, 0x71, 0xFF, 0xE0, 0xFF, 0xF0, 0x0E, 0x00, 0xE1, 0xE0, 0xFF, 0xE0,
|
|
|
|
0x00, 0x7F, 0xE0, 0x0F, 0x00, 0x60, 0x00, 0x00, 0x03, 0xF8, 0x0E, 0x00, 0xC1, 0xE0, 0xFF, 0xE0,
|
|
|
|
0x00, 0x3F, 0x80, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0x0E, 0x01, 0xFF, 0xE0, 0xE0, 0x70,
|
|
|
|
0x00, 0x7F, 0x00, 0x1E, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x70, 0x0C, 0x03, 0xFC, 0xE0, 0xE0, 0x30,
|
|
|
|
0x00, 0xFF, 0x00, 0x1E, 0x01, 0xC0, 0x00, 0x07, 0x80, 0xE0, 0x1C, 0x07, 0x00, 0xE1, 0xE0, 0x38,
|
|
|
|
0x01, 0xEF, 0x00, 0x1C, 0x07, 0x80, 0x00, 0x07, 0xC1, 0xE0, 0x1C, 0x06, 0x00, 0xF1, 0xC0, 0x38,
|
|
|
|
0x03, 0x87, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x1C, 0x0C, 0x00, 0xF3, 0xC0, 0x38,
|
|
|
|
0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
|
|
};
|
|
|
|
|
|
|
|
//Logo DMR 128x16 px
|
|
|
|
static unsigned char logo_dmr_bmp[] =
|
|
|
|
{
|
|
|
|
0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x3F, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE1, 0xFE, 0x00, 0x00, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x0F, 0xF1, 0xFF, 0x80, 0x01, 0xFF, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x03, 0xF9, 0xFF, 0xC0, 0x03, 0xFF, 0x1F, 0x80, 0x00, 0x0F, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x01, 0xF9, 0xFF, 0xE0, 0x07, 0xFF, 0x1F, 0x80, 0x00, 0x0F, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x01, 0xFD, 0xF3, 0xF0, 0x1F, 0x9F, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x00, 0xFD, 0xF1, 0xFC, 0x3F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x00, 0xFD, 0xF0, 0xFE, 0x7E, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x01, 0xFD, 0xF0, 0x7F, 0xFC, 0x1F, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x01, 0xF9, 0xF0, 0x1F, 0xF0, 0x1F, 0x1F, 0x81, 0xFC, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x07, 0xF9, 0xF0, 0x0F, 0xE0, 0x1F, 0x1F, 0x80, 0x7F, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xF8, 0x00, 0x3F, 0xF1, 0xF0, 0x07, 0xC0, 0x1F, 0x1F, 0x80, 0x3F, 0xC0, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC1, 0xF0, 0x03, 0x80, 0x1F, 0x1F, 0x80, 0x0F, 0xF0, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x1F, 0x80, 0x03, 0xFC, 0x00, 0x00,
|
|
|
|
0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x1F, 0x80, 0x01, 0xFF, 0x00, 0x00
|
|
|
|
};
|
|
|
|
|
|
|
|
//Logo Fusion 128x16
|
|
|
|
const unsigned char logo_fusion_bmp [] =
|
|
|
|
{
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x03, 0xFC, 0x00, 0x1F, 0xE1, 0xFE, 0x1F, 0xFF, 0xF8, 0x7F, 0xC3, 0xFF, 0xFF, 0x1F, 0xFF, 0xFE,
|
|
|
|
0x03, 0xFC, 0x00, 0x3F, 0xC3, 0xFC, 0x3F, 0x80, 0x00, 0x7F, 0x87, 0xF0, 0xFF, 0x0F, 0xF1, 0xFF,
|
|
|
|
0x07, 0xFF, 0xFC, 0x7F, 0x83, 0xF8, 0x7F, 0x80, 0x00, 0xFF, 0x0F, 0xF0, 0xFF, 0x1F, 0xE1, 0xFE,
|
|
|
|
0x0F, 0xFF, 0xF0, 0x7F, 0x07, 0xF0, 0xFF, 0xFF, 0xC1, 0xFF, 0x1F, 0xE1, 0xFE, 0x3F, 0xC3, 0xFC,
|
|
|
|
0x0F, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x7F, 0xFF, 0xE1, 0xFE, 0x3F, 0xC3, 0xFC, 0x3F, 0xC3, 0xFC,
|
|
|
|
0x1F, 0xE0, 0x01, 0xFC, 0x1F, 0xE0, 0x1F, 0xFF, 0xE3, 0xFC, 0x3F, 0xC3, 0xF8, 0x7F, 0x87, 0xF8,
|
|
|
|
0x3F, 0xC0, 0x03, 0xFC, 0x3F, 0xC0, 0x00, 0x3F, 0xC7, 0xF8, 0x7F, 0x87, 0xF8, 0xFF, 0x0F, 0xF0,
|
|
|
|
0x7F, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0x07, 0xF8, 0x7F, 0xCF, 0xE1, 0xFF, 0x1F, 0xF8,
|
|
|
|
0x7F, 0x80, 0x01, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x0F, 0xF0, 0x3F, 0xFF, 0x81, 0xFE, 0x1F, 0xF0,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
|
|
};
|
|
|
|
|
2016-11-11 21:26:07 +00:00
|
|
|
|
2018-04-08 22:29:35 +00:00
|
|
|
COLED::COLED(unsigned char displayType, unsigned char displayBrightness, bool displayInvert, bool displayScroll, bool slot1Enabled, bool slot2Enabled) :
|
2016-05-06 23:03:39 +00:00
|
|
|
m_displayType(displayType),
|
|
|
|
m_displayBrightness(displayBrightness),
|
2017-08-13 09:57:02 +00:00
|
|
|
m_displayInvert(displayInvert),
|
2018-04-08 22:29:35 +00:00
|
|
|
m_displayScroll(displayScroll),
|
|
|
|
m_slot1Enabled(slot1Enabled),
|
|
|
|
m_slot2Enabled(slot2Enabled)
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
COLED::~COLED()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
bool COLED::open()
|
|
|
|
{
|
2018-04-07 15:49:12 +00:00
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
// SPI
|
|
|
|
if (display.oled_is_spi_proto(m_displayType))
|
|
|
|
{
|
|
|
|
// SPI change parameters to fit to your LCD
|
|
|
|
if ( !display.init(OLED_SPI_DC,OLED_SPI_RESET,OLED_SPI_CS, m_displayType) )
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// I2C change parameters to fit to your LCD
|
|
|
|
if ( !display.init(OLED_I2C_RESET, m_displayType) )
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-04-07 15:49:12 +00:00
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
display.begin();
|
|
|
|
|
2016-11-03 21:43:29 +00:00
|
|
|
display.invertDisplay(m_displayInvert ? 1 : 0);
|
|
|
|
if (m_displayBrightness > 0U)
|
2016-05-06 23:03:39 +00:00
|
|
|
display.setBrightness(m_displayBrightness);
|
|
|
|
|
|
|
|
// init done
|
|
|
|
display.clearDisplay(); // clears the screen buffer
|
|
|
|
display.display(); // display it (clear display)
|
|
|
|
|
|
|
|
OLED_statusbar();
|
2018-04-08 22:29:35 +00:00
|
|
|
display.setCursor(0,OLED_LINE3);
|
2016-05-06 23:03:39 +00:00
|
|
|
display.print("Startup");
|
|
|
|
display.display();
|
|
|
|
|
2017-08-14 22:07:09 +00:00
|
|
|
return true;
|
2016-05-06 23:03:39 +00:00
|
|
|
}
|
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::setIdleInt()
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
|
|
|
m_mode = MODE_IDLE;
|
|
|
|
|
|
|
|
display.clearDisplay();
|
|
|
|
OLED_statusbar();
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2017-08-09 19:37:48 +00:00
|
|
|
// display.setCursor(0,30);
|
|
|
|
// display.setTextSize(3);
|
|
|
|
// display.print("Idle");
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2017-08-09 19:37:48 +00:00
|
|
|
// display.setTextSize(1);
|
2017-08-09 19:39:12 +00:00
|
|
|
display.startscrolldiagright(0x00,0x0f); //the MMDVM logo scrolls the whole screen
|
2016-05-06 23:03:39 +00:00
|
|
|
display.display();
|
2018-04-07 15:49:12 +00:00
|
|
|
|
|
|
|
unsigned char info[100U];
|
|
|
|
CNetworkInfo* m_network;
|
|
|
|
|
|
|
|
passCounter ++;
|
|
|
|
if (passCounter > 253U)
|
|
|
|
networkInfoInitialized = false;
|
|
|
|
|
|
|
|
if (! networkInfoInitialized) {
|
|
|
|
LogMessage("Initialize CNetworkInfo");
|
|
|
|
info[0]=0;
|
|
|
|
m_network = new CNetworkInfo;
|
|
|
|
m_network->getNetworkInterface(info);
|
|
|
|
m_ipaddress = (char*)info;
|
|
|
|
delete m_network;
|
|
|
|
|
|
|
|
networkInfoInitialized = true;
|
|
|
|
passCounter = 0;
|
|
|
|
}
|
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
}
|
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::setErrorInt(const char* text)
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
|
|
|
m_mode = MODE_ERROR;
|
|
|
|
|
|
|
|
display.clearDisplay();
|
|
|
|
OLED_statusbar();
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
display.setCursor(0,OLED_LINE1);
|
2017-08-06 16:35:10 +00:00
|
|
|
display.printf("%s\n",text);
|
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::setLockoutInt()
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
|
|
|
m_mode = MODE_LOCKOUT;
|
|
|
|
|
|
|
|
display.clearDisplay();
|
|
|
|
OLED_statusbar();
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.setCursor(0,30);
|
|
|
|
display.setTextSize(3);
|
2016-05-06 23:03:39 +00:00
|
|
|
display.print("Lockout");
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.setTextSize(1);
|
2016-05-06 23:03:39 +00:00
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
|
|
|
m_mode = MODE_DSTAR;
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.clearDisplay();
|
2018-04-07 22:39:29 +00:00
|
|
|
display.fillRect(0,OLED_LINE3,display.width(),display.height(),BLACK); //clear everything beneath logo
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE4);
|
2017-08-06 16:35:10 +00:00
|
|
|
display.printf("%s %.8s/%4.4s",type,my1,my2);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE5);
|
2017-08-06 16:35:10 +00:00
|
|
|
display.printf("-> %.8s",your);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE6);
|
2017-08-06 16:35:10 +00:00
|
|
|
display.printf("via %.8s",reflector);
|
2017-08-14 22:07:09 +00:00
|
|
|
|
2016-05-10 16:04:50 +00:00
|
|
|
OLED_statusbar();
|
|
|
|
display.display();
|
2016-05-06 23:03:39 +00:00
|
|
|
}
|
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::clearDStarInt()
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
2018-04-07 22:39:29 +00:00
|
|
|
display.fillRect(0,OLED_LINE3, display.width(),display.height(),BLACK); //clear everything beneath the logo
|
2017-08-14 22:07:09 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(40,OLED_LINE3);
|
2016-05-06 23:03:39 +00:00
|
|
|
display.print("Listening");
|
2018-04-07 15:49:12 +00:00
|
|
|
|
|
|
|
display.setCursor(0,OLED_LINE5);
|
|
|
|
display.printf("%s",m_ipaddress.c_str());
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
2017-08-06 16:35:10 +00:00
|
|
|
void COLED::writeDMRInt(unsigned int slotNo,const std::string& src,bool group,const std::string& dst,const char* type)
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
if (m_mode != MODE_DMR) {
|
2018-04-08 22:29:35 +00:00
|
|
|
display.clearDisplay();
|
|
|
|
m_mode = MODE_DMR;
|
|
|
|
clearDMRInt(slotNo);
|
2018-04-09 21:24:03 +00:00
|
|
|
}
|
2018-04-08 22:29:35 +00:00
|
|
|
// if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2
|
|
|
|
// if single slot, use lines 3-4
|
2018-04-09 21:24:03 +00:00
|
|
|
if ( m_slot1Enabled && m_slot2Enabled ) {
|
|
|
|
|
|
|
|
if (slotNo == 1U) {
|
|
|
|
display.fillRect(0,OLED_LINE2,display.width(),40,BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE2);
|
|
|
|
display.printf("%s",src.c_str());
|
|
|
|
display.setCursor(0,OLED_LINE3);
|
|
|
|
display.printf("Slot: %i %s %s%s",slotNo,type,group ? "TG" : "",dst.c_str());
|
|
|
|
}
|
2018-04-08 22:29:35 +00:00
|
|
|
else
|
2018-04-09 21:24:03 +00:00
|
|
|
{
|
|
|
|
display.fillRect(0,OLED_LINE4,display.width(),40,BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE4);
|
|
|
|
display.printf("%s",src.c_str());
|
|
|
|
display.setCursor(0,OLED_LINE5);
|
|
|
|
display.printf("Slot: %i %s %s%s",slotNo,type,group ? "TG" : "",dst.c_str());
|
|
|
|
}
|
|
|
|
|
2018-04-08 22:29:35 +00:00
|
|
|
}
|
2018-04-09 21:24:03 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
display.fillRect(0,OLED_LINE3,display.width(),20,BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE3);
|
|
|
|
display.printf("%s",src.c_str());
|
|
|
|
display.setCursor(0,OLED_LINE4);
|
|
|
|
display.printf("Slot: %i %s %s%s",slotNo,type,group ? "TG" : "",dst.c_str());
|
2018-04-08 22:29:35 +00:00
|
|
|
}
|
2018-04-09 21:24:03 +00:00
|
|
|
|
2018-04-08 22:29:35 +00:00
|
|
|
display.fillRect(0,OLED_LINE6,display.width(),20,BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE6);
|
2018-04-07 15:49:12 +00:00
|
|
|
display.printf("%s",m_ipaddress.c_str());
|
2018-04-09 21:24:03 +00:00
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
OLED_statusbar();
|
|
|
|
display.display();
|
2018-04-09 21:24:03 +00:00
|
|
|
|
|
|
|
}
|
2016-05-06 23:03:39 +00:00
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::clearDMRInt(unsigned int slotNo)
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
2018-04-08 22:29:35 +00:00
|
|
|
// if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2
|
|
|
|
// if single slot, use lines 3-4
|
|
|
|
if ( m_slot1Enabled && m_slot2Enabled ){
|
|
|
|
if (slotNo == 1U)
|
|
|
|
{
|
2018-04-09 21:24:03 +00:00
|
|
|
display.fillRect(0, OLED_LINE3, display.width(), 40, BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE3);
|
|
|
|
display.print("Slot: 1 Listening");
|
2018-04-08 22:29:35 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-04-09 21:24:03 +00:00
|
|
|
display.fillRect(0, OLED_LINE5, display.width(), 40, BLACK);
|
|
|
|
display.setCursor(0, OLED_LINE5);
|
|
|
|
display.print("Slot: 2 Listening");
|
2018-04-08 22:29:35 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2018-04-09 21:24:03 +00:00
|
|
|
display.fillRect(0, OLED_LINE4, display.width(), 40, BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE4);
|
|
|
|
display.printf("Slot: %i Listening",slotNo);
|
2018-04-08 22:29:35 +00:00
|
|
|
}
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2018-04-08 22:29:35 +00:00
|
|
|
|
2018-04-09 21:24:03 +00:00
|
|
|
display.fillRect(0, OLED_LINE6, display.width(), 20, BLACK);
|
|
|
|
display.setCursor(0,OLED_LINE6);
|
2018-04-07 15:49:12 +00:00
|
|
|
display.printf("%s",m_ipaddress.c_str());
|
2016-05-06 23:03:39 +00:00
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
2016-05-19 18:08:48 +00:00
|
|
|
void COLED::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin)
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
m_mode = MODE_YSF;
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.clearDisplay();
|
2018-04-07 22:39:29 +00:00
|
|
|
display.fillRect(0,OLED_LINE2,display.width(),display.height(),BLACK);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE4);
|
2017-08-06 16:35:10 +00:00
|
|
|
display.printf("%s %.10s", type, source);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE5);
|
2016-05-16 20:57:32 +00:00
|
|
|
display.printf(" %.10s", dest);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-05-10 16:04:50 +00:00
|
|
|
OLED_statusbar();
|
|
|
|
display.display();
|
2016-05-06 23:03:39 +00:00
|
|
|
}
|
|
|
|
|
2016-05-10 15:17:49 +00:00
|
|
|
void COLED::clearFusionInt()
|
2016-05-06 23:03:39 +00:00
|
|
|
{
|
2018-04-07 22:39:29 +00:00
|
|
|
display.fillRect(0, OLED_LINE2, display.width(), display.height(), BLACK);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(40,OLED_LINE4);
|
2016-05-10 16:04:50 +00:00
|
|
|
display.print("Listening");
|
2018-04-07 15:49:12 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE6);
|
2018-04-07 15:49:12 +00:00
|
|
|
display.printf("%s",m_ipaddress.c_str());
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-05-10 16:04:50 +00:00
|
|
|
display.display();
|
2016-05-06 23:03:39 +00:00
|
|
|
}
|
|
|
|
|
2016-09-12 19:23:50 +00:00
|
|
|
void COLED::writeP25Int(const char* source, bool group, unsigned int dest, const char* type)
|
2016-09-12 17:12:32 +00:00
|
|
|
{
|
|
|
|
m_mode = MODE_P25;
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.clearDisplay();
|
2017-08-06 16:40:55 +00:00
|
|
|
display.fillRect(0, OLED_LINE1, display.width(), display.height(), BLACK);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE3);
|
2017-08-06 16:35:10 +00:00
|
|
|
display.printf("%s %.10s", type, source);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE4);
|
2016-09-12 19:23:50 +00:00
|
|
|
display.printf(" %s%u", group ? "TG" : "", dest);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-09-12 17:12:32 +00:00
|
|
|
OLED_statusbar();
|
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
|
|
|
void COLED::clearP25Int()
|
|
|
|
{
|
2017-08-06 16:40:55 +00:00
|
|
|
display.fillRect(0, OLED_LINE1, display.width(), display.height(), BLACK);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(40,OLED_LINE4);
|
2016-09-12 17:12:32 +00:00
|
|
|
display.print("Listening");
|
2018-04-07 15:49:12 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE6);
|
2018-04-07 15:49:12 +00:00
|
|
|
display.printf("%s",m_ipaddress.c_str());
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-09-12 17:12:32 +00:00
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
2018-01-17 19:04:00 +00:00
|
|
|
void COLED::writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type)
|
|
|
|
{
|
|
|
|
m_mode = MODE_NXDN;
|
|
|
|
|
|
|
|
display.clearDisplay();
|
|
|
|
display.fillRect(0, OLED_LINE1, display.width(), display.height(), BLACK);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE3);
|
2018-01-17 19:04:00 +00:00
|
|
|
display.printf("%s %.10s", type, source);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE5);
|
2018-01-17 19:04:00 +00:00
|
|
|
display.printf(" %s%u", group ? "TG" : "", dest);
|
|
|
|
|
|
|
|
OLED_statusbar();
|
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
|
|
|
void COLED::clearNXDNInt()
|
|
|
|
{
|
|
|
|
display.fillRect(0, OLED_LINE1, display.width(), display.height(), BLACK);
|
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(40,OLED_LINE4);
|
2018-01-17 19:04:00 +00:00
|
|
|
display.print("Listening");
|
2018-04-07 15:49:12 +00:00
|
|
|
|
2018-04-07 22:39:29 +00:00
|
|
|
display.setCursor(0,OLED_LINE6);
|
2018-04-07 15:49:12 +00:00
|
|
|
display.printf("%s",m_ipaddress.c_str());
|
2018-01-17 19:04:00 +00:00
|
|
|
|
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
|
2016-10-20 08:59:12 +00:00
|
|
|
void COLED::writeCWInt()
|
|
|
|
{
|
2016-10-20 11:03:51 +00:00
|
|
|
display.clearDisplay();
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.setCursor(0,30);
|
2016-10-20 09:11:26 +00:00
|
|
|
display.setTextSize(3);
|
|
|
|
display.print("CW TX");
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-10-20 09:11:26 +00:00
|
|
|
display.setTextSize(1);
|
|
|
|
display.display();
|
|
|
|
display.startscrollright(0x02,0x0f);
|
2016-10-20 08:59:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void COLED::clearCWInt()
|
|
|
|
{
|
2016-10-20 11:03:51 +00:00
|
|
|
display.clearDisplay();
|
2017-08-06 16:35:10 +00:00
|
|
|
|
|
|
|
display.setCursor(0,30);
|
|
|
|
display.setTextSize(3);
|
2016-10-20 09:26:36 +00:00
|
|
|
display.print("Idle");
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-10-20 09:26:36 +00:00
|
|
|
display.setTextSize(1);
|
|
|
|
display.display();
|
2017-08-06 16:35:10 +00:00
|
|
|
display.startscrollleft(0x02,0x0f);
|
2016-10-20 08:59:12 +00:00
|
|
|
}
|
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
void COLED::close()
|
|
|
|
{
|
2017-12-05 18:21:36 +00:00
|
|
|
display.clearDisplay();
|
|
|
|
display.fillRect(0, 0, display.width(), 16, BLACK);
|
|
|
|
display.startscrollright(0x00,0x01);
|
|
|
|
display.setCursor(0,00);
|
|
|
|
display.setTextSize(2);
|
|
|
|
display.print("-CLOSE-");
|
|
|
|
display.display();
|
|
|
|
|
2016-05-06 23:03:39 +00:00
|
|
|
display.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
void COLED::OLED_statusbar()
|
|
|
|
{
|
|
|
|
display.stopscroll();
|
|
|
|
display.fillRect(0, 0, display.width(), 16, BLACK);
|
|
|
|
display.setTextColor(WHITE);
|
2017-08-06 16:35:10 +00:00
|
|
|
|
2016-11-03 21:43:29 +00:00
|
|
|
display.setCursor(0,0);
|
2016-05-06 23:03:39 +00:00
|
|
|
if (m_mode == MODE_DMR)
|
2017-08-14 22:07:09 +00:00
|
|
|
display.drawBitmap(0, 0, logo_dmr_bmp, 128, 16, WHITE);
|
2016-05-10 16:04:50 +00:00
|
|
|
else if (m_mode == MODE_DSTAR)
|
2017-08-14 22:07:09 +00:00
|
|
|
display.drawBitmap(0, 0, logo_dstar_bmp, 128, 16, WHITE);
|
2016-05-10 16:04:50 +00:00
|
|
|
else if (m_mode == MODE_YSF)
|
2017-08-14 22:07:09 +00:00
|
|
|
display.drawBitmap(0, 0, logo_fusion_bmp, 128, 16, WHITE);
|
2016-09-12 17:12:32 +00:00
|
|
|
else if (m_mode == MODE_P25)
|
|
|
|
display.print("P25");
|
2018-01-17 19:04:00 +00:00
|
|
|
else if (m_mode == MODE_NXDN)
|
|
|
|
display.print("NXDN");
|
2016-05-06 23:03:39 +00:00
|
|
|
else
|
2017-08-06 16:35:10 +00:00
|
|
|
display.drawBitmap(0, 0, logo_glcd_bmp, 128, 16, WHITE);
|
|
|
|
|
2017-08-13 09:57:02 +00:00
|
|
|
if (m_displayScroll)
|
2017-08-14 22:07:09 +00:00
|
|
|
display.startscrollright(0x00,0x02);
|
2016-05-06 23:03:39 +00:00
|
|
|
}
|