#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); }