[wip] display layout
This commit is contained in:
8
firmware/.vscode/settings.json
vendored
8
firmware/.vscode/settings.json
vendored
@@ -1,6 +1,12 @@
|
|||||||
{
|
{
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"ad9833_def.h": "c",
|
"ad9833_def.h": "c",
|
||||||
"ad9833.h": "c"
|
"ad9833.h": "c",
|
||||||
|
"disp_layout.h": "c",
|
||||||
|
"bitmap_disp_buttons.h": "c",
|
||||||
|
"bitmap_fonts.h": "c",
|
||||||
|
"font_gfx.h": "c",
|
||||||
|
"display_gfx.h": "c",
|
||||||
|
"main.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,7 +201,7 @@ const uint8_t btn_x10_inverse[] = {
|
|||||||
|
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
GFX_bitmap_t btn_bottom[DISP_BTN_MAX] = {
|
GFX_bitmap_t bitmap_btnBottom[DISP_BTN_MAX] = {
|
||||||
{25, 11, btn_fre},
|
{25, 11, btn_fre},
|
||||||
{25, 11, btn_fre_inverse},
|
{25, 11, btn_fre_inverse},
|
||||||
{25, 11, btn_amp},
|
{25, 11, btn_amp},
|
||||||
|
|||||||
@@ -30,4 +30,4 @@ typedef enum
|
|||||||
DISP_BTN_MAX,
|
DISP_BTN_MAX,
|
||||||
} BITMAP_buttonName_t;
|
} BITMAP_buttonName_t;
|
||||||
|
|
||||||
extern GFX_bitmap_t btn_bottom[DISP_BTN_MAX];
|
extern GFX_bitmap_t bitmap_btnBottom[DISP_BTN_MAX];
|
||||||
|
|||||||
214
firmware/shared_libs/disp_layout/disp_layout.c
Normal file
214
firmware/shared_libs/disp_layout/disp_layout.c
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
#include "main.h"
|
||||||
|
#include "display_gfx.h"
|
||||||
|
#include "font_gfx.h"
|
||||||
|
#include "bitmap_fonts.h"
|
||||||
|
#include "bitmap_disp_buttons.h"
|
||||||
|
|
||||||
|
// #include "wave_gfx.h"
|
||||||
|
|
||||||
|
#include "printf.h"
|
||||||
|
#include "disp_layout.h"
|
||||||
|
|
||||||
|
static uint8_t isChannelChange = 1;
|
||||||
|
static uint8_t isGraphChange = 1;
|
||||||
|
static uint8_t isValuesChange = 1;
|
||||||
|
static uint8_t isButtonsChange = 1;
|
||||||
|
static int8_t isButtonsBlink = 1;
|
||||||
|
|
||||||
|
static uint8_t timer_blink[LAY_BTN_MAX];
|
||||||
|
|
||||||
|
void LAY_blinkButton(LAY_dispBtnName_t disp_btn)
|
||||||
|
{
|
||||||
|
timer_blink[disp_btn] = 2;
|
||||||
|
isButtonsBlink = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LAY_updateChannels(void)
|
||||||
|
{
|
||||||
|
isChannelChange = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LAY_updateGraph(void)
|
||||||
|
{
|
||||||
|
isGraphChange = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LAY_updateValues(void)
|
||||||
|
{
|
||||||
|
isValuesChange = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LAY_updateButtons(void)
|
||||||
|
{
|
||||||
|
isButtonsChange = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawFreqValue(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
uint32_t value = getFreqValue();
|
||||||
|
uint8_t input[8];
|
||||||
|
snprintf((char *)input, 8, "%07u", value);
|
||||||
|
DISP_writeString(disp, &font5x7Info, input, 76, 13, BM_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawAmplValue(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
float value = getAmplValue();
|
||||||
|
uint8_t input[8];
|
||||||
|
snprintf((char *)input, 8, "%05.2f V", value);
|
||||||
|
DISP_writeString(disp, &font5x7Info, input, 76, 23, BM_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawOffsValue(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
float value = getOffsetValue();
|
||||||
|
uint8_t input[8];
|
||||||
|
snprintf((char *)input, 8, "%+4.2f V", value);
|
||||||
|
DISP_writeString(disp, &font5x7Info, input, 76, 33, BM_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawPhasValue(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
uint32_t value = getPhaseValue();
|
||||||
|
uint8_t input[8];
|
||||||
|
snprintf((char *)input, 8, "%03u'", value);
|
||||||
|
DISP_writeString(disp, &font5x7Info, input, 76, 43, BM_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawDutyValue(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
uint32_t value = getDutyValue();
|
||||||
|
uint8_t input[8];
|
||||||
|
snprintf((char *)input, 8, "%03u%%", value);
|
||||||
|
DISP_writeString(disp, &font5x7Info, input, 76, 43, BM_NORMAL); // zmien pozycje!!!!!!!!
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _blinkButtons(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
// input: display buttons, invert
|
||||||
|
uint8_t done = 0;
|
||||||
|
for (LAY_dispBtnName_t disp_btn = LAY_BTN_1; disp_btn < LAY_BTN_MAX; disp_btn++)
|
||||||
|
{
|
||||||
|
if (timer_blink[disp_btn] > 0)
|
||||||
|
{
|
||||||
|
DISP_drawBitmap(disp, &btn_bottom[disp_btns[curr_layout][disp_btn] + 1], btn_pos_x[disp_btn], 53, BM_NORMAL);
|
||||||
|
timer_blink[disp_btn]--;
|
||||||
|
}
|
||||||
|
else if (timer_blink[disp_btn] == 0)
|
||||||
|
{
|
||||||
|
DISP_drawBitmap(disp, &btn_bottom[disp_btns[curr_layout][disp_btn]], btn_pos_x[disp_btn], 53, BM_NORMAL);
|
||||||
|
done++;
|
||||||
|
timer_blink[disp_btn]--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (done == LAY_BTN_MAX)
|
||||||
|
{
|
||||||
|
isButtonsBlink = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawButtons(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
// input: display buttons, invert
|
||||||
|
DISP_clearRegion(disp, 0, 53, disp->width, 11);
|
||||||
|
uint8_t pos_x = 0;
|
||||||
|
|
||||||
|
for (LAY_dispBtnName_t disp_btn = LAY_BTN_1; disp_btn < LAY_BTN_MAX; disp_btn++)
|
||||||
|
{
|
||||||
|
BITMAP_buttonName_t btn_name = getBitmapName(disp_btn);
|
||||||
|
|
||||||
|
DISP_drawBitmap(disp, &bitmap_btnBottom[btn_name], pos_x, 53, BM_NORMAL);
|
||||||
|
pos_x += bitmap_btnBottom[btn_name].width + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
isButtonsChange = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawFuncGenValues(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"F:", 64, 13, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"A:", 64, 23, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"O:", 64, 33, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"P:", 64, 43, BM_NORMAL);
|
||||||
|
|
||||||
|
_drawFreqValue(disp);
|
||||||
|
_drawAmplValue(disp);
|
||||||
|
_drawOffsValue(disp);
|
||||||
|
_drawPhasValue(disp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawPwmGenValues(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"F:", 64, 13, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"A:", 64, 23, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"O:", 64, 33, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"P:", 64, 43, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"D:", 64, 43, BM_NORMAL);
|
||||||
|
|
||||||
|
_drawFreqValue(disp);
|
||||||
|
_drawAmplValue(disp);
|
||||||
|
_drawOffsValue(disp);
|
||||||
|
_drawPhasValue(disp);
|
||||||
|
_drawDutyValue(disp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawValues(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
// input: frequency(value), amplitiude(value), offset(value), phase(value), duty(value), invert(info), position(value)
|
||||||
|
switch (getLayoutType())
|
||||||
|
{
|
||||||
|
case LT_TYPE_FG:
|
||||||
|
_drawFuncGenValues(disp);
|
||||||
|
break;
|
||||||
|
case LT_TYPE_PWM:
|
||||||
|
_drawPwmGenValues(disp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
isValuesChange = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawGraph(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
// input: graph type(sin, triangle, squere, pwm), frequency(info), amplitiude(value), offset(value), phase(value), invert(pwm),
|
||||||
|
DISP_drawSin(disp, 4, 32, 16, 0, 0);
|
||||||
|
DISP_drawHorizontalLine(disp, 2, 32, 56, GFX_WHITE);
|
||||||
|
|
||||||
|
isGraphChange = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _drawChannels(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
// input: active channel
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"CH1", 2, 2, BM_INVERSE);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"CH2", 23, 2, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"CH3", 44, 2, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"CH4", 65, 2, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"CH5", 86, 2, BM_NORMAL);
|
||||||
|
DISP_writeString(disp, &font5x7Info, (uint8_t *)"CH6", 107, 2, BM_NORMAL);
|
||||||
|
DISP_drawHorizontalLine(disp, 0, 10, 127, GFX_WHITE);
|
||||||
|
|
||||||
|
isChannelChange = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LAY_drawDisplayLayout(GFX_display_t *disp)
|
||||||
|
{
|
||||||
|
if (isChannelChange)
|
||||||
|
_drawChannels(disp);
|
||||||
|
|
||||||
|
if (isGraphChange)
|
||||||
|
_drawGraph(disp);
|
||||||
|
|
||||||
|
if (isValuesChange)
|
||||||
|
_drawValues(disp);
|
||||||
|
|
||||||
|
if (isButtonsChange)
|
||||||
|
_drawButtons(disp);
|
||||||
|
|
||||||
|
if (isButtonsBlink)
|
||||||
|
_blinkButtons(disp);
|
||||||
|
}
|
||||||
44
firmware/shared_libs/disp_layout/disp_layout.h
Normal file
44
firmware/shared_libs/disp_layout/disp_layout.h
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
LAY_BTN_1,
|
||||||
|
LAY_BTN_2,
|
||||||
|
LAY_BTN_3,
|
||||||
|
LAY_BTN_4,
|
||||||
|
LAY_BTN_5,
|
||||||
|
LAY_BTN_MAX,
|
||||||
|
} LAY_dispBtnName_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
LAY_CH_1,
|
||||||
|
LAY_CH_2,
|
||||||
|
LAY_CH_3,
|
||||||
|
LAY_CH_4,
|
||||||
|
LAY_CH_5,
|
||||||
|
LAY_CH_6,
|
||||||
|
LAY_CH_MAX,
|
||||||
|
} LAY_chanName_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
LAY_FG_MAIN,
|
||||||
|
LAY_FG_FREQ,
|
||||||
|
LAY_FG_AMPL,
|
||||||
|
LAY_FG_OFFS,
|
||||||
|
LAY_FG_PHAS,
|
||||||
|
LAY_FG_WAVE,
|
||||||
|
LAY_STATE_MAX,
|
||||||
|
} LAY_state_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
LT_TYPE_FG,
|
||||||
|
LT_TYPE_PWM
|
||||||
|
} LAY_type_t;
|
||||||
|
|
||||||
|
void LAY_drawDisplayLayout(GFX_display_t *disp);
|
||||||
|
void LAY_setDisplayLayout(LAY_state_t layout);
|
||||||
|
void LAY_blinkButton(LAY_dispBtnName_t disp_btn);
|
||||||
|
void LAY_setFreqValue(uint32_t value);
|
||||||
Reference in New Issue
Block a user