|
|
|
|
@@ -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);
|
|
|
|
|
|