Add boilerplate for wifi panel

This commit is contained in:
Tyler Perkins 2021-12-21 17:27:48 -05:00
parent 59284f3655
commit d98b7764e2
7 changed files with 144 additions and 0 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
img/wifi_background.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

View File

@ -10,6 +10,7 @@
// A list of all panels to be displayed, in order // A list of all panels to be displayed, in order
dashboard::panel::panel* PANELS[] = { dashboard::panel::panel* PANELS[] = {
new dashboard::panel::weather(), new dashboard::panel::weather(),
new dashboard::panel::wifi(),
}; };
size_t PANELS_LENGTH = sizeof(PANELS)/sizeof(PANELS[0]); size_t PANELS_LENGTH = sizeof(PANELS)/sizeof(PANELS[0]);
@ -22,6 +23,7 @@ dashboard::panel::panel* OVERLAY = new dashboard::panel::def_overlay();
const char* IMAGE_LOCATIONS[] = { const char* IMAGE_LOCATIONS[] = {
"bmp_24.png", "bmp_24.png",
"sky.png", "sky.png",
"wifi_background.jpg",
}; };
size_t IMAGE_LOCATIONS_LENGTH = sizeof(IMAGE_LOCATIONS)/sizeof(IMAGE_LOCATIONS[0]); size_t IMAGE_LOCATIONS_LENGTH = sizeof(IMAGE_LOCATIONS)/sizeof(IMAGE_LOCATIONS[0]);

View File

@ -77,6 +77,7 @@ constexpr int IMG_FLAGS = 0
#include "panel/panel.hpp" #include "panel/panel.hpp"
#include "panel/weather.hpp" #include "panel/weather.hpp"
#include "panel/def_overlay.hpp" #include "panel/def_overlay.hpp"
#include "panel/wifi.hpp"
extern dashboard::panel::panel* PANELS[]; extern dashboard::panel::panel* PANELS[];
extern size_t PANELS_LENGTH; extern size_t PANELS_LENGTH;

93
src/panel/wifi.cpp Normal file
View File

@ -0,0 +1,93 @@
///////////////////////////////////////////////////////////////////////////////
// Tyler Perkins
// 21-12-21
// wifi panel
//
#include "wifi.hpp"
#include "wifi_config.hpp"
using namespace dashboard::panel;
///////////////////////////////////////////////////////////////////////////////
// Constructors ///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
wifi::wifi(){
std::cerr << "WIFI CONSTRUCTOR\n";
_texture = nullptr;
_time_on_screen = WIFI_DEFAULT_TIME_ON_SCREEN;
}
wifi::~wifi(){
std::cerr << "WIFI DECONSTRUCTOR\n";
if(_texture != nullptr)
SDL_DestroyTexture(_texture);
}
///////////////////////////////////////////////////////////////////////////////
// Draw function //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void wifi::draw(){
//create the texture if this is the first time running draw
if(_texture == nullptr){
initTexture();
update();
update_texture();
}
SDL_RenderCopy(board::getRenderer(), _texture, NULL, NULL);
}
///////////////////////////////////////////////////////////////////////////////
// Helper functions ///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////
// Update the information of wifi
// This DOES NOT update the display
void wifi::update() {
//this shows static info on the wifi network, which does need to change
//therefore, no update
}
///////////////////////////////////////
// Update the texture that is being
// displayed. Due to the nature of what
// is being displayed, this will only
// ever be called once, as the wifi
// info doesnt change
void wifi::update_texture(){
std::cerr << "WIFI::UPDATE_TEXTURE\n";
SDL_Rect tgt;
SDL_SetRenderTarget(board::getRenderer(), _texture);
SDL_RenderClear(board::getRenderer());
//place background image
SDL_RenderCopy(board::getRenderer(),
board::getImage("wifi_background.jpg"), NULL, NULL);
SDL_SetRenderTarget(board::getRenderer(), NULL);
}
///////////////////////////////////////
// Lazy load the texture object
// This is to make sure that all of SDL
// is init before we attempt to draw anything
void wifi::initTexture(){
std::cerr << "WIFI INIT TEXTURE\n";
if(_texture == nullptr){
_texture = SDL_CreateTexture(board::getRenderer(),
SDL_PIXELFORMAT_RGBA8888,
SDL_TEXTUREACCESS_TARGET,
SCREEN_WIDTH, SCREEN_HEIGHT);
SDL_SetTextureBlendMode(_texture, SDL_BLENDMODE_BLEND);
}
}

31
src/panel/wifi.hpp Normal file
View File

@ -0,0 +1,31 @@
///////////////////////////////////////////////////////////////////////////////
// Tyler Perkins
// 21-12-21
// Wifi panel
//
#pragma once
#include "panel.hpp"
#include <SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <iostream>
namespace dashboard::panel {
class wifi : public panel {
public:
wifi();
~wifi();
void draw();
private:
void update();
void update_texture();
void initTexture();
};
}
#include "../board.hpp"

17
src/panel/wifi_config.hpp Normal file
View File

@ -0,0 +1,17 @@
///////////////////////////////////////////////////////////////////////////////
// Tyler Perkins
// 21-12-21
// def overlay configuration
//
#pragma once
namespace dashboard::panel {
//Default time the slid is shown on the screen, in ms
//Default 15s
constexpr size_t WIFI_DEFAULT_TIME_ON_SCREEN = 15000;
//How long should we wait between updates? in ms
//Due to the nature of this panel, this value is ignored
constexpr size_t WIFI_UPDATE_INTERVAL = 60000;
}