[wip] working on display layout

This commit is contained in:
2023-04-01 22:43:36 +02:00
parent 32daa4bce9
commit 07dd185e7c
24 changed files with 901 additions and 254 deletions

View File

@@ -1,23 +1,31 @@
#include "main.h"
#include "printf.h"
#include "bitmap_fonts.h"
#include "disp_layout_defs.h"
#include "bitmap_disp_buttons.h"
#include "disp_layout.h"
static void _drawFreqValue(GFX_display_t *disp, uint32_t freq)
const uint8_t btn_pos_x[DISP_BTN_MAX] = {0, 26, 52, 78, 104};
const uint8_t marker_freq_pos_X[7] = {76, 84, 90, 96, 105, 111, 118};
// clang-format off
const GFX_bitmap_t marker = {05, 03, (uint8_t[]){0xF9,0xFB,0xFF,0xFB,0xF9,}};
// clang-format on
static void _drawFreqValue(GFX_display_t *disp, uint32_t freq, uint8_t pos_y)
{
// uint32_t freq = 9999999;
uint8_t data[8];
snprintf((char *)data, 8, "%07u", freq);
DISP_writeString(disp, &font5x7Info, data, 76, 13, BM_NORMAL);
DISP_writeString(disp, &font5x7Info, (uint8_t[]){data[0], 0}, 76, pos_y, BM_NORMAL);
DISP_writeString(disp, &font5x7Info, (uint8_t[]){data[0], 0}, 76, pos_y, BM_NORMAL);
DISP_writeString(disp, &font5x7Info, (uint8_t[]){data[1], data[2], data[3], 0}, 84, pos_y, BM_NORMAL);
DISP_writeString(disp, &font5x7Info, (uint8_t[]){data[4], data[5], data[6], 0}, 105, pos_y, BM_NORMAL);
}
static void _drawAmplValue(GFX_display_t *disp, uint16_t ampl)
{
// float ampl = getAmplValue();
uint8_t data[8];
// snprintf((char *)data, 8, "%05.2f V", ampl);
snprintf((char *)data, 8, "%02d.%02d V", ampl / 100, ampl % 100);
DISP_writeString(disp, &font5x7Info, data, 76, 23, BM_NORMAL);
}
@@ -51,14 +59,14 @@ static void _blinkButtons(GFX_display_t *disp, APP_data_t *app_data)
{
// input: display buttons, invert
BITMAP_buttonName_t bitmap_idx;
for (LAY_dispBtnIdx_t btn_idx = LAY_BTN_1; btn_idx < LAY_BTN_MAX; btn_idx++)
for (LAY_dispBtn_t btn_idx = DISP_BTN_1; btn_idx < DISP_BTN_MAX; btn_idx++)
{
if (!(app_data->isButtonBlink & (1 << btn_idx)))
{
continue;
}
bitmap_idx = btn_names[app_data->curr_layout][btn_idx];
bitmap_idx = CTRL_getBitmapName(btn_idx);
if (app_data->timer_blink[btn_idx] > 0)
{
DISP_drawBitmap(disp, &bitmap_btnBottom[bitmap_idx + 1], btn_pos_x[btn_idx], 53, BM_NORMAL);
@@ -78,38 +86,72 @@ static void _drawButtons(GFX_display_t *disp, APP_data_t *app_data)
BITMAP_buttonName_t bitmap_idx;
DISP_clearRegion(disp, 0, 53, disp->width, 11);
for (LAY_dispBtnIdx_t btn_idx = LAY_BTN_1; btn_idx < LAY_BTN_MAX; btn_idx++)
for (LAY_dispBtn_t btn_idx = DISP_BTN_1; btn_idx < DISP_BTN_MAX; btn_idx++)
{
bitmap_idx = btn_names[app_data->curr_layout][btn_idx];
bitmap_idx = CTRL_getBitmapName(btn_idx);
DISP_drawBitmap(disp, &bitmap_btnBottom[bitmap_idx], btn_pos_x[btn_idx], 53, BM_NORMAL);
}
app_data->isButtonChange = 0;
}
static void _drawMeterHelper(GFX_display_t *disp, char *min, char *max, uint8_t pos)
{
DISP_drawPixel(disp, 64, 40, GFX_WHITE);
DISP_drawPixel(disp, 125, 40, GFX_WHITE);
DISP_drawHorizontalLine(disp, 64, 41, 62, GFX_WHITE);
DISP_writeString(disp, &font5x7Info, (uint8_t *)min, 62, 43, BM_NORMAL);
DISP_writeString(disp, &font5x7Info, (uint8_t *)max, 117, 43, BM_NORMAL);
// marker 0% - 62, 100% - 123
DISP_drawBitmap(disp, &marker, 62 + pos, 35, BM_NORMAL);
}
static void _drawFreqValueHelper(GFX_display_t *disp, uint32_t freq, uint8_t focus_digit)
{
DISP_clearRegion(disp, 64, 13, 66, 40);
DISP_writeString(disp, &font5x7Info, (uint8_t *)"F:", 64, 20, BM_NORMAL);
_drawFreqValue(disp, freq, 20);
DISP_drawBitmap(disp, &marker, marker_freq_pos_X[6 - focus_digit], 15, BM_NORMAL);
}
static uint8_t _calcMarkePos(uint32_t value, uint32_t max)
{
return ((62 * value) + (max / 2)) / max;
}
static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data)
{
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);
GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->generator;
switch (app_data->curr_layout)
switch (app_data->curr_state_lay)
{
case LAY_FG_FREQ:
_drawFreqValue(disp, fun_gen->frequency);
case LAY_FREQ:
_drawFreqValueHelper(disp, fun_gen->frequency, app_data->freq_focus_digit);
_drawMeterHelper(disp, "1", "1M", _calcMarkePos(900000, 1000000));
break;
case LAY_FG_AMPL:
case LAY_AMPL:
_drawAmplValue(disp, fun_gen->amplitude);
break;
case LAY_FG_OFFS:
case LAY_OFFS:
_drawOffsValue(disp, fun_gen->offset);
break;
case LAY_FG_PHAS:
case LAY_PHAS:
_drawPhasValue(disp, fun_gen->phase);
break;
case LAY_MAIN:
DISP_clearRegion(disp, 62, 13, 66, 40);
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, fun_gen->frequency, 13);
_drawAmplValue(disp, fun_gen->amplitude);
_drawOffsValue(disp, fun_gen->offset);
_drawPhasValue(disp, fun_gen->phase);
break;
default:
// focus
break;
}
}
@@ -123,7 +165,7 @@ static void _drawPwmGenValues(GFX_display_t *disp, APP_data_t *app_data)
DISP_writeString(disp, &font5x7Info, (uint8_t *)"P:", 64, 43, BM_NORMAL);
DISP_writeString(disp, &font5x7Info, (uint8_t *)"D:", 64, 43, BM_NORMAL);
_drawFreqValue(disp, pwm_gen->frequency);
_drawFreqValue(disp, pwm_gen->frequency, 13);
_drawAmplValue(disp, pwm_gen->amplitude / 100);
_drawOffsValue(disp, pwm_gen->offset / 100);
_drawPhasValue(disp, pwm_gen->phase);
@@ -133,7 +175,7 @@ static void _drawPwmGenValues(GFX_display_t *disp, APP_data_t *app_data)
static void _drawValues(GFX_display_t *disp, APP_data_t *app_data)
{
// input: frequency(value), amplitiude(value), offset(value), phase(value), duty(value), invert(info), position(value)
switch (app_data->gen_type)
switch (app_data->curr_gen_type)
{
case GEN_FG_TYPE:
_drawFuncGenValues(disp, app_data);

View File

@@ -1,13 +0,0 @@
#include "main.h"
#include "disp_layout_defs.h"
const BITMAP_buttonName_t btn_names[LAY_STATE_MAX][LAY_BTN_MAX] = {
{DISP_BTN_FREQ, DISP_BTN_AMPL, DISP_BTN_OFFS, DISP_BTN_PHAS, DISP_BTN_WAVE}, // Func Gen Main
{DISP_BTN_LEFT, DISP_BTN_RIGHT, DISP_BTN_NONE, DISP_BTN_NONE, DISP_BTN_BACK}, // Func Gen Freq
{DISP_BTN_X1, DISP_BTN_X0_1, DISP_BTN_X0_01, DISP_BTN_NONE, DISP_BTN_BACK}, // Func Gen Ampl
{DISP_BTN_X1, DISP_BTN_X0_1, DISP_BTN_X0_01, DISP_BTN_NONE, DISP_BTN_BACK}, // Func Gen Offs
{DISP_BTN_X10, DISP_BTN_X1, DISP_BTN_NONE, DISP_BTN_NONE, DISP_BTN_BACK}, // Func Gen Phas
{DISP_BTN_NONE, DISP_BTN_NONE, DISP_BTN_NONE, DISP_BTN_NONE, DISP_BTN_BACK}, // Func Gen Wave
};
const uint8_t btn_pos_x[LAY_BTN_MAX] = {0, 26, 52, 78, 104};

View File

@@ -1,7 +0,0 @@
#pragma once
#include "bitmap_disp_buttons.h"
#include "disp_layout_types.h"
extern const BITMAP_buttonName_t btn_names[LAY_STATE_MAX][LAY_BTN_MAX];
extern const uint8_t btn_pos_x[LAY_BTN_MAX];

View File

@@ -1,22 +0,0 @@
#pragma once
typedef enum
{
LAY_BTN_1,
LAY_BTN_2,
LAY_BTN_3,
LAY_BTN_4,
LAY_BTN_5,
LAY_BTN_MAX,
} LAY_dispBtnIdx_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;