Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
mvladic committed Feb 2, 2021
1 parent 37b07a9 commit a52e46a
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 23 deletions.
34 changes: 29 additions & 5 deletions modular-psu-firmware.eez-project
Original file line number Diff line number Diff line change
Expand Up @@ -13173,17 +13173,41 @@
"text": "Limit:"
},
{
"type": "DisplayData",
"type": "Select",
"style": {
"inheritFrom": "edit_value_active_M_center"
"inheritFrom": "default"
},
"data": "channel_protection_opp_limit",
"action": "ch_settings_prot_edit_limit",
"data": "channel_rprog_status",
"left": 119,
"top": 36,
"width": 95,
"height": 32,
"displayOption": 0
"widgets": [
{
"type": "DisplayData",
"style": {
"inheritFrom": "edit_value_active_M_center"
},
"data": "channel_protection_opp_limit",
"action": "ch_settings_prot_edit_limit",
"left": 0,
"top": 0,
"width": 95,
"height": 32,
"displayOption": 0
},
{
"type": "Text",
"style": {
"inheritFrom": "default_M_left"
},
"left": 0,
"top": 0,
"width": 95,
"height": 32,
"text": "RProg"
}
]
},
{
"type": "Text",
Expand Down
7 changes: 7 additions & 0 deletions src/eez/modules/psu/channel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1000,13 +1000,20 @@ void Channel::doRemoteProgrammingEnable(bool enable) {
channel_dispatcher::setVoltage(*this, u.min);
channel_dispatcher::setOvpLevel(*this, channel_dispatcher::getUMaxOvpLevel(*this));
channel_dispatcher::setOvpState(*this, 1);

channel_dispatcher::setPowerLimit(*this, channel_dispatcher::getPowerMaxLimit(*this));
} else {
if (channel_dispatcher::getULimit(*this) > channel_dispatcher::getUMaxOvpLimit(*this)) {
channel_dispatcher::setVoltageLimit(*this, channel_dispatcher::getUMaxOvpLimit(*this));
}

if (channel_dispatcher::getUProtectionLevel(*this) > channel_dispatcher::getUMaxOvpLevel(*this)) {
channel_dispatcher::setOvpLevel(*this, channel_dispatcher::getUMaxOvpLevel(*this));
}

if (channel_dispatcher::getPowerLimit(*this) > channel_dispatcher::getPowerMaxLimit(*this)) {
channel_dispatcher::setPowerLimit(*this, channel_dispatcher::getPowerMaxLimit(*this));
}
}

setRemoteProgramming(enable);
Expand Down
11 changes: 11 additions & 0 deletions src/eez/modules/psu/channel_dispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2249,6 +2249,17 @@ bool isEditEnabled(const WidgetCursor &widgetCursor) {
if (getVoltageTriggerMode(channel) != TRIGGER_MODE_FIXED || getCurrentTriggerMode(channel) != TRIGGER_MODE_FIXED) {
return false;
}
} else if (
widgetCursor.widget->data == DATA_ID_CHANNEL_PROTECTION_OVP_LIMIT ||
widgetCursor.widget->data == DATA_ID_CHANNEL_PROTECTION_OPP_LIMIT
) {
using namespace psu::gui;
auto cursor = widgetCursor.cursor;
int iChannel = cursor >= 0 ? cursor : (g_channel ? g_channel->channelIndex : 0);
auto &channel = Channel::get(iChannel);
if (channel.flags.rprogEnabled) {
return false;
}
}

return true;
Expand Down
52 changes: 35 additions & 17 deletions src/eez/modules/psu/gui/data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ using namespace eez::psu::gui;
extern uint32_t g_RCC_CSR;
#endif

static const char *RPROG_LABEL = "RP";

namespace eez {
namespace gui {

Expand Down Expand Up @@ -1277,7 +1279,11 @@ void data_channel_u_set(DataOperationEnum operation, Cursor cursor, Value &value
int iChannel = cursor >= 0 ? cursor : (g_channel ? g_channel->channelIndex : 0);
Channel &channel = Channel::get(iChannel);
if (operation == DATA_OPERATION_GET) {
value = MakeValue(channel_dispatcher::getUSet(channel), UNIT_VOLT);
if (channel.isRemoteProgrammingEnabled()) {
value = RPROG_LABEL;
} else {
value = MakeValue(channel_dispatcher::getUSet(channel), UNIT_VOLT);
}
} else {
data_channel_u_edit(operation, cursor, value);
}
Expand Down Expand Up @@ -1347,7 +1353,11 @@ void data_channel_u_edit(DataOperationEnum operation, Cursor cursor, Value &valu
} else if (focused && getActivePageId() == PAGE_ID_EDIT_MODE_KEYPAD && edit_mode_keypad::g_keypad->isEditing()) {
data_keypad_text(operation, cursor, value);
} else {
value = MakeValue(channel_dispatcher::getUSet(channel), UNIT_VOLT);
if (channel.isRemoteProgrammingEnabled()) {
value = RPROG_LABEL;
} else {
value = MakeValue(channel_dispatcher::getUSet(channel), UNIT_VOLT);
}
}
} else if (operation == DATA_OPERATION_GET_EDIT_VALUE) {
value = MakeValue(channel_dispatcher::getUSet(channel), UNIT_VOLT);
Expand Down Expand Up @@ -2360,15 +2370,19 @@ void data_channel_protection_ovp_limit(DataOperationEnum operation, Cursor curso
int iChannel = cursor >= 0 ? cursor : (g_channel ? g_channel->channelIndex : 0);
Channel &channel = Channel::get(iChannel);
if (operation == DATA_OPERATION_GET) {
ChSettingsProtectionSetPage *page = (ChSettingsProtectionSetPage *)getPage(PAGE_ID_CH_SETTINGS_PROT_OVP);
if (page) {
value = page->limit;
if (channel.isRemoteProgrammingEnabled()) {
value = RPROG_LABEL;
} else {
bool focused = g_focusCursor == cursor && g_focusDataId == DATA_ID_CHANNEL_PROTECTION_OVP_LIMIT;
if (focused && g_focusEditValue.getType() != VALUE_TYPE_NONE) {
value = g_focusEditValue;
ChSettingsProtectionSetPage *page = (ChSettingsProtectionSetPage *)getPage(PAGE_ID_CH_SETTINGS_PROT_OVP);
if (page) {
value = page->limit;
} else {
value = MakeValue(channel_dispatcher::getULimit(channel), UNIT_VOLT);
bool focused = g_focusCursor == cursor && g_focusDataId == DATA_ID_CHANNEL_PROTECTION_OVP_LIMIT;
if (focused && g_focusEditValue.getType() != VALUE_TYPE_NONE) {
value = g_focusEditValue;
} else {
value = MakeValue(channel_dispatcher::getULimit(channel), UNIT_VOLT);
}
}
}
} else if (operation == DATA_OPERATION_GET_MIN) {
Expand Down Expand Up @@ -2549,15 +2563,19 @@ void data_channel_protection_opp_limit(DataOperationEnum operation, Cursor curso
int iChannel = cursor >= 0 ? cursor : (g_channel ? g_channel->channelIndex : 0);
Channel &channel = Channel::get(iChannel);
if (operation == DATA_OPERATION_GET) {
ChSettingsProtectionSetPage *page = (ChSettingsProtectionSetPage *)getPage(PAGE_ID_CH_SETTINGS_PROT_OPP);
if (page) {
value = page->limit;
if (channel.isRemoteProgrammingEnabled()) {
value = RPROG_LABEL;
} else {
bool focused = g_focusCursor == cursor && g_focusDataId == DATA_ID_CHANNEL_PROTECTION_OPP_LIMIT;
if (focused && g_focusEditValue.getType() != VALUE_TYPE_NONE) {
value = g_focusEditValue;
ChSettingsProtectionSetPage *page = (ChSettingsProtectionSetPage *)getPage(PAGE_ID_CH_SETTINGS_PROT_OPP);
if (page) {
value = page->limit;
} else {
value = MakeValue(channel_dispatcher::getPowerLimit(channel), UNIT_WATT);
bool focused = g_focusCursor == cursor && g_focusDataId == DATA_ID_CHANNEL_PROTECTION_OPP_LIMIT;
if (focused && g_focusEditValue.getType() != VALUE_TYPE_NONE) {
value = g_focusEditValue;
} else {
value = MakeValue(channel_dispatcher::getPowerLimit(channel), UNIT_WATT);
}
}
}
} else if (operation == DATA_OPERATION_GET_MIN) {
Expand Down Expand Up @@ -2734,7 +2752,7 @@ void data_channel_rprog_status(DataOperationEnum operation, Cursor cursor, Value
if (operation == DATA_OPERATION_GET) {
int iChannel = cursor >= 0 ? cursor : (g_channel ? g_channel->channelIndex : 0);
Channel &channel = Channel::get(iChannel);
value = (int)channel.flags.rprogEnabled;
value = channel.isRemoteProgrammingEnabled();
}
}

Expand Down
8 changes: 7 additions & 1 deletion src/eez/modules/psu/gui/psu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,11 @@ bool PsuAppContext::isWidgetActionEnabled(const WidgetCursor &widgetCursor) {
return file_manager::isSelectFileActionEnabled(widgetCursor.cursor);
}

if (widget->action == ACTION_ID_EDIT || widget->action == ACTION_ID_EDIT_NO_FOCUS) {
if (
widget->action == ACTION_ID_EDIT ||
widget->action == ACTION_ID_EDIT_NO_FOCUS ||
widget->action == ACTION_ID_CH_SETTINGS_PROT_EDIT_LIMIT
) {
if (widgetCursor.widget->data == DATA_ID_CALIBRATION_POINT_MEASURED_VALUE) {
auto page = (ChSettingsCalibrationEditPage *)getPage(PAGE_ID_CH_SETTINGS_CALIBRATION_EDIT);
return page->canEditMeasuredValue();
Expand Down Expand Up @@ -2337,6 +2341,8 @@ uint16_t overrideStyleHook(const WidgetCursor &widgetCursor, uint16_t styleId) {
return STYLE_ID_ENCODER_CURSOR_14_DISABLED;
} else if (styleId == STYLE_ID_ENCODER_CURSOR_14_RIGHT_ENABLED) {
return STYLE_ID_ENCODER_CURSOR_14_RIGHT_DISABLED;
} else if (styleId == STYLE_ID_EDIT_VALUE_ACTIVE_M_CENTER) {
return STYLE_ID_DEFAULT_M_LEFT;
}
}
return styleId;
Expand Down
10 changes: 10 additions & 0 deletions src/eez/modules/psu/scpi/sour.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,11 @@ scpi_result_t scpi_cmd_sourceVoltageLimitPositiveImmediateAmplitude(scpi_t *cont
return SCPI_RES_ERR;
}

if (channel->isRemoteProgrammingEnabled()) {
SCPI_ErrorPush(context, SCPI_ERROR_EXECUTION_ERROR);
return SCPI_RES_ERR;
}

float limit;
if (!get_voltage_limit_param(context, limit, channel, &channel->i)) {
return SCPI_RES_ERR;
Expand Down Expand Up @@ -780,6 +785,11 @@ scpi_result_t scpi_cmd_sourcePowerLimit(scpi_t *context) {
return SCPI_RES_ERR;
}

if (channel->isRemoteProgrammingEnabled()) {
SCPI_ErrorPush(context, SCPI_ERROR_EXECUTION_ERROR);
return SCPI_RES_ERR;
}

float limit;
if (!get_power_limit_param(context, limit, channel, &channel->i)) {
return SCPI_RES_ERR;
Expand Down

0 comments on commit a52e46a

Please sign in to comment.