Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add GPS Mode selector in modem UI #5424

Merged
merged 20 commits into from
Oct 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion kura/org.eclipse.kura.web2/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Import-Package: com.eclipsesource.json;version="0.9.5",
org.eclipse.kura.net.modem;version="[2.2,3.0)",
org.eclipse.kura.net.status;version="[1.0,2.0)",
org.eclipse.kura.net.status.ethernet;version="[1.0,2.0)",
org.eclipse.kura.net.status.modem;version="[1.0,2.0)",
org.eclipse.kura.net.status.modem;version="[1.1,2.0)",
org.eclipse.kura.net.status.vlan;version="[1.0,2.0)",
org.eclipse.kura.net.status.wifi;version="[1.0,2.0)",
org.eclipse.kura.net.vlan;version="[1.0,2.0)",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
*******************************************************************************/
package org.eclipse.kura.web.client.ui.network;

import java.util.Arrays;
import java.util.List;

import org.eclipse.kura.web.client.messages.Messages;
import org.eclipse.kura.web.client.util.HelpButton;
import org.eclipse.kura.web.shared.model.GwtModemInterfaceConfig;
Expand All @@ -20,6 +23,7 @@
import org.gwtbootstrap3.client.ui.FieldSet;
import org.gwtbootstrap3.client.ui.FormLabel;
import org.gwtbootstrap3.client.ui.InlineRadio;
import org.gwtbootstrap3.client.ui.ListBox;
import org.gwtbootstrap3.client.ui.PanelHeader;
import org.gwtbootstrap3.client.ui.html.Span;

