Basic OLED
This commit is contained in:
@@ -4,7 +4,13 @@ TxOled::TxOled(void) {
|
||||
Adafruit_SSD1306 _display(-1);
|
||||
}
|
||||
|
||||
void TxOled::init(volatile RadioState_t *radioState) {
|
||||
void TxOled::init(
|
||||
volatile RadioState_t *radioState,
|
||||
RxDeviceState_t *_rxDeviceState,
|
||||
TxDeviceState_t *_txDeviceState,
|
||||
Tactile *button0,
|
||||
Tactile *button1
|
||||
) {
|
||||
_display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
|
||||
_display.setTextSize(1);
|
||||
_display.setTextColor(WHITE);
|
||||
@@ -12,27 +18,148 @@ void TxOled::init(volatile RadioState_t *radioState) {
|
||||
_display.display();
|
||||
|
||||
_radioState = radioState;
|
||||
_button0 = button0;
|
||||
_button1 = button1;
|
||||
}
|
||||
|
||||
void TxOled::loop(void) {
|
||||
bool update = false;
|
||||
|
||||
//Depending on page, things might be different
|
||||
switch (_page) {
|
||||
|
||||
case TX_PAGE_INIT:
|
||||
//Second button has notthing to do over here
|
||||
break;
|
||||
|
||||
case TX_PAGE_STATS:
|
||||
//Second button refreshes this page
|
||||
if (_button1->getState() == TACTILE_STATE_SHORT_PRESS) {
|
||||
update = true;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//Short press of button0 always toggles no next page
|
||||
if (_button0->getState() == TACTILE_STATE_SHORT_PRESS) {
|
||||
_mainPageSequenceIndex++;
|
||||
if (_mainPageSequenceIndex == TX_OLED_PAGE_COUNT) {
|
||||
_mainPageSequenceIndex = 0;
|
||||
}
|
||||
update = true;
|
||||
}
|
||||
|
||||
if (update) {
|
||||
page(pageSequence[_mainPageSequenceIndex]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void TxOled::page(int page) {
|
||||
switch (page) {
|
||||
|
||||
case TX_PAGE_INIT:
|
||||
pageInit();
|
||||
renderPageInit();
|
||||
break;
|
||||
case TX_PAGE_STATS:
|
||||
renderPageStats();
|
||||
break;
|
||||
case TX_PAGE_PWR:
|
||||
renderPagePwr();
|
||||
break;
|
||||
case TX_PAGE_BIND:
|
||||
renderPageBind();
|
||||
break;
|
||||
case TX_PAGE_MODE:
|
||||
renderPageMode();
|
||||
break;
|
||||
|
||||
}
|
||||
_page = page;
|
||||
}
|
||||
|
||||
void TxOled::pageInit(void) {
|
||||
void TxOled::renderPagePwr(void) {
|
||||
_display.clearDisplay();
|
||||
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
_display.setCursor(0, 0);
|
||||
|
||||
//TODO add content
|
||||
|
||||
_display.display();
|
||||
}
|
||||
|
||||
void TxOled::renderPageBind(void) {
|
||||
_display.clearDisplay();
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
|
||||
//TODO add content
|
||||
|
||||
_display.display();
|
||||
}
|
||||
|
||||
void TxOled::renderPageMode(void) {
|
||||
_display.clearDisplay();
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
|
||||
//TODO add content
|
||||
|
||||
_display.display();
|
||||
}
|
||||
|
||||
void TxOled::renderPageStats(void) {
|
||||
_display.clearDisplay();
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
|
||||
_display.setTextSize(3);
|
||||
_display.print(_radioState->rssi);
|
||||
|
||||
_display.setCursor(18, 28);
|
||||
_display.setTextSize(2);
|
||||
_display.print(_radioState->snr);
|
||||
|
||||
_display.setCursor(74, 0);
|
||||
_display.setTextSize(3);
|
||||
_display.print(_rxDeviceState->rssi);
|
||||
|
||||
_display.setCursor(92, 28);
|
||||
_display.setTextSize(2);
|
||||
_display.print(_rxDeviceState->snr);
|
||||
|
||||
_display.setCursor(54, 48);
|
||||
_display.setTextSize(2);
|
||||
_display.print(_txDeviceState->roundtrip);
|
||||
_display.display();
|
||||
}
|
||||
|
||||
void TxOled::renderPageInit(void) {
|
||||
_display.clearDisplay();
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
_display.setTextSize(2);
|
||||
|
||||
_display.setCursor(0, 0);
|
||||
_display.print("Rdy ");
|
||||
_display.print(_radioState->loraTxPower);
|
||||
_display.print("dBm");
|
||||
|
||||
_display.setTextSize(2);
|
||||
_display.setCursor(0, 18);
|
||||
_display.print("Bandwitdh: ");
|
||||
_display.print(_radioState->loraBandwidth / 1000);
|
||||
_display.print("kHz");
|
||||
|
||||
_display.setCursor(0, 28);
|
||||
_display.print("SF: ");
|
||||
_display.print(_radioState->loraSpreadingFactor);
|
||||
|
||||
_display.setCursor(64, 28);
|
||||
_display.print("CR: ");
|
||||
_display.print(_radioState->loraCodingRate);
|
||||
|
||||
_display.setCursor(0, 38);
|
||||
_display.print("Rate: ");
|
||||
_display.print(1000 / TX_TRANSMIT_SLOT_RATE);
|
||||
_display.print("Hz");
|
||||
|
||||
_display.display();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user