[fix] negative offset
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user