summaryrefslogtreecommitdiffhomepage
path: root/protocols/luci-proto-qmi
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/luci-proto-qmi')
-rw-r--r--protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js101
-rw-r--r--protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua63
2 files changed, 101 insertions, 63 deletions
diff --git a/protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js b/protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js
new file mode 100644
index 0000000000..eeda91f6e6
--- /dev/null
+++ b/protocols/luci-proto-qmi/htdocs/luci-static/resources/protocol/qmi.js
@@ -0,0 +1,101 @@
+'use strict';
+'require rpc';
+'require form';
+'require network';
+
+var callFileList = rpc.declare({
+ object: 'file',
+ method: 'list',
+ params: [ 'path' ],
+ expect: { entries: [] },
+ filter: function(list, params) {
+ var rv = [];
+ for (var i = 0; i < list.length; i++)
+ if (list[i].name.match(/^cdc-wdm/))
+ rv.push(params.path + list[i].name);
+ return rv.sort();
+ }
+});
+
+network.registerPatternVirtual(/^qmi-.+$/);
+network.registerErrorCode('CALL_FAILED', _('Call failed'));
+network.registerErrorCode('NO_CID', _('Unable to obtain client ID'));
+network.registerErrorCode('PLMN_FAILED', _('Setting PLMN failed'));
+
+return network.registerProtocol('qmi', {
+ getI18n: function() {
+ return _('QMI Cellular');
+ },
+
+ getIfname: function() {
+ return this._ubus('l3_device') || 'qmi-%s'.format(this.sid);
+ },
+
+ getOpkgPackage: function() {
+ return 'uqmi';
+ },
+
+ isFloating: function() {
+ return true;
+ },
+
+ isVirtual: function() {
+ return true;
+ },
+
+ getDevices: function() {
+ return null;
+ },
+
+ containsDevice: function(ifname) {
+ return (network.getIfnameOf(ifname) == this.getIfname());
+ },
+
+ renderFormOptions: function(s) {
+ var dev = this.getL3Device() || this.getDevice(), o;
+
+ o = s.taboption('general', form.Value, 'device', _('Modem device'));
+ o.rmempty = false;
+ o.load = function(section_id) {
+ return callFileList('/dev/').then(L.bind(function(devices) {
+ for (var i = 0; i < devices.length; i++)
+ this.value(devices[i]);
+ return form.Value.prototype.load.apply(this, [section_id]);
+ }, this));
+ };
+
+ s.taboption('general', form.Value, 'apn', _('APN'));
+ s.taboption('general', form.Value, 'pincode', _('PIN'));
+
+ o = s.taboption('general', form.ListValue, 'auth', _('Authentication Type'));
+ o.value('both', 'PAP/CHAP (both)');
+ o.value('pap', 'PAP');
+ o.value('chap', 'CHAP');
+ o.value('none', 'NONE');
+ o.default = 'none';
+
+ o = s.taboption('general', form.Value, 'username', _('PAP/CHAP username'));
+ o.depends('auth', 'pap');
+ o.depends('auth', 'chap');
+ o.depends('auth', 'both');
+
+ o = s.taboption('general', form.Value, 'password', _('PAP/CHAP password'));
+ o.depends('auth', 'pap');
+ o.depends('auth', 'chap');
+ o.depends('auth', 'both');
+ o.password = true;
+
+ if (L.hasSystemFeature('ipv6')) {
+ o = s.taboption('advanced', form.Flag, 'ipv6', _('Enable IPv6 negotiation'));
+ o.default = o.disabled;
+ }
+
+ o = s.taboption('advanced', form.Value, 'delay', _('Modem init timeout'), _('Maximum amount of seconds to wait for the modem to become ready'));
+ o.placeholder = '10';
+ o.datatype = 'min(1)';
+
+ o = s.taboption('advanced', form.Value, 'mtu', _('Override MTU'));
+ o.placeholder = dev ? (dev.getMTU() || '1500') : '1500';
+ o.datatype = 'max(9200)';
+ }
+});
diff --git a/protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua b/protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua
deleted file mode 100644
index 383bc4662f..0000000000
--- a/protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua
+++ /dev/null
@@ -1,63 +0,0 @@
--- Copyright 2016 David Thornley <david.thornley@touchstargroup.com>
--- Licensed to the public under the Apache License 2.0.
-
-local map, section, net = ...
-
-local device, apn, pincode, username, password
-local auth, ipv6, delay, mtu
-
-
-device = section:taboption("general", Value, "device", translate("Modem device"))
-device.rmempty = false
-
-local device_suggestions = nixio.fs.glob("/dev/cdc-wdm*")
-
-if device_suggestions then
- local node
- for node in device_suggestions do
- device:value(node)
- end
-end
-
-
-apn = section:taboption("general", Value, "apn", translate("APN"))
-
-
-pincode = section:taboption("general", Value, "pincode", translate("PIN"))
-
-
-auth = section:taboption("general", Value, "auth", translate("Authentication Type"))
-auth:value("both", "PAP/CHAP (both)")
-auth:value("pap", "PAP")
-auth:value("chap", "CHAP")
-auth:value("none", "NONE")
-auth.default = "none"
-
-
-username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
-username:depends("auth", "pap")
-username:depends("auth", "chap")
-username:depends("auth", "both")
-
-
-password = section:taboption("general", Value, "password", translate("PAP/CHAP password"))
-password:depends("auth", "pap")
-password:depends("auth", "chap")
-password:depends("auth", "both")
-password.password = true
-
-
-if luci.model.network:has_ipv6() then
- ipv6 = section:taboption("advanced", Flag, "ipv6", translate("Enable IPv6 negotiation"))
- ipv6.default = ipv6.disabled
-end
-
-delay = section:taboption("advanced", Value, "delay",
- translate("Modem init timeout"),
- translate("Maximum amount of seconds to wait for the modem to become ready"))
-delay.placeholder = "10"
-delay.datatype = "min(1)"
-
-mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"))
-mtu.placeholder = "1500"
-mtu.datatype = "max(9200)"