diff --git a/firmware/shared_libs/disp_layout/disp_layout.c b/firmware/shared_libs/disp_layout/disp_layout.c index e68d0eb..418cd5b 100644 --- a/firmware/shared_libs/disp_layout/disp_layout.c +++ b/firmware/shared_libs/disp_layout/disp_layout.c @@ -100,13 +100,24 @@ static uint8_t _calcMarkePos(uint32_t value, uint32_t max) return ((62 * value) + (max / 2)) / max; } +static uint8_t _sizeOfCharArray(char *array) +{ + uint8_t size = 0; + while (*array++) + { + size++; + } + return size; +} + static void _drawMeterHelper(GFX_display_t *disp, char *min, char *max, uint8_t pos) { + uint8_t max_size = _sizeOfCharArray(max); 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); + DISP_writeString(disp, &font5x7Info, (uint8_t *)max, 127 - (6 * max_size), 43, BM_NORMAL); // marker 0% - 62, 100% - 123 DISP_drawBitmap(disp, &marker, 62 + pos, 35, BM_NORMAL); } @@ -127,6 +138,22 @@ static void _drawAmplValueHelper(GFX_display_t *disp, uint32_t ampl, uint8_t foc DISP_drawBitmap(disp, &marker, marker_ampl_pos_x[(AMPL_MAX_DIGIT - 1) - focus_digit], 15, BM_NORMAL); } +static void _drawOffsValueHelper(GFX_display_t *disp, uint32_t offs, uint8_t focus_digit) +{ + DISP_clearRegion(disp, 64, 13, 66, 40); + DISP_writeString(disp, &font5x7Info, (uint8_t *)"O:", 64, 20, BM_NORMAL); + _drawAmplValue(disp, offs, 20); + DISP_drawBitmap(disp, &marker, marker_ampl_pos_x[(AMPL_MAX_DIGIT - 1) - focus_digit], 15, BM_NORMAL); +} + +static void _drawPhaseValueHelper(GFX_display_t *disp, uint32_t phase, uint8_t focus_digit) +{ + DISP_clearRegion(disp, 64, 13, 66, 40); + DISP_writeString(disp, &font5x7Info, (uint8_t *)"P:", 64, 20, BM_NORMAL); + _drawAmplValue(disp, phase, 20); + DISP_drawBitmap(disp, &marker, marker_ampl_pos_x[(AMPL_MAX_DIGIT - 1) - focus_digit], 15, BM_NORMAL); +} + static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data) { GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->generator; @@ -141,8 +168,12 @@ static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data) _drawMeterHelper(disp, "0V", "5V", _calcMarkePos(100, 500)); break; case LAY_OFFS: + _drawOffsValueHelper(disp, fun_gen->offset, app_data->offs_focus_digit); + _drawMeterHelper(disp, "-5V", "+5V", _calcMarkePos(100, 500)); break; case LAY_PHAS: + _drawPhaseValueHelper(disp, fun_gen->phase, app_data->phas_focus_digit); + _drawMeterHelper(disp, "0", "360", _calcMarkePos(100, 500)); break; case LAY_MAIN: DISP_clearRegion(disp, 62, 13, 66, 40);