Skip to content

Commit 20b9617

Browse files
committed
encoder
1 parent 8c3d6dd commit 20b9617

File tree

11 files changed

+257
-250
lines changed

11 files changed

+257
-250
lines changed

src/eez/apps/psu/gui/edit_mode_slider.cpp

+3-10
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020

2121
#if OPTION_DISPLAY
2222

23+
#include <eez/apps/psu/gui/psu.h>
2324
#include <eez/apps/psu/gui/edit_mode.h>
2425
#include <eez/gui/touch.h>
2526
#include <eez/modules/mcu/display.h>
27+
#include <eez/modules/mcu/encoder.h>
2628

2729
namespace eez {
2830
namespace psu {
@@ -58,16 +60,7 @@ int displayXSize() {
5860
void increment(int counter) {
5961
float min = edit_mode::getMin().getFloat();
6062
float max = edit_mode::getMax().getFloat();
61-
62-
float value = edit_mode::getEditValue().getFloat() + 0.01f * counter;
63-
64-
if (value < min) {
65-
value = min;
66-
}
67-
if (value > max) {
68-
value = max;
69-
}
70-
63+
float value = mcu::encoder::increment(edit_mode::getEditValue(), counter, min, max, g_focusCursor.i, 0);
7164
edit_mode::setValue(value);
7265
}
7366

src/eez/apps/psu/gui/edit_mode_step.cpp

+90-89
Original file line numberDiff line numberDiff line change
@@ -46,117 +46,119 @@ namespace edit_mode_step {
4646

4747
using data::Value;
4848

49-
static const Value CONF_GUI_U_STEPS[] = {
50-
Value(5.0f, UNIT_VOLT),
51-
Value(2.0f, UNIT_VOLT),
52-
Value(1.0f, UNIT_VOLT),
53-
Value(0.5f, UNIT_VOLT),
54-
Value(0.1f, UNIT_VOLT)
49+
#define NUM_UNITS 6
50+
#define NUM_STEPS_PER_UNIT 5
51+
52+
static const Value CONF_GUI_UNIT_STEPS_LIST[NUM_UNITS][NUM_STEPS_PER_UNIT] = {
53+
{
54+
Value(5.0f, UNIT_VOLT),
55+
Value(2.0f, UNIT_VOLT),
56+
Value(1.0f, UNIT_VOLT),
57+
Value(0.5f, UNIT_VOLT),
58+
Value(0.1f, UNIT_VOLT)
59+
},
60+
{
61+
Value(0.5f, UNIT_AMPER),
62+
Value(0.25f, UNIT_AMPER),
63+
Value(0.1f, UNIT_AMPER),
64+
Value(0.05f, UNIT_AMPER),
65+
Value(0.01f, UNIT_AMPER)
66+
},
67+
{
68+
Value(0.005f, UNIT_AMPER),
69+
Value(0.0025f, UNIT_AMPER),
70+
Value(0.001f, UNIT_AMPER),
71+
Value(0.0005f, UNIT_AMPER),
72+
Value(0.0001f, UNIT_AMPER)
73+
},
74+
{
75+
Value(10.0f, UNIT_WATT),
76+
Value(5.0f, UNIT_WATT),
77+
Value(2.0f, UNIT_WATT),
78+
Value(1.0f, UNIT_WATT),
79+
Value(0.5f, UNIT_WATT)
80+
},
81+
{
82+
Value(20.0f, UNIT_CELSIUS),
83+
Value(10.0f, UNIT_CELSIUS),
84+
Value(5.0f, UNIT_CELSIUS),
85+
Value(2.0f, UNIT_CELSIUS),
86+
Value(1.0f, UNIT_CELSIUS)
87+
},
88+
{
89+
Value(30.0f, UNIT_SECOND),
90+
Value(20.0f, UNIT_SECOND),
91+
Value(10.0f, UNIT_SECOND),
92+
Value(5.0f, UNIT_SECOND),
93+
Value(1.0f, UNIT_SECOND)
94+
},
5595
};
5696

57-
static const Value CONF_GUI_I_STEPS[] = {
58-
Value(0.5f, UNIT_AMPER),
59-
Value(0.25f, UNIT_AMPER),
60-
Value(0.1f, UNIT_AMPER),
61-
Value(0.05f, UNIT_AMPER),
62-
Value(0.01f, UNIT_AMPER)
63-
};
64-
65-
static const Value CONF_GUI_I_LOW_STEPS[] = {
66-
Value(0.005f, UNIT_AMPER),
67-
Value(0.0025f, UNIT_AMPER),
68-
Value(0.001f, UNIT_AMPER),
69-
Value(0.0005f, UNIT_AMPER),
70-
Value(0.0001f, UNIT_AMPER)
71-
};
72-
73-
static const Value CONF_GUI_P_STEPS[] = {
74-
Value(10.0f, UNIT_WATT),
75-
Value(5.0f, UNIT_WATT),
76-
Value(2.0f, UNIT_WATT),
77-
Value(1.0f, UNIT_WATT),
78-
Value(0.5f, UNIT_WATT)
79-
};
80-
81-
static const Value CONF_GUI_TEMP_STEPS[] = {
82-
Value(20.0f, UNIT_CELSIUS),
83-
Value(10.0f, UNIT_CELSIUS),
84-
Value(5.0f, UNIT_CELSIUS),
85-
Value(2.0f, UNIT_CELSIUS),
86-
Value(1.0f, UNIT_CELSIUS)
87-
};
97+
static int g_stepIndexes[NUM_UNITS][CH_MAX];
8898

89-
static const Value CONF_GUI_TIME_STEPS[] = {
90-
Value(30.0f, UNIT_SECOND),
91-
Value(20.0f, UNIT_SECOND),
92-
Value(10.0f, UNIT_SECOND),
93-
Value(5.0f, UNIT_SECOND),
94-
Value(1.0f, UNIT_SECOND)
95-
};
96-
97-
static int g_stepIndex[CH_MAX][2];
98-
99-
static const int DEFAULT_INDEX = 3;
99+
static const int DEFAULT_INDEX = 2;
100100

101101
static bool g_changed;
102102
static int g_startPos;
103103

104-
float getStepValue() {
105-
if (edit_mode::getUnit() == UNIT_VOLT) {
106-
return getStepValues()[getStepIndex()].getFloat();
107-
} else {
108-
return getStepValues()[getStepIndex()].getFloat();
109-
}
110-
}
111-
112104
int getStepValuesCount() {
113-
return 5;
105+
return NUM_STEPS_PER_UNIT;
114106
}
115107

116-
const Value *getStepValues(Unit unit) {
108+
int getUnitStepValuesIndex(Unit unit) {
117109
if (unit == UNIT_VOLT) {
118-
return CONF_GUI_U_STEPS;
119-
} else if (unit == UNIT_AMPER) {
110+
return 0;
111+
}
112+
113+
if (unit == UNIT_AMPER) {
120114
if (Channel::get(g_focusCursor.i).flags.currentRangeSelectionMode == CURRENT_RANGE_SELECTION_ALWAYS_LOW) {
121-
return CONF_GUI_I_LOW_STEPS;
115+
return 2;
122116
}
123-
return CONF_GUI_I_STEPS;
124-
} else if (unit == UNIT_WATT) {
125-
return CONF_GUI_P_STEPS;
126-
} else if (unit == UNIT_CELSIUS) {
127-
return CONF_GUI_TEMP_STEPS;
128-
} else if (unit == UNIT_SECOND) {
129-
return CONF_GUI_TIME_STEPS;
130-
} else {
131-
return CONF_GUI_U_STEPS;
117+
return 1;
118+
}
119+
120+
if (unit == UNIT_WATT) {
121+
return 3;
122+
}
123+
124+
if (unit == UNIT_CELSIUS) {
125+
return 4;
126+
}
127+
128+
if (unit == UNIT_SECOND) {
129+
return 5;
132130
}
131+
132+
return 0;
133133
}
134134

135-
const Value *getStepValues() {
136-
return getStepValues(edit_mode::getUnit());
135+
const Value *getUnitStepValues(Unit unit) {
136+
return CONF_GUI_UNIT_STEPS_LIST[getUnitStepValuesIndex(unit)];
137137
}
138138

139139
int getStepIndex() {
140-
int value;
141-
if (edit_mode::getUnit() == UNIT_VOLT) {
142-
value = g_stepIndex[g_focusCursor.i][0];
143-
} else {
144-
value = g_stepIndex[g_focusCursor.i][1];
140+
int stepIndex = g_stepIndexes[getUnitStepValuesIndex(edit_mode::getUnit())][g_focusCursor.i];
141+
if (stepIndex == 0) {
142+
return DEFAULT_INDEX;
145143
}
144+
return stepIndex - 1;
145+
}
146146

147-
if (value == 0) {
148-
value = DEFAULT_INDEX;
149-
}
147+
void setStepIndex(int value) {
148+
int unitStepValuesIndex = getUnitStepValuesIndex(edit_mode::getUnit());
149+
g_stepIndexes[unitStepValuesIndex][g_focusCursor.i] = 1 + value;
150+
}
150151

151-
return value - 1;
152+
void switchToNextStepIndex() {
153+
g_stepIndexes[getUnitStepValuesIndex(edit_mode::getUnit())][g_focusCursor.i] = 1 + ((getStepIndex() + 1) % NUM_STEPS_PER_UNIT);
152154
}
153155

154-
void setStepIndex(int value) {
155-
if (edit_mode::getUnit() == UNIT_VOLT) {
156-
g_stepIndex[g_focusCursor.i][0] = value + 1;
157-
} else {
158-
g_stepIndex[g_focusCursor.i][1] = value + 1;
159-
}
156+
const Value *getStepValues() {
157+
return getUnitStepValues(edit_mode::getUnit());
158+
}
159+
160+
float getStepValue() {
161+
return getStepValues()[getStepIndex()].getFloat();
160162
}
161163

162164
void increment(int counter, bool playClick) {
@@ -199,7 +201,6 @@ void increment(int counter, bool playClick) {
199201
#if OPTION_ENCODER
200202

201203
void onEncoder(int counter) {
202-
mcu::encoder::enableAcceleration(false);
203204
increment(counter, false);
204205
}
205206

@@ -228,7 +229,7 @@ void onTouchUp() {
228229

229230
Value getCurrentEncoderStepValue() {
230231
auto editValue = data::getEditValue(g_focusCursor, g_focusDataId);
231-
auto stepValues = getStepValues(editValue.getUnit());
232+
auto stepValues = getUnitStepValues(editValue.getUnit());
232233
return stepValues[mcu::encoder::ENCODER_MODE_STEP5 - mcu::encoder::g_encoderMode];
233234
}
234235

src/eez/apps/psu/gui/edit_mode_step.h

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ void onTouchDown();
4040
void onTouchMove();
4141
void onTouchUp();
4242

43+
void switchToNextStepIndex();
44+
4345
eez::gui::data::Value getCurrentEncoderStepValue();
4446
void showCurrentEncoderMode();
4547

src/eez/apps/psu/gui/numeric_keypad.cpp

+5-19
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ void NumericKeypad::init(const char *label, const data::Value &value, NumericKey
111111
m_options.flags.dotButtonEnabled = true;
112112
}
113113

114-
if (m_startValue.isMicro()) {
115-
switchToMicro();
116-
} else if (m_startValue.isMilli()) {
117-
switchToMilli();
114+
if (m_startValue.isMicro()) {
115+
switchToMicro();
116+
} else if (m_startValue.isMilli()) {
117+
switchToMilli();
118118
}
119119

120120
m_maxChars = 16;
@@ -565,24 +565,10 @@ bool NumericKeypad::onEncoder(int counter) {
565565
}
566566

567567
if (m_startValue.getType() == VALUE_TYPE_FLOAT) {
568-
mcu::encoder::enableAcceleration(true);
569-
570-
float newValue = m_startValue.getFloat() + 0.01f * counter;
571-
572-
if (newValue < m_options.min) {
573-
newValue = m_options.min;
574-
}
575-
576-
if (newValue > m_options.max) {
577-
newValue = m_options.max;
578-
}
579-
568+
float newValue = mcu::encoder::increment(m_startValue, counter, m_options.min, m_options.max, m_options.channelIndex, 0.01f);
580569
m_startValue = MakeValue(newValue, m_startValue.getUnit());
581-
582570
return true;
583571
} else if (m_startValue.getType() == VALUE_TYPE_INT) {
584-
mcu::encoder::enableAcceleration(false);
585-
586572
int newValue = m_startValue.getInt() + counter;
587573

588574
if (newValue < (int)m_options.min) {

src/eez/apps/psu/gui/page_ch_settings_trigger.cpp

+12-3
Original file line numberDiff line numberDiff line change
@@ -490,12 +490,21 @@ void ChSettingsListsPage::set() {
490490

491491
bool ChSettingsListsPage::onEncoder(int counter) {
492492
#if OPTION_ENCODER
493-
mcu::encoder::enableAcceleration(true);
493+
data::Cursor cursor(getCursorIndexWithinPage());
494494
uint16_t dataId = getDataIdAtCursor();
495495

496-
float step = dataId == DATA_ID_CHANNEL_LIST_VOLTAGE ? 0.01f : 0.001f;
496+
data::Value value = data::get(cursor, dataId);
497+
if (value.getType() == VALUE_TYPE_STR) {
498+
value = data::getDef(cursor, dataId);
499+
}
500+
501+
data::Value min = data::getMin(cursor, dataId);
502+
data::Value max = data::getMax(cursor, dataId);
503+
504+
float newValue = mcu::encoder::increment(value, counter, min.getFloat(), max.getFloat(), g_channel->index - 1, 0);
505+
506+
setFocusedValue(newValue);
497507

498-
setFocusedValue(getFocusedValue() + step * counter);
499508
return true;
500509
#endif
501510
return false;

0 commit comments

Comments
 (0)