[fix] negative offset

This commit is contained in:
2023-04-02 12:27:45 +02:00
parent ec33dab706
commit 0f8a5ca047
2 changed files with 12 additions and 8 deletions

View File

@@ -7,7 +7,7 @@ typedef struct
{
uint32_t frequency;
uint16_t amplitude;
uint16_t offset;
int16_t offset;
uint16_t phase;
uint8_t duty;
uint8_t enabled;
@@ -17,7 +17,7 @@ typedef struct
{
uint32_t frequency;
uint16_t amplitude;
uint16_t offset;
int16_t offset;
uint16_t phase;
uint8_t wave;
uint8_t enabled;

View File

@@ -5,6 +5,8 @@
#include "disp_layout.h"
#define abs(x) ((x) < 0 ? -(x) : (x))
#define FREQ_MAX_DIGIT 7
#define AMPL_MAX_DIGIT 3
@@ -34,10 +36,10 @@ static void _drawAmplValue(GFX_display_t *disp, uint16_t ampl, uint8_t pos_y)
DISP_writeString(disp, &font5x7Info, data, 76, pos_y, BM_NORMAL);
}
static void _drawOffsValue(GFX_display_t *disp, uint16_t offs, uint8_t pos_y)
static void _drawOffsValue(GFX_display_t *disp, int16_t offs, uint8_t pos_y)
{
uint8_t data[8];
snprintf((char *)data, 8, "%+01d.%02d V", offs / 100, offs % 100);
snprintf((char *)data, 8, "%+01d.%02d V", offs / 100, abs(offs) % 100);
DISP_writeString(disp, &font5x7Info, data, 76, pos_y, BM_NORMAL);
}
@@ -98,6 +100,7 @@ static void _drawButtons(GFX_display_t *disp, APP_data_t *app_data)
static uint8_t _calcMarkePos(uint32_t value, uint32_t max)
{
return ((62 * value) + (max / 2)) / max;
// return (value < 0) ? ((62 * value) - (max / 2)) / max : ((62 * value) + (max / 2)) / max;
}
static uint8_t _sizeOfCharArray(char *array)
@@ -138,11 +141,11 @@ 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)
static void _drawOffsValueHelper(GFX_display_t *disp, int32_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);
_drawOffsValue(disp, offs, 20);
DISP_drawBitmap(disp, &marker, marker_ampl_pos_x[(AMPL_MAX_DIGIT - 1) - focus_digit], 15, BM_NORMAL);
}
@@ -150,7 +153,7 @@ static void _drawPhaseValueHelper(GFX_display_t *disp, uint32_t phase, uint8_t f
{
DISP_clearRegion(disp, 64, 13, 66, 40);
DISP_writeString(disp, &font5x7Info, (uint8_t *)"P:", 64, 20, BM_NORMAL);
_drawAmplValue(disp, phase, 20);
_drawPhasValue(disp, phase, 20);
DISP_drawBitmap(disp, &marker, marker_ampl_pos_x[(AMPL_MAX_DIGIT - 1) - focus_digit], 15, BM_NORMAL);
}
@@ -168,8 +171,9 @@ static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data)
_drawMeterHelper(disp, "0V", "5V", _calcMarkePos(100, 500));
break;
case LAY_OFFS:
fun_gen->offset = -123;
_drawOffsValueHelper(disp, fun_gen->offset, app_data->offs_focus_digit);
_drawMeterHelper(disp, "-5V", "+5V", _calcMarkePos(100, 500));
_drawMeterHelper(disp, "-5V", "+5V", _calcMarkePos(100 + 250, 500 + 250));
break;
case LAY_PHAS:
_drawPhaseValueHelper(disp, fun_gen->phase, app_data->phas_focus_digit);