Expand All @@ -39,6 +43,13 @@ interface TabModemGpsUiUiBinder extends UiBinder<Widget, TabModemGpsUi> {

private static final Messages MSGS = GWT.create(Messages.class);

// Note: index of AVAIL_GPS_MODES and CONFIG_GPS_MODES must match!
// Strings used for the dropdown (item text) and that match the ModemGpsMode enum in the Kura API
private static final List<String> AVAIL_GPS_MODES = Arrays.asList("UNMANAGED", "MANAGED_GPS");
// Strings used for the configuration (i.e. that will be written in the sanpshot) and set as dropdown values
private static final List<String> CONFIG_GPS_MODES = Arrays.asList("kuraModemGpsModeUnmanaged",
"kuraModemGpsModeManagedGps");

private final GwtSession session;
private final NetworkTabsUi tabs;
private boolean dirty;
Expand All @@ -47,12 +58,17 @@ interface TabModemGpsUiUiBinder extends UiBinder<Widget, TabModemGpsUi> {

@UiField
FormLabel labelGps;
@UiField
FormLabel labelGpsMode;

@UiField
InlineRadio radio1;
@UiField
InlineRadio radio2;

@UiField
ListBox gpsMode;

@UiField
PanelHeader helpTitle;

Expand All @@ -65,6 +81,9 @@ interface TabModemGpsUiUiBinder extends UiBinder<Widget, TabModemGpsUi> {
@UiField
HelpButton gpsHelp;

@UiField
HelpButton gpsModeHelp;

public TabModemGpsUi(GwtSession currentSession, NetworkTabsUi tabs) {
initWidget(uiBinder.createAndBindUi(this));
this.session = currentSession;
Expand Down Expand Up @@ -105,9 +124,11 @@ public void getUpdatedNetInterface(GwtNetInterfaceConfig updatedNetIf) {
GwtModemInterfaceConfig updatedModemNetIf = (GwtModemInterfaceConfig) updatedNetIf;
if (this.formInitialized) {
updatedModemNetIf.setGpsEnabled(this.radio1.getValue());
updatedModemNetIf.setGpsMode(this.gpsMode.getSelectedValue());
} else {
// initForm hasn't been called yet
updatedModemNetIf.setGpsEnabled(this.selectedModemIfConfig.isGpsEnabled());
updatedModemNetIf.setGpsMode(this.selectedModemIfConfig.getGpsMode());
}
}

Expand Down Expand Up @@ -146,14 +167,38 @@ private void initForm() {
}
});
this.radio2.addMouseOutHandler(event -> resetHelp());
this.radio1.addValueChangeHandler(event -> setDirty(true));
this.radio2.addValueChangeHandler(event -> setDirty(true));
this.radio1.addValueChangeHandler(event -> {
setDirty(true);
this.gpsMode.setEnabled(this.radio1.getValue());
});
this.radio2.addValueChangeHandler(event -> {
setDirty(true);
this.gpsMode.setEnabled(this.radio1.getValue());
});

this.helpTitle.setText(MSGS.netHelpTitle());
this.radio1.setText(MSGS.trueLabel());
this.radio2.setText(MSGS.falseLabel());
this.radio1.setValue(true);
this.radio2.setValue(false);

// GPS Mode
this.labelGpsMode.setText(MSGS.netModemGpsMode());
this.gpsMode.clear();

for (String mode : AVAIL_GPS_MODES) {
this.gpsMode.addItem(mode, CONFIG_GPS_MODES.get(AVAIL_GPS_MODES.indexOf(mode)));
this.gpsMode.getElement().getElementsByTagName("option").getItem(AVAIL_GPS_MODES.indexOf(mode))
.setAttribute("disabled", "disabled");
}

this.gpsMode.addMouseOverHandler(event -> {
TabModemGpsUi.this.helpText.clear();
TabModemGpsUi.this.helpText.add(new Span(MSGS.netModemToolTipGpsMode()));
});
this.gpsMode.addMouseOutHandler(event -> resetHelp());
this.gpsMode.addChangeHandler(event -> setDirty(true));

this.formInitialized = true;
}

Expand All @@ -164,32 +209,38 @@ private void resetHelp() {

private void update() {
if (this.selectedModemIfConfig != null) {
if (this.selectedModemIfConfig.isGpsEnabled()) {
this.radio1.setValue(true);
this.radio2.setValue(false);
} else {
this.radio1.setValue(false);
this.radio2.setValue(true);
this.radio1.setValue(this.selectedModemIfConfig.isGpsEnabled());
this.radio2.setValue(!this.selectedModemIfConfig.isGpsEnabled());

for (int i = 0; i < this.gpsMode.getItemCount(); i++) {
if (this.gpsMode.getValue(i).equals(this.selectedModemIfConfig.getGpsMode())) {
this.gpsMode.setSelectedIndex(i);
break;
}
}
}
refreshForm();
}

private void refreshForm() {
if (this.selectedModemIfConfig != null) {
if (this.selectedModemIfConfig.isGpsSupported()) {
this.radio1.setEnabled(true);
this.radio2.setEnabled(true);
} else {
this.radio1.setEnabled(false);
this.radio2.setEnabled(false);
this.radio1.setEnabled(this.selectedModemIfConfig.isGpsSupported());
this.radio2.setEnabled(this.selectedModemIfConfig.isGpsSupported());

for (int i = 0; i < this.gpsMode.getItemCount(); i++) {
if (this.selectedModemIfConfig.getSupportedGpsModes().contains(this.gpsMode.getItemText(i))) {
this.gpsMode.getElement().getElementsByTagName("option").getItem(i).removeAttribute("disabled");
}
}
}

this.gpsMode.setEnabled(this.radio1.getValue());
}

private void reset() {
this.radio1.setValue(true);
this.radio2.setValue(false);
this.gpsMode.setSelectedIndex(0); // UNMANAGED
update();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@
</g:FlowPanel>
</b:FormGroup>

<b:FormGroup>
<b:FormLabel for="gpsMode" ui:field="labelGpsMode"></b:FormLabel>
<util:HelpButton ui:field="gpsModeHelp" />
<g:FlowPanel>
<b:ListBox b:id="gpsMode" ui:field="gpsMode" />
</g:FlowPanel>
</b:FormGroup>

</b:FieldSet>
</b:Form>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ private void setModemProperties() {
gwtModemConfig.setLcpEchoInterval(this.properties.getModemLpcEchoInterval(this.ifName));
gwtModemConfig.setLcpEchoFailure(this.properties.getModemLpcEchoFailure(this.ifName));
gwtModemConfig.setGpsEnabled(this.properties.getModemGpsEnabled(this.ifName));
gwtModemConfig.setGpsMode(this.properties.getModemGpsMode(ifName));
gwtModemConfig.setDiversityEnabled(this.properties.getModemDiversityEnabled(this.ifName));
gwtModemConfig.setApn(this.properties.getModemApn(this.ifName));
gwtModemConfig.setModemId(this.properties.getUsbProductName(this.ifName));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,7 @@ public void setWifiInfraRadioMode(String ifname, Optional<String> mode) {
private static final String NET_INTERFACE_CONFIG_DIVERSITY_ENABLED = "net.interface.%s.config.diversityEnabled";
private static final String NET_INTERFACE_CONFIG_RESET_TIMEOUT = "net.interface.%s.config.resetTimeout";
private static final String NET_INTERFACE_CONFIG_GPS_ENABLED = "net.interface.%s.config.gpsEnabled";
private static final String NET_INTERFACE_CONFIG_GPS_MODE = "net.interface.%s.config.gpsMode";
private static final String NET_INTERFACE_CONFIG_PERSIST = "net.interface.%s.config.persist";
private static final String NET_INTERFACE_CONFIG_APN = "net.interface.%s.config.apn";
private static final String NET_INTERFACE_CONFIG_DIAL_STRING = "net.interface.%s.config.dialString";
Expand Down Expand Up @@ -718,6 +719,15 @@ public void setModemGpsEnabled(String ifname, boolean isGpsEnabled) {
this.properties.put(String.format(NET_INTERFACE_CONFIG_GPS_ENABLED, ifname), isGpsEnabled);
}

public String getModemGpsMode(String ifname) {
return (String) this.properties.getOrDefault(String.format(NET_INTERFACE_CONFIG_GPS_MODE, ifname),
"kuraModemGpsModeUnmanaged");
}

public void setModemGpsMode(String ifname, String gpsMode) {
this.properties.put(String.format(NET_INTERFACE_CONFIG_GPS_MODE, ifname), gpsMode);
}

public boolean getModemPersistEnabled(String ifname) {
return (boolean) this.properties.getOrDefault(String.format(NET_INTERFACE_CONFIG_PERSIST, ifname), false);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,7 @@ private void setModemGpsProperties() {
GwtModemInterfaceConfig gwtModemConfig = (GwtModemInterfaceConfig) this.gwtConfig;

this.properties.setModemGpsEnabled(this.ifname, gwtModemConfig.isGpsEnabled());
this.properties.setModemGpsMode(this.ifname, gwtModemConfig.getGpsMode());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,8 @@ private void setModemStateProperties(GwtNetInterfaceConfig gwtConfig, NetworkInt
gwtModemConfig.setManufacturer(ellipsis(modemInterfaceInfo.getManufacturer(), 20));
gwtModemConfig.setModemId(modemInterfaceInfo.getModel());
gwtModemConfig.setGpsSupported(modemInterfaceInfo.isGpsSupported());
gwtModemConfig.setSupportedGpsModes(
modemInterfaceInfo.getSupporteGpsModes().stream().map(Enum::name).collect(Collectors.toList()));
gwtModemConfig.setHwFirmware(modemInterfaceInfo.getFirmwareVersion());
gwtModemConfig.setConnectionType(modemInterfaceInfo.getConnectionType().toString());
gwtModemConfig.setNetworkTechnology(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,14 @@ public void setGpsEnabled(boolean gpsEnabled) {
set("gpsEnabled", gpsEnabled);
}

public void setGpsMode(String gpsMode) {
set("gpsMode", gpsMode);
}

public String getGpsMode() {
return get("gpsMode");
}

public boolean isGpsSupported() {
if (get("gpsSupported") != null) {
return (Boolean) get("gpsSupported");
Expand All @@ -254,6 +262,14 @@ public void setGpsSupported(boolean gpsSupported) {
set("gpsSupported", gpsSupported);
}

public void setSupportedGpsModes(List<String> list) {
set("gpsSupportedModes", list);
}

public List<String> getSupportedGpsModes() {
return get("gpsSupportedModes");
}

public boolean isDiversityEnabled() {
if (get(DIVERSITY_ENABLED_KEY) != null) {
return (Boolean) get(DIVERSITY_ENABLED_KEY);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,7 @@ netModemInvalidLcpEchoInterval="LCP Echo Interval" must be set to either 0 or po
netModemLcpEchoFailure=LCP Echo Failure
netModemInvalidLcpEchoFailure="LCP Echo Failure" must be set to either 0 or positive integer.
netModemEnableGps=Enable GPS
netModemGpsMode=GPS Mode
netModemToolTipNetworkTopology=Select the appropriate network topology.
netModemToolTipModemIndentifier=Enter a unique name for the modem.
netModemToolTipModemInterfaceNumber=A unique number that identifies a modem interface. For example: <br><br>An Interface # of 0 would name the modem interface ppp0<br><br>An Interface # of 1 would name the modem interface ppp1
Expand All @@ -711,7 +712,8 @@ netModemToolTipIdle=Sets the <i>idle</i> option of the PPP daemon which makes it
netModemToolTipActiveFilter=Sets the <i>active-filter</i> option of the PPP daemon. It specifies a packet filter (filter-expression) to be applied to data packets to determine which packets are to be regarded as link activity, and therefore reset the idle timer.<br><br>The <i>filter-expression</i> syntax is as described for tcpdump(1), except that qualifiers which are inappropriate for a PPP link, such as ether and arp, are not permitted.<br><br>The default value is: <b>inbound</b><br><br>To disable the <i>active-filter</i> option of the PPP daemon, leave it blank.
netModemToolTipLcpEchoInterval=Sets the <i>lcp-echo-interval</i> option of the PPP daemon.<br><br>If set to a positive number, modem will send an LCP echo-request to the peer every specified number of seconds.<br><br>To disable this option, set it to 0.<br><br>This option can be used with the 'LCP Echo Failure' option to detect that the peer is no longer connected.
netModemToolTipLcpEchoFailure=Sets the <i>lcp-echo-failure</i> option of the PPP daemon<br><br>If set to a positive number, modem will presume the peer to be dead if specified number of LCP echo-requests are sent without receiving a valid LCP echo-reply.<br><br>To disable this option, set it to 0.
netModemToolTipEnableGps=Enable GPS from modem.<br><br>If enabled:<br>* One modem port will be dedicated to NMEA data stream.<br>* It will not be possible to send AT commands to this port.<br>* Position Service needs to be enabled as well.<br>* Serial settings of Position Service should not be changed; it will be redirected to the modem GPS port automatically.
netModemToolTipEnableGps=Enable modem GPS.
netModemToolTipGpsMode=Choose GPS mode:<br><br>* <i>UNMANAGED</i> the GPS device of the modem will be setup but not directly managed, therefore freeing the serial port for other services to use.<br>* <i>MANAGED_GPS</i> the GPS device of the modem will be setup and directly managed therefore the serial port will not be available for other services to use.
netModemAntenna=Antenna
netModemEnableCellDiv=LTE Antenna Diversity
netModemToolTipAntenna=Diversity antenna of the LTE modem enabled.<br><br>LTE uses MIMO technology with two antennas port noted "CELL MAIN" and "CELL DIV". When you use only one antenna connected to MAIN port the diversity antenna (CELL DIV) needs to be disabled.<br>In this case select "false".
Expand Down
Loading