Guest User

Untitled

a guest
Oct 24th, 2025
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 62.64 KB | None | 0 0
  1. /*
  2. *
  3. * Original code by Miononno
  4. * https://www.youtube.com/watch?v=1kanq1w2DA0
  5. *
  6. * Enhanced by unknown @ lteforum.at
  7. *
  8. */
  9.  
  10. console.log("Loading ZTE Script v" + "2024-03-29-#1");
  11.  
  12. siginfo =
  13. "wan_active_band,wan_active_channel,wan_lte_ca,wan_apn,wan_ipaddr," +
  14. "cell_id,dns_mode,prefer_dns_manual,standby_dns_manual,network_type," +
  15.  
  16. "network_provider_fullname," +
  17. "rmcc,rmnc," +
  18.  
  19. "ip_passthrough_enabled," +
  20.  
  21. "bandwidth," +
  22. "tx_power," +
  23.  
  24. "rscp_1,ecio_1,rscp_2,ecio_2,rscp_3,ecio_3,rscp_4,ecio_4," +
  25.  
  26. "ngbr_cell_info," +
  27. "lte_multi_ca_scell_info,lte_multi_ca_scell_sig_info," +
  28. "lte_band,lte_rsrp,lte_rsrq," +
  29. "lte_rsrq,lte_rssi,lte_rsrp,lte_snr," +
  30. "lte_ca_pcell_band,lte_ca_pcell_freq,lte_ca_pcell_bandwidth," +
  31. "lte_ca_scell_band,lte_ca_scell_bandwidth," +
  32. "lte_rsrp_1,lte_rsrp_2,lte_rsrp_3,lte_rsrp_4," +
  33. "lte_snr_1,lte_snr_2,lte_snr_3,lte_snr_4," +
  34. "lte_pci,lte_pci_lock,lte_earfcn_lock," +
  35.  
  36. "5g_rx0_rsrp,5g_rx1_rsrp,Z5g_rsrp,Z5g_rsrq,Z5g_SINR," +
  37. "nr5g_cell_id,nr5g_pci," +
  38. "nr5g_action_channel,nr5g_action_band," +
  39. "nr5g_action_nsa_band," +
  40. "nr_ca_pcell_band,nr_ca_pcell_freq," +
  41. "nr_multi_ca_scell_info," +
  42. "nr5g_sa_band_lock,nr5g_nsa_band_lock," +
  43.  
  44. "pm_sensor_ambient,pm_sensor_mdm,pm_sensor_5g,pm_sensor_pa1,wifi_chip_temp";
  45.  
  46. is_mc888 = false;
  47. is_mc889 = false;
  48. logged_in_as_developer = false;
  49.  
  50. function dump_variable(v)
  51. {
  52. for (property in v)
  53. {
  54. try
  55. {
  56. console.log(property + ":" + JSON.stringify(v[property]));
  57. }
  58. catch { }
  59. }
  60. }
  61.  
  62. function var2html(prefix, v)
  63. {
  64. for (index in v)
  65. {
  66. var items = v[index];
  67.  
  68. for (item_index in items)
  69. $("#" + prefix + "_" + index + "_" + item_index).html(items[item_index]);
  70. }
  71. }
  72.  
  73. function test_cmd(cmd)
  74. {
  75. $.ajax({
  76. type: "GET",
  77. url: "/goform/goform_get_cmd_process",
  78. data:
  79. {
  80. cmd: cmd,
  81. multi_data: "1"
  82. },
  83. dataType: "json",
  84. success: function(a)
  85. {
  86. console.log(a);
  87. }
  88. });
  89. }
  90.  
  91. // https://stackoverflow.com/a/68009748/1392778
  92. window.cookies = window.cookies ||
  93. {
  94. // https://stackoverflow.com/a/25490531/1028230
  95. get: function(name)
  96. {
  97. var b = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
  98. return b ? b.pop() : null;
  99. },
  100.  
  101. delete: function(name)
  102. {
  103. document.cookie = '{0}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'
  104. .replace('{0}', name);
  105. },
  106.  
  107. set: function(name, value)
  108. {
  109. document.cookie =
  110. '{0}={1};expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;SameSite=Lax'
  111. .replace('{0}', name)
  112. .replace('{1}', value);
  113. }
  114. };
  115.  
  116. function show_logout_and_shutdown_buttons()
  117. {
  118. document.getElementById("logout").childNodes.forEach(el => {
  119. $(el).hide();
  120. $(el).show();
  121. });
  122. }
  123.  
  124. wait_for_log_in_done = false;
  125. function wait_for_log_in()
  126. {
  127. check_log_in(
  128. function()
  129. {
  130. if (wait_for_log_in_done) return;
  131. wait_for_log_in_done = true;
  132.  
  133. inject_html();
  134. get_status();
  135.  
  136. show_logout_and_shutdown_buttons_i = 0;
  137. show_logout_and_shutdown_buttons_timer_id = window.setInterval(function() {
  138. show_logout_and_shutdown_buttons();
  139. if (++show_logout_and_shutdown_buttons_i >= 6)
  140. window.clearInterval(show_logout_and_shutdown_buttons_timer_id);
  141. }, 500);
  142.  
  143. show_logout_and_shutdown_buttons();
  144.  
  145. window.setInterval(get_status, 1000);
  146. window.setInterval(prevent_automatic_logout, 60000);
  147.  
  148. window.clearInterval(wait_for_log_in_timer_id);
  149. },
  150.  
  151. function()
  152. {
  153. if (typeof show_log_in_info_once === "undefined")
  154. console.log("Contents of script will show once you are logged in!");
  155. show_log_in_info_once = true;
  156. }
  157. );
  158. }
  159.  
  160. function init()
  161. {
  162. wait_for_log_in_timer_id = window.setInterval(wait_for_log_in, 250);
  163. wait_for_log_in();
  164. }
  165.  
  166. function perform_automatic_login_or_init()
  167. {
  168. if (have_admin_password_hash())
  169. {
  170. check_log_in(
  171.  
  172. function()
  173. {
  174. console.log("Already logged in ...");
  175. init();
  176. },
  177.  
  178. function()
  179. {
  180. console.log("Logging in ...");
  181. perform_login(function() {
  182. console.log("... logged in");
  183. init();
  184. hash_fix_i = 0;
  185. hash_fix_timer_id = window.setInterval(function() {
  186. window.location.hash = "home";
  187. if (++hash_fix_i >= 10) window.clearInterval(hash_fix_timer_id);
  188. }, 100);
  189. });
  190. }
  191.  
  192. );
  193. }
  194. else init();
  195. }
  196.  
  197. /*
  198. * Wait until inner version string is available.
  199. */
  200. prepare_2_done = false;
  201. function prepare_2()
  202. {
  203. $.ajax({
  204. type: "GET",
  205. url: "/goform/goform_get_cmd_process",
  206. data:
  207. {
  208. cmd: "wa_inner_version"
  209. },
  210. dataType: "json",
  211. success: function(a)
  212. {
  213. if (a.wa_inner_version == "" || prepare_2_done) return;
  214. prepare_2_done = true;
  215.  
  216. is_mc888 = a.wa_inner_version.indexOf("MC888") > -1;
  217. is_mc889 = a.wa_inner_version.indexOf("MC889") > -1;
  218.  
  219. if (is_mc888 || is_mc889) hash = SHA256;
  220. else hash = hex_md5;
  221.  
  222. perform_automatic_login_or_init();
  223.  
  224. window.clearInterval(prepare_2_timer_id);
  225. }
  226. })
  227. }
  228.  
  229. /*
  230. * Wait until SHA256() is available.
  231. */
  232. function prepare_1()
  233. {
  234. if (typeof SHA256 === "undefined")
  235. {
  236. return;
  237. }
  238.  
  239. window.clearInterval(prepare_1_timer_id);
  240.  
  241. prepare_2_timer_id = window.setInterval(prepare_2, 250);
  242. prepare_2();
  243. }
  244.  
  245. function make_hidden_settings_visible()
  246. {
  247. alert("This option makes hidden device settings visible.\n" +
  248. "Hidden settings are marked with a '[hidden option]' suffix");
  249.  
  250. window.setInterval(function() {
  251. Array.from(document.querySelectorAll('*')).forEach(el => {
  252. // $(el).hide();
  253. // $(el).show();
  254. if (el.classList.contains("hide")) {
  255. el.classList.remove("hide");
  256. el.innerHTML += " [hidden option]";
  257. }
  258. })},
  259. 1000);
  260. }
  261.  
  262. function have_admin_password_hash()
  263. {
  264. return cookies.get("admin_password_hash") !== null;
  265. }
  266.  
  267. function perform_login(successCallback, developer_login = false, save_password_hash = false)
  268. {
  269. var password_hash = "";
  270.  
  271. if (have_admin_password_hash())
  272. password_hash = cookies.get("admin_password_hash");
  273.  
  274. if (password_hash == "")
  275. {
  276. var password = prompt("Router Password");
  277.  
  278. if (password == null || password == "")
  279. return;
  280.  
  281. password_hash = SHA256(password);
  282. }
  283.  
  284. $.ajax({
  285. type: "GET",
  286. url: "/goform/goform_get_cmd_process",
  287. data:
  288. {
  289. cmd: "wa_inner_version,cr_version,RD,LD",
  290. multi_data: "1"
  291. },
  292. dataType: "json",
  293. success: function(a)
  294. {
  295. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
  296. $.ajax({
  297. type: "POST",
  298. url: "/goform/goform_set_cmd_process",
  299. data:
  300. {
  301. isTest: "false",
  302. goformId: developer_login ? "DEVELOPER_OPTION_LOGIN" : "LOGIN",
  303. password: SHA256(password_hash + a.LD),
  304. AD: ad
  305. },
  306. success: function(a)
  307. {
  308. var j = JSON.parse(a);
  309. console.log(j);
  310. if ("0" == j.result)
  311. {
  312. if (save_password_hash) cookies.set("admin_password_hash", password_hash);
  313. if (successCallback) successCallback();
  314. }
  315. else
  316. {
  317. var reason = "";
  318. switch (j.result)
  319. {
  320. case "1":
  321. {
  322. reason = "Try again later";
  323. break;
  324. }
  325. case "3":
  326. {
  327. reason = "Wrong Password";
  328. if (have_admin_password_hash())
  329. {
  330. console.log("Wrong password. Removing stored password hash ...");
  331. cookies.delete("admin_password_hash");
  332. }
  333. break;
  334. }
  335. default: reason = "Unknown";
  336. }
  337. alert((developer_login ? "Developer login" : "Login") + " failed! Reason: " + reason + ".");
  338. }
  339. },
  340. error: err
  341. });
  342. }
  343. });
  344. }
  345.  
  346. function prevent_automatic_logout()
  347. {
  348. $.ajax({
  349. type: "GET",
  350. url: "/tmpl/network/apn_setting.html?v=" + Math.round(+new Date() / 1000)
  351. });
  352. }
  353.  
  354. function enable_automatic_login()
  355. {
  356. var res = confirm("You can make this script log in for you\n" +
  357. "once you paste it into the developer console.\n\n" +
  358. "The password will be stored in a cookie as an SHA256 hash.\n\n" +
  359. "Continue?");
  360.  
  361. if (!res)
  362. return;
  363.  
  364. cookies.delete("admin_password_hash");
  365.  
  366. perform_login(function() {
  367. alert("Successfully saved password as hash!");
  368. }, false, true);
  369. }
  370.  
  371. function check_log_in(logged_in_callback, not_logged_in_callback = null)
  372. {
  373. $.ajax({
  374. type: "GET",
  375. url: "/goform/goform_get_cmd_process",
  376. data:
  377. {
  378. // multi_data is required here otherwise
  379. // a false "ok" might be returned by the
  380. // router if a session in another browser
  381. // is running.
  382. multi_data: "1",
  383. cmd: "loginfo"
  384. },
  385. dataType: "json",
  386. success: function(a)
  387. {
  388. if (a.loginfo.toLowerCase() == "ok")
  389. {
  390. if (logged_in_callback)
  391. logged_in_callback();
  392. }
  393. else
  394. {
  395. if (not_logged_in_callback)
  396. not_logged_in_callback();
  397. }
  398. },
  399. error: err
  400. });
  401. }
  402.  
  403. class LteCaCellInfo
  404. {
  405. constructor(pci, band, earfcn, bandwidth, rssi, rsrp1, rsrp2, rsrp3, rsrp4, rsrq, sinr1, sinr2, sinr3, sinr4)
  406. {
  407. this.pci = pci;
  408. this.band = band;
  409. this.earfcn = earfcn;
  410. this.bandwidth = bandwidth;
  411. this.rssi = rssi;
  412. this.rsrp1 = rsrp1;
  413. this.rsrp2 = rsrp2;
  414. this.rsrp3 = rsrp3;
  415. this.rsrp4 = rsrp4;
  416. this.rsrq = rsrq;
  417. this.sinr1 = sinr1;
  418. this.sinr2 = sinr2;
  419. this.sinr3 = sinr3;
  420. this.sinr4 = sinr4;
  421. }
  422. }
  423.  
  424. function parse_lte_cell_info()
  425. {
  426. //Object { lte_multi_ca_scell_sig_info: "-44.0,-3.0,19.5,0,2;", lte_multi_ca_scell_info: "1,XX,2,3,1525,15.0" }
  427.  
  428. // lte_multi_ca_scell_info
  429. // 0: CaIndex
  430. // 1: PCI
  431. // 2: ??
  432. // 3: Band
  433. // 4: Earfcn
  434. // 5: Bandwidth
  435.  
  436. // lte_multi_ca_scell_sig_info
  437. // 0: RSRP, -44 invalid
  438. // 1: RSRQ
  439. // 2: SINR
  440. // 3: ??
  441. // 4: ??
  442.  
  443. if (!is_lte)
  444. return [];
  445.  
  446. var lte_cells = [];
  447.  
  448. var lte_main_band =
  449. (lte_ca_pcell_band != "" ? lte_ca_pcell_band : lte_band);
  450.  
  451. if (lte_main_band == "")
  452. lte_main_band = "??";
  453.  
  454. lte_cells.push(new LteCaCellInfo(
  455. parseInt(lte_pci, 16),
  456. "B" + lte_main_band,
  457. lte_ca_pcell_freq == "" ? wan_active_channel : lte_ca_pcell_freq,
  458. (lte_ca_pcell_bandwidth != "" ? lte_ca_pcell_bandwidth : bandwidth).replace("MHz", "").replace(".0", ""),
  459. lte_rssi,
  460. lte_rsrp_1,
  461. lte_rsrp_2,
  462. lte_rsrp_3,
  463. lte_rsrp_4,
  464. lte_rsrq,
  465. lte_snr_1,
  466. lte_snr_2,
  467. lte_snr_3,
  468. lte_snr_4
  469. ));
  470.  
  471. // Only MC888 seems to have lte_multi_ca_scell_sig_info so far.
  472. // MC889 doesn't have it.
  473.  
  474. var scell_infos = lte_multi_ca_scell_info.split(";").filter(n => n);
  475. var scell_sig_infos = lte_multi_ca_scell_sig_info.split(";").filter(n => n);
  476.  
  477. for (var i = 0; i < scell_infos.length; i++)
  478. {
  479. if (scell_infos[i] == "")
  480. continue;
  481.  
  482. var scell_info = scell_infos[i].split(",");
  483. var have_scell_sig_info = scell_sig_infos.length > i;
  484. var scell_sig_info = have_scell_sig_info ? scell_sig_infos[i].split(",") : undefined;
  485.  
  486. if (scell_info.length < 6)
  487. continue;
  488.  
  489. if (have_scell_sig_info && scell_sig_info.length < 3)
  490. continue;
  491.  
  492. lte_cells.push(new LteCaCellInfo(
  493. parseInt(scell_info[1], 16), // PCI
  494. "B" + scell_info[3], // Band
  495. scell_info[4], // Earfcn
  496. scell_info[5].replace(".0", ""), // Bandwidth
  497. "", // RSSI
  498. (have_scell_sig_info ? scell_sig_info[0] : "").replace("-44.0", "?????"), // RSRP
  499. "",
  500. "",
  501. "",
  502. have_scell_sig_info ? scell_sig_info[1] : "", // RSRQ
  503. have_scell_sig_info ? scell_sig_info[2] : "", // SINR
  504. "",
  505. "",
  506. ""));
  507. }
  508.  
  509. return lte_cells;
  510. }
  511.  
  512. class NrCaCellInfo
  513. {
  514. constructor(pci, band, arfcn, bandwidth, rsrp1, rsrp2, rsrq, sinr)
  515. {
  516. this.pci = pci;
  517. this.band = band;
  518. this.arfcn = arfcn;
  519. this.bandwidth = bandwidth;
  520. this.rsrp1 = rsrp1;
  521. this.rsrp2 = rsrp2;
  522. this.rsrq = rsrq;
  523. this.sinr = sinr;
  524. this.unchanged_updates = 0;
  525. this.info_text = "";
  526. }
  527. }
  528.  
  529. function parse_nr_cell_info()
  530. {
  531. if (!is_5g)
  532. return [];
  533.  
  534. if (is_5g_nsa && !is_5g_nsa_active)
  535. {
  536. // Base station is capable of 5G NSA
  537. // but we don't have any receipton of the NSA band.
  538. return [];
  539. }
  540.  
  541. /*
  542. * There's apparently no better fix for this.
  543. * The API does not reset its memory correctly after switching from
  544. * 5G CA to 5G without CA.
  545. */
  546. var is_ca = nr5g_action_channel == nr_ca_pcell_freq;
  547.  
  548. if (_5g_rx0_rsrp == "")
  549. _5g_rx0_rsrp = Z5g_rsrp;
  550.  
  551. var nr_cells = [];
  552.  
  553. var allowed_nr_bands =
  554. (is_5g_nsa ? nr5g_nsa_band_lock : nr5g_sa_band_lock).split(",");
  555.  
  556. if (!is_ca) {
  557. var nr_band =
  558. (is_5g_nsa ? "n" + nr5g_action_nsa_band : nr5g_action_band);
  559.  
  560. if (nr_band == "n" || nr_band == "n-1")
  561. nr_band = "n??";
  562.  
  563. nr_cells.push(new NrCaCellInfo(
  564. parseInt(nr5g_pci, 16),
  565. nr_band,
  566. nr5g_action_channel,
  567. is_5g_nsa ? "" : bandwidth.replace("MHz", ""),
  568. _5g_rx0_rsrp,
  569. _5g_rx1_rsrp,
  570. Z5g_rsrq,
  571. Z5g_SINR.replace("-20.0", "?????").replace("-3276.8", "?????")
  572. ));
  573.  
  574. previous_nr_cells = nr_cells;
  575. return nr_cells;
  576. }
  577.  
  578. nr_cells.push(new NrCaCellInfo(
  579. parseInt(nr5g_pci, 16),
  580. "n" + (nr_ca_pcell_band != "" ? nr_ca_pcell_band : "??"),
  581. nr_ca_pcell_freq == "" ? "??" : nr_ca_pcell_freq,
  582. bandwidth == "" ? "" : bandwidth.replace("MHz", ""),
  583. _5g_rx0_rsrp,
  584. _5g_rx1_rsrp,
  585. Z5g_rsrq,
  586. Z5g_SINR.replace("-20.0", "?????").replace("-3276.8", "?????")
  587. ));
  588.  
  589. nr_multi_ca_scell_info.split(";").forEach(cell => {
  590. if (cell == "")
  591. return;
  592.  
  593. // 0,XX,1,n75,292330,30MHz,0,-73.3,-10.5,17.5;
  594. // 0 1 2 3 4 5 6 7 8 9
  595. var cell_data = cell.split(",");
  596.  
  597. if (cell_data.length < 10)
  598. return;
  599.  
  600. var nr_band = cell_data[3].replace("n", "");
  601.  
  602. /*
  603. * Try to detect false data. See comment above.
  604. */
  605. if (allowed_nr_bands.indexOf(nr_band) == -1)
  606. return;
  607.  
  608. nr_cells.push(new NrCaCellInfo(
  609. cell_data[1], // PCI
  610. cell_data[3], // Band
  611. cell_data[4], // Arfcn
  612. cell_data[5].replace("MHz", ""),
  613. cell_data[7], // RSRP
  614. "",
  615. cell_data[8], // RSRQ
  616. cell_data[9].replace("0.0", "?????") // SINR
  617. ));
  618. });
  619.  
  620. /*
  621. * Try to detect false data. See comment above.
  622. * Only do this for SCells.
  623. */
  624. if (false && typeof previous_nr_cells !== "undefined" && nr_cells.length == previous_nr_cells.length)
  625. {
  626. for (var i = 1; i < nr_cells.length; i++)
  627. {
  628. if (nr_cells[i].rsrp1 == previous_nr_cells[i].rsrp1 &&
  629. nr_cells[i].sinr == previous_nr_cells[i].sinr)
  630. {
  631. nr_cells[i].unchanged_updates = previous_nr_cells[i].unchanged_updates + 1;
  632. if (nr_cells[i].unchanged_updates >= 30)
  633. nr_cells[i].info_text = "[Data might be invalid]";
  634. }
  635. }
  636. }
  637.  
  638. previous_nr_cells = nr_cells;
  639. return nr_cells;
  640. }
  641.  
  642. function get_band_info(cells)
  643. {
  644. var bands = "";
  645. cells.forEach(cell => {
  646. var info = cell.band;
  647. if (cell.bandwidth != "") info += "(" + cell.bandwidth + "MHz)";
  648. bands += bands ? " + " : "";
  649. bands += info;
  650. });
  651. return bands;
  652. }
  653.  
  654. function get_status()
  655. {
  656. $.ajax({
  657. type: "GET",
  658. url: "/goform/goform_get_cmd_process",
  659. data:
  660. {
  661. cmd: siginfo,
  662. multi_data: "1"
  663. },
  664. dataType: "json",
  665. success: function(a)
  666. {
  667. for (signal = a, vars = siginfo.split(','), e = 0; e < vars.length; e++)
  668. {
  669. v = vars[e];
  670. window[(!isNaN(v[0]) ? "_" : "" ) + v] = a[v];
  671. }
  672.  
  673. is_umts = (network_type == "HSPA" || network_type == "HSDPA" || network_type == "HSUPA" || network_type == "HSPA+" || network_type == "DC-HSPA+" ||
  674. network_type == "UMTS" || network_type == "CDMA" || network_type == "CDMA_EVDO" || network_type == "EVDO_EHRPD" || network_type == "TDSCDMA");
  675.  
  676. // MC801 = EN-DC, MC801A = ENDC
  677. is_lte = (network_type == "LTE" || network_type == "ENDC" || network_type == "EN-DC" || network_type == "LTE-NSA");
  678. is_lte_plus = (wan_lte_ca && (wan_lte_ca == "ca_activated" || wan_lte_ca == "ca_deactivated"));
  679.  
  680. is_5g_sa = (network_type == "SA");
  681. is_5g_nsa = (network_type == "ENDC" || network_type == "EN-DC" || network_type == "LTE-NSA");
  682. is_5g_nsa_active = is_5g_nsa && network_type != "LTE-NSA";
  683. is_5g = is_5g_sa || is_5g_nsa;
  684.  
  685. if (is_umts) $("#umts_signal_container").show();
  686. else $("#umts_signal_container").hide();
  687.  
  688. if (is_lte_plus) $("#lte_ca_active_tr").show();
  689. else $("#lte_ca_active_tr").hide();
  690.  
  691. if (network_provider_fullname != "") $("#provider").show();
  692. else $("#provider").hide();
  693.  
  694. if (cell_id) $("#cell").show();
  695. else $("#cell").hide();
  696.  
  697. if (is_5g && nr5g_cell_id) $("#5g_cell").show();
  698. else $("#5g_cell").hide();
  699.  
  700. if (tx_power != "" && is_lte && !is_5g_nsa /* Prevent showing an outdated value from an LTE session */)
  701. {
  702. tx_power += " dBm (" + Math.pow(10, tx_power/10.0).toFixed(3) + " mW)";
  703. $("#txp").show();
  704. }
  705. else $("#txp").hide();
  706.  
  707. $("#ca_active").html(wan_lte_ca && wan_lte_ca == "ca_activated" ? "&#10003;" : "&#10005;");
  708.  
  709. /*
  710. * LTE Cell Info
  711. */
  712.  
  713. var lte_cells = parse_lte_cell_info();
  714.  
  715. var2html("__lte_signal", lte_cells);
  716.  
  717. for (var i = 0; i < 6; i++)
  718. {
  719. var cell_num = i + 1;
  720. if (is_lte && lte_cells.length > i)
  721. {
  722. var lte_cell = lte_cells[i];
  723. if (lte_cell.rsrp1 != "")
  724. {
  725. $("#lte_" + cell_num + "_rsrp").show();
  726. $("#lte_" + cell_num + "_sinr").show();
  727. $("#lte_" + cell_num + "_rsrq").show();
  728. }
  729. else
  730. {
  731. $("#lte_" + cell_num + "_rsrp").hide();
  732. $("#lte_" + cell_num + "_sinr").hide();
  733. $("#lte_" + cell_num + "_rsrq").hide();
  734. }
  735. $("#lte_" + cell_num).show();
  736. }
  737. else $("#lte_" + cell_num).hide();
  738. }
  739.  
  740. var lte_bands = get_band_info(lte_cells);
  741.  
  742. /*
  743. * LTE Cell Info End
  744. */
  745.  
  746. /*
  747. * NR Cell Info
  748. */
  749.  
  750. var nr_cells = parse_nr_cell_info();
  751.  
  752. var2html("__nr_signal", nr_cells);
  753.  
  754. for (var i = 1; i <= 3; i++)
  755. {
  756. if (is_5g && nr_cells.length >= i) $("#5g_" + i).show();
  757. else $("#5g_" + i).hide();
  758. }
  759.  
  760. if (nr_cells.length > 0)
  761. {
  762. if (nr_cells[0].rsrp2 != "") $("#5g_1_rsrp2").show();
  763. else $("#5g_1_rsrp2").hide();
  764.  
  765. // Not available with NSA
  766. if (nr_cells[0].bandwidth != "") $("#5g_1_bandwidth").show();
  767. else $("#5g_1_bandwidth").hide();
  768. }
  769.  
  770. var nr_bands = get_band_info(nr_cells);
  771.  
  772. /*
  773. * NR Cell Info End
  774. */
  775.  
  776. /*
  777. * Band info
  778. */
  779.  
  780. var bandinfo = lte_bands;
  781.  
  782. if (nr_bands != "")
  783. {
  784. if (bandinfo != "") bandinfo += " + ";
  785. bandinfo += nr_bands;
  786. }
  787.  
  788. if (bandinfo != "")
  789. {
  790. $("#__bandinfo").html(bandinfo);
  791. $("#bandinfo").show();
  792. }
  793. else $("#bandinfo").hide();
  794.  
  795. /*
  796. * Band info end
  797. */
  798.  
  799. if (is_umts && lte_ca_pcell_band)
  800. $("#umts_signal_table_main_band").html(" (" + lte_ca_pcell_band + ")");
  801.  
  802. if (ngbr_cell_info)
  803. {
  804. if (is_lte)
  805. {
  806. var ngbr_cells = ngbr_cell_info.split(";");
  807. if (ngbr_cells.length > 0)
  808. {
  809. var html = "<table class='ngbr_cell_table'>";
  810. for (var i = 0; i < ngbr_cells.length; i++)
  811. {
  812. var cell = ngbr_cells[i];
  813. var [freq, pci, rsrq, rsrp, rssi] = cell.split(",");
  814. html += "<tr><td>"+ pci + ":</td><td>RSRP: " + rsrp + " dBm&nbsp;</td><td>RSRQ: " + rsrq + " dB</td></tr>";
  815. }
  816. html += "</table>";
  817. }
  818. ngbr_cell_info = html;
  819. }
  820. else
  821. {
  822. ngbr_cell_info = ngbr_cell_info.replace(";", "<br>");
  823. }
  824.  
  825. $("#ngbr_cells").show();
  826. }
  827. else
  828. {
  829. $("#ngbr_cells").hide();
  830. }
  831.  
  832. if (wan_ipaddr) $("#wanipinfo").show();
  833. else $("#wanipinfo").hide();
  834.  
  835. if (pm_sensor_ambient || pm_sensor_mdm || pm_sensor_5g || pm_sensor_pa1 || wifi_chip_temp)
  836. {
  837. var temp = "";
  838. if (pm_sensor_ambient && pm_sensor_ambient > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "A:&nbsp;" + pm_sensor_ambient + "°c";
  839. if (pm_sensor_mdm && pm_sensor_mdm > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "M:&nbsp;" + pm_sensor_mdm + "°c";
  840. if (pm_sensor_5g && pm_sensor_5g > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "5G:&nbsp;" + pm_sensor_mdm + "°c";
  841. if (pm_sensor_pa1 && pm_sensor_pa1 > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "P:&nbsp;" + pm_sensor_pa1 + "°c";
  842. if (wifi_chip_temp && wifi_chip_temp > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "W:&nbsp;" + wifi_chip_temp + "°c";
  843. $("#temps").html(temp);
  844. $("#temperature").show();
  845. }
  846. else $("#temperature").hide();
  847.  
  848. for (e = 0; e < vars.length; e++)
  849. {
  850. v = vars[e];
  851. v = (!isNaN(v[0]) ? "_" : "" ) + v;
  852. $("#" + v).html(window[v]);
  853. }
  854. }
  855. })
  856. }
  857.  
  858. function err(a, e, n)
  859. {
  860. alert("Communication Error"), console.log(a), console.log(e), console.log(n)
  861. }
  862.  
  863. function set_net_mode(mode = null)
  864. {
  865. var modes = [
  866. "Only_GSM",
  867. "Only_WCDMA",
  868. "Only_LTE",
  869. "WCDMA_AND_GSM",
  870. "WCDMA_preferred",
  871. "WCDMA_AND_LTE",
  872. "GSM_AND_LTE",
  873. "CDMA_EVDO_LTE",
  874. "Only_TDSCDMA",
  875. "TDSCDMA_AND_WCDMA",
  876. "TDSCDMA_AND_LTE",
  877. "TDSCDMA_WCDMA_HDR_CDMA_GSM_LTE",
  878. "TDSCDMA_WCDMA_GSM_LTE",
  879. "GSM_WCDMA_LTE",
  880. "Only_5G",
  881. "LTE_AND_5G",
  882. "GWL_5G",
  883. "TCHGWL_5G",
  884. "WL_AND_5G",
  885. "TGWL_AND_5G",
  886. "4G_AND_5G"
  887. ];
  888.  
  889. mode = mode || prompt("Enter one of\n" + modes.join(", "), "WL_AND_5G");
  890. if (!mode) return;
  891.  
  892. $.ajax({
  893. type: "GET",
  894. url: "/goform/goform_get_cmd_process",
  895. data:
  896. {
  897. cmd: "wa_inner_version,cr_version,RD",
  898. multi_data: "1"
  899. },
  900. dataType: "json",
  901. success: function(a)
  902. {
  903. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
  904. $.ajax({
  905. type: "POST",
  906. url: "/goform/goform_set_cmd_process",
  907. data:
  908. {
  909. isTest: "false",
  910. goformId: "SET_BEARER_PREFERENCE",
  911. BearerPreference: mode,
  912. AD: ad
  913. },
  914. success: function(a)
  915. {
  916. console.log(a);
  917. j = JSON.parse(a);
  918. if ("success" != j.result)
  919. alert("Setting mode to '" + mode + "' failed");
  920. },
  921. error: err
  922. })
  923. }
  924. })
  925.  
  926. }
  927.  
  928. function lte_cell_lock(reset = false) {
  929. var lockParameters;
  930.  
  931. if (reset) {
  932. lockParameters = ["0", "0"];
  933. } else {
  934. var defaultPciEarfcn = parseInt(lte_pci, 16) + "," + wan_active_channel;
  935. var cellLockDetails = prompt("Please input PCI,EARFCN, separated by ',' char (example 116,3350). "+
  936. "Leave default for lock on current main band.", defaultPciEarfcn);
  937.  
  938. if (cellLockDetails === null || cellLockDetails.trim() === "") {
  939. return;
  940. }
  941.  
  942. var inputValues = cellLockDetails.split(",");
  943. var pciIsValid = !isNaN(inputValues[0]) && Number.isInteger(parseFloat(inputValues[0]));
  944. var earfcnIsValid = !isNaN(inputValues[1]) && Number.isInteger(parseFloat(inputValues[1]));
  945.  
  946. if (!pciIsValid || !earfcnIsValid) {
  947. alert("Invalid input. Please ensure all values are correctly formatted.");
  948. return;
  949. }
  950.  
  951. lockParameters = inputValues;
  952. }
  953.  
  954. $.ajax({
  955. type: "GET",
  956. url: "/goform/goform_get_cmd_process",
  957. data: {
  958. cmd: "wa_inner_version,cr_version,RD",
  959. multi_data: "1"
  960. },
  961. dataType: "json",
  962. success: function(a) {
  963. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
  964. $.ajax({
  965. type: "POST",
  966. url: "/goform/goform_set_cmd_process",
  967. data: {
  968. isTest: "false",
  969. goformId: "LTE_LOCK_CELL_SET",
  970. lte_pci_lock: lockParameters[0],
  971. lte_earfcn_lock: lockParameters[1],
  972. AD: ad
  973. },
  974. success: function(a) {
  975. var response = JSON.parse(a);
  976. if (response.result === "success") {
  977.  
  978. var rebootMessage =
  979. "You have to reboot your Router in order " +
  980. (reset ? "to remove the cell lock" : "for the cell lock to be active") + ".\n\nReboot now?";
  981.  
  982. if (confirm(rebootMessage)) {
  983. reboot(true);
  984. }
  985. } else {
  986. alert("Error.");
  987. }
  988. },
  989. error: function(err) {
  990. console.error(err);
  991. alert("An error occurred while attempting to lock the cell.");
  992. }
  993. });
  994. }
  995. });
  996. }
  997.  
  998. function nr_cell_lock(reset = false) {
  999. var cellLockDetails;
  1000.  
  1001. if (reset) {
  1002. cellLockDetails = "0,0,0,0";
  1003. } else {
  1004. var nrCellInfo = parse_nr_cell_info();
  1005. var defaultCellDetails = "";
  1006.  
  1007. if (nrCellInfo.length > 0) {
  1008. var primaryNrCell = nrCellInfo[0];
  1009. defaultCellDetails = primaryNrCell.pci + ',' + primaryNrCell.arfcn + ',' + primaryNrCell.band.replace('n', '') + ',' + "30";
  1010. }
  1011.  
  1012. cellLockDetails = prompt("Please input PCI,ARFCN,BAND,SCS separated by ',' char (example 202,639936,78,30). " +
  1013. "Leave default for locking the current NR primary band. You may need to adjust the SCS.", defaultCellDetails);
  1014.  
  1015. if (cellLockDetails === null || cellLockDetails.trim() === "") {
  1016. return;
  1017. } else {
  1018. var inputValues = cellLockDetails.split(",");
  1019.  
  1020. var pciIsValid = !isNaN(inputValues[0]) && Number.isInteger(parseFloat(inputValues[0]));
  1021. var arfcnIsValid = !isNaN(inputValues[1]) && Number.isInteger(parseFloat(inputValues[1]));
  1022. var bandIsValid = !isNaN(inputValues[2]) && Number.isInteger(parseFloat(inputValues[2]));
  1023. var scsIsValid = ["15", "30", "60", "120", "240"].includes(inputValues[3]);
  1024.  
  1025. if (!pciIsValid || !arfcnIsValid || !bandIsValid || !scsIsValid) {
  1026. alert("Invalid input. Please ensure all values are correctly formatted.");
  1027. return;
  1028. }
  1029. }
  1030. }
  1031.  
  1032. $.ajax({
  1033. type: "GET",
  1034. url: "/goform/goform_get_cmd_process",
  1035. data: {
  1036. cmd: "wa_inner_version,cr_version,RD",
  1037. multi_data: "1"
  1038. },
  1039. dataType: "json",
  1040. success: function(a) {
  1041. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
  1042. $.ajax({
  1043. type: "POST",
  1044. url: "/goform/goform_set_cmd_process",
  1045. data: {
  1046. isTest: "false",
  1047. goformId: "NR5G_LOCK_CELL_SET",
  1048. nr5g_cell_lock: cellLockDetails,
  1049. AD: ad
  1050. },
  1051. success: function(a) {
  1052. var response = JSON.parse(a);
  1053. if (response.result === "success") {
  1054.  
  1055. var rebootMessage =
  1056. "You have to reboot your Router in order " +
  1057. (reset ? "to remove the cell lock" : "for the cell lock to be active")+ ".\n\nReboot now?";
  1058.  
  1059. if (confirm(rebootMessage)) {
  1060. reboot(true);
  1061. }
  1062. } else {
  1063. alert("Error.");
  1064. }
  1065. },
  1066. error: function(err) {
  1067. console.error(err);
  1068. alert("An error occurred while attempting to lock the cell.");
  1069. }
  1070. });
  1071. }
  1072. });
  1073. }
  1074.  
  1075. function lte_band_selection(a = null, nested_attempt_with_dev_login = false)
  1076. {
  1077. a = a || prompt("Please input LTE bands number, separated by + char (example 1+3+20). If you want to use every supported band, write 'AUTO'.", "AUTO");
  1078.  
  1079. var had_admin_password_hash = have_admin_password_hash();
  1080.  
  1081. if (null != (a = a && a.toLowerCase()) && "" !== a)
  1082. {
  1083. var e = a.split("+");
  1084. var n = 0;
  1085. var all_bands = "0xA3E2AB0908DF";
  1086.  
  1087. if ("AUTO" === a.toUpperCase())
  1088. {
  1089. n = all_bands;
  1090. }
  1091. else
  1092. {
  1093. for (var l = 0; l < e.length; l++) n += Math.pow(2, parseInt(e[l]) - 1);
  1094. n = n.toString(16);
  1095. n = "0x" + (Math.pow(10, 11 - n.length) + n + "").substr(1);
  1096. }
  1097.  
  1098. $.ajax({
  1099. type: "GET",
  1100. url: "/goform/goform_get_cmd_process",
  1101. data:
  1102. {
  1103. cmd: "wa_inner_version,cr_version,RD",
  1104. multi_data: "1"
  1105. },
  1106. dataType: "json",
  1107. success: function(a)
  1108. {
  1109. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
  1110. type: "POST",
  1111. url: "/goform/goform_set_cmd_process",
  1112. data:
  1113. {
  1114. isTest: "false",
  1115. goformId: "BAND_SELECT",
  1116. is_gw_band: 0,
  1117. gw_band_mask: 0,
  1118. is_lte_band: 1,
  1119. lte_band_mask: n,
  1120. AD: ad
  1121. },
  1122. success: function(a)
  1123. {
  1124. console.log(a);
  1125.  
  1126. var j = JSON.parse(a);
  1127.  
  1128. if ("success" == j.result)
  1129. {
  1130. if (nested_attempt_with_dev_login)
  1131. {
  1132. if (!had_admin_password_hash)
  1133. alert("Successfully performed LTE band lock with developer login ...");
  1134. }
  1135. }
  1136. else
  1137. {
  1138. if (!nested_attempt_with_dev_login && !logged_in_as_developer)
  1139. {
  1140. if (!had_admin_password_hash)
  1141. {
  1142. alert("LTE band locking failed.\n\n" +
  1143. "Your device model may require to log in as developer\n" +
  1144. "in order to be able to lock LTE bands.");
  1145. }
  1146.  
  1147. perform_login(
  1148. function() {
  1149. logged_in_as_developer = true;
  1150. lte_band_selection(a, true);
  1151. }, true);
  1152. }
  1153. else
  1154. {
  1155. alert("LTE band locking with developer login still failed.\nThere might be something else wrong.");
  1156. }
  1157. }
  1158. },
  1159. error: err
  1160. })
  1161. }
  1162. })
  1163. }
  1164. }
  1165.  
  1166. function nr_band_selection(a)
  1167. {
  1168. var e;
  1169. var a = a || prompt("Please input 5G bands number, separated by + char (example 3+78). If you want to use every supported band, write 'AUTO'.", "AUTO");
  1170.  
  1171. null != a && "" !== a && (e = a.split("+").join(","));
  1172. "AUTO" === a.toUpperCase() && (e = "1,2,3,5,7,8,20,28,38,41,50,51,66,70,71,74,75,76,77,78,79,80,81,82,83,84");
  1173.  
  1174. $.ajax({
  1175. type: "GET",
  1176. url: "/goform/goform_get_cmd_process",
  1177. data:
  1178. {
  1179. cmd: "wa_inner_version,cr_version,RD",
  1180. multi_data: "1"
  1181. },
  1182. dataType: "json",
  1183. success: function(a)
  1184. {
  1185. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
  1186. type: "POST",
  1187. url: "/goform/goform_set_cmd_process",
  1188. data:
  1189. {
  1190. isTest: "false",
  1191. goformId: "WAN_PERFORM_NR5G_BAND_LOCK",
  1192. nr5g_band_mask: e,
  1193. AD: ad
  1194. },
  1195. success: function(a)
  1196. {
  1197. console.log(a);
  1198. },
  1199. error: err
  1200. })
  1201. }
  1202. });
  1203. }
  1204.  
  1205. function bridge_mode(enable)
  1206. {
  1207. $.ajax({
  1208. type: "GET",
  1209. url: "/goform/goform_get_cmd_process",
  1210. data:
  1211. {
  1212. cmd: "wa_inner_version,cr_version,RD",
  1213. multi_data: "1"
  1214. },
  1215. dataType: "json",
  1216. success: function(a)
  1217. {
  1218. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
  1219. type: "POST",
  1220. url: "/goform/goform_set_cmd_process",
  1221. data:
  1222. {
  1223. isTest: "false",
  1224. goformId: "OPERATION_MODE",
  1225. opMode: (enable ? "LTE_BRIDGE" : "PPP"),
  1226. ethernet_port_specified: "1",
  1227. AD: ad
  1228. },
  1229. success: function(a)
  1230. {
  1231. console.log(a);
  1232. alert("Successfully " + (enable ? "enabled" : "disabled") + " bridge mode! Rebooting ..." +
  1233. (enable ? "\n\nIf your device has multiple LAN port then the lower one\nis the WAN/bridge port!" : ""));
  1234. reboot(true);
  1235. },
  1236. error: err
  1237. })
  1238. }
  1239. })
  1240. }
  1241.  
  1242. function reboot(force = false)
  1243. {
  1244. if (!force && !confirm("Reboot Router?"))
  1245. return
  1246.  
  1247. $.ajax({
  1248. type: "GET",
  1249. url: "/goform/goform_get_cmd_process",
  1250. data:
  1251. {
  1252. cmd: "wa_inner_version,cr_version,RD",
  1253. multi_data: "1"
  1254. },
  1255. dataType: "json",
  1256. success: function(a)
  1257. {
  1258. ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
  1259. type: "POST",
  1260. url: "/goform/goform_set_cmd_process",
  1261. data:
  1262. {
  1263. isTest: "false",
  1264. goformId: "REBOOT_DEVICE",
  1265. AD: ad
  1266. },
  1267. success: function(a)
  1268. {
  1269. console.log(a);
  1270. if (!force) alert("Rebooting ...");
  1271. },
  1272. error: err
  1273. })
  1274. }
  1275. })
  1276. }
  1277.  
  1278. function version_info()
  1279. {
  1280. $.ajax({
  1281. type: "GET",
  1282. url: "/goform/goform_get_cmd_process",
  1283. data:
  1284. {
  1285. cmd: "hardware_version,web_version,wa_inner_version,cr_version,RD",
  1286. multi_data: "1"
  1287. },
  1288. dataType: "json",
  1289. success: function(a)
  1290. {
  1291. v = "HW version: " + a.hardware_version + "\nWEB version: " + a.web_version + "\nWA INNER version: " + a.wa_inner_version;
  1292. alert(v);
  1293. }
  1294. })
  1295. }
  1296.  
  1297. function inject_html()
  1298. {
  1299. $(".color_background_blue").css("background-color", "#456");
  1300. $(".headcontainer").hide();
  1301.  
  1302. $("#mainContainer").prepend(`
  1303. <style>
  1304.  
  1305. .clear {
  1306. clear: both;
  1307. }
  1308.  
  1309. li span {
  1310. margin-left: 5px;
  1311. }
  1312.  
  1313. .f {
  1314. /*float: left;*/
  1315. border: 1px solid #bbb;
  1316. border-radius: 5px;
  1317. padding: 10px;
  1318. line-height: 2em;
  1319. margin: 5px;
  1320. }
  1321.  
  1322. .f ul {
  1323. margin: 0;
  1324. padding: 0;
  1325. }
  1326.  
  1327. .f ul li {
  1328. display: inline;
  1329. margin-right: 5px;
  1330. margin-left: 5px;
  1331. }
  1332.  
  1333. .p {
  1334. border-bottom: 1px solid #ccc;
  1335. width: auto;
  1336. height: 20px;
  1337. }
  1338.  
  1339. .v {
  1340. height: 100%25;
  1341. border-right: 1px solid #ccc;
  1342. }
  1343.  
  1344. .sb {
  1345. padding: 10px;
  1346. border-radius: 10px;
  1347. display: inline-block;
  1348. margin: 10px 0 10px 10px;
  1349. }
  1350.  
  1351. .v {
  1352. padding-left: 20px;
  1353. }
  1354.  
  1355. .mod_border {
  1356. border-radius: 5px;
  1357. border-style: hidden;
  1358. box-shadow: 0 0 0 3px #999;
  1359. }
  1360.  
  1361. .mod_container {
  1362. width: 940px;
  1363. border: 4px solid #40adf5;
  1364. border-radius: 10px;
  1365. padding: 5px;
  1366. font-family: Verdana;
  1367. font-size: 13px;
  1368. }
  1369.  
  1370. .inner_mod_container {
  1371. width: 600px;
  1372. margin: 0 auto;
  1373. }
  1374.  
  1375. .mod_table {
  1376. all: revert;
  1377. border-collapse: collapse;
  1378.  
  1379. border-radius: 5px;
  1380. border-style: hidden;
  1381. box-shadow: 0 0 0 3px #999;
  1382. }
  1383.  
  1384. .mod_table td {
  1385. border: 3px solid #999;
  1386. padding: 5px;
  1387. border-radius: 20px;
  1388. }
  1389.  
  1390. .ngbr_cell_table {
  1391. all: revert;
  1392. border: none;
  1393. }
  1394.  
  1395. .ngbr_cell_table td {
  1396. all: revert;
  1397. border: none;
  1398. }
  1399.  
  1400. .signal_table {
  1401. width: 100%;
  1402. }
  1403.  
  1404. .signal_table td {
  1405. width: 75px;
  1406. }
  1407.  
  1408. .cellinfo_table {
  1409. width: 100%;
  1410. table-layout: fixed;
  1411. }
  1412.  
  1413.  
  1414. .spacing {
  1415. padding: 10px;
  1416. }
  1417.  
  1418. .spacing_small {
  1419. padding: 5px;
  1420. }
  1421.  
  1422. .spacing_links {
  1423. padding: 1px;
  1424. }
  1425.  
  1426. .links_container {
  1427. font-size: 14px;
  1428. }
  1429.  
  1430. </style>
  1431.  
  1432. <div class="mod_container">
  1433. <div class="spacing_small"></div>
  1434.  
  1435. <div class="inner_mod_container">
  1436. <!-- LTE Primary -->
  1437. <div id="lte_1">
  1438. <table class="mod_table signal_table">
  1439. <tr>
  1440. <td colspan='4' style='text-align:center'>LTE (<span id="__lte_signal_0_band"></span>)</td>
  1441. </tr>
  1442. <tr>
  1443. <td>RSRP1:</td>
  1444. <td><span id="__lte_signal_0_rsrp1"></span> dBm</td>
  1445. <td>SINR1:</td>
  1446. <td><span id="__lte_signal_0_sinr1"></span> dB</td>
  1447. </tr>
  1448. <tr>
  1449. <td>RSRP2:</td>
  1450. <td><span id="__lte_signal_0_rsrp2"></span> dBm</td>
  1451. <td>SINR2:</td>
  1452. <td><span id="__lte_signal_0_sinr2"></span> dB</td>
  1453. </tr>
  1454. <tr>
  1455. <td>RSRP3:</td>
  1456. <td><span id="__lte_signal_0_rsrp3"></span> dBm</td>
  1457. <td>SINR3:</td>
  1458. <td><span id="__lte_signal_0_sinr3"></span> dB</td>
  1459. </tr>
  1460. <tr>
  1461. <td>RSRP4:</td>
  1462. <td><span id="__lte_signal_0_rsrp4"></span> dBm</td>
  1463. <td>SINR4:</td>
  1464. <td><span id="__lte_signal_0_sinr4"></span> dB</td>
  1465. </tr>
  1466. <tr>
  1467. <td>RSRQ:</td>
  1468. <td><span id="__lte_signal_0_rsrq"></span> dB</td>
  1469. <td>RSSI:</td>
  1470. <td><span id="__lte_signal_0_rssi"></span> dBm</td>
  1471. </tr>
  1472. <tr id="lte_1_earfcn">
  1473. <td colspan='2'>EARFCN:</td>
  1474. <td colspan='2'><span id="__lte_signal_0_earfcn"></span></td>
  1475. </tr>
  1476. <tr>
  1477. <td colspan='2'>PCI:</td>
  1478. <td colspan='2'><span id="__lte_signal_0_pci"></span></td>
  1479. </tr>
  1480. <tr>
  1481. <td colspan='2'>BW:</td>
  1482. <td colspan='2'><span id="__lte_signal_0_bandwidth"></span> MHz</td>
  1483. </tr>
  1484. </table>
  1485. <div class="spacing"></div>
  1486. </div>
  1487.  
  1488. <div id="lte_2">
  1489. <table class="mod_table signal_table">
  1490. <tr>
  1491. <td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_1_band"></span>)</td>
  1492. </tr>
  1493. <tr id="lte_2_rsrp">
  1494. <td>RSRP:</td>
  1495. <td><span id="__lte_signal_1_rsrp1"></span> dBm</td>
  1496. </tr>
  1497. <tr id="lte_2_sinr">
  1498. <td>SINR:</td>
  1499. <td><span id="__lte_signal_1_sinr1"></span> dB</td>
  1500. </tr>
  1501. <tr id="lte_2_rsrq">
  1502. <td>RSRQ:</td>
  1503. <td><span id="__lte_signal_1_rsrq"></span> dB</td>
  1504. </tr>
  1505. <tr id="lte_2_earfcn">
  1506. <td>EARFCN:</td>
  1507. <td><span id="__lte_signal_1_earfcn"></span></td>
  1508. </tr>
  1509. <tr>
  1510. <td>PCI:</td>
  1511. <td><span id="__lte_signal_1_pci"></span></td>
  1512. </tr>
  1513. <tr>
  1514. <td>BW:</td>
  1515. <td><span id="__lte_signal_1_bandwidth"></span> MHz</td>
  1516. </tr>
  1517. </table>
  1518. <div class="spacing"></div>
  1519. </div>
  1520. <div id="lte_3">
  1521. <table class="mod_table signal_table">
  1522. <tr>
  1523. <td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_2_band"></span>)</td>
  1524. </tr>
  1525. <tr>
  1526. <td>RSRP:</td>
  1527. <td><span id="__lte_signal_2_rsrp1"></span> dBm</td>
  1528. </tr>
  1529. <tr>
  1530. <td>SINR:</td>
  1531. <td><span id="__lte_signal_2_sinr1"></span> dB</td>
  1532. </tr>
  1533. <tr>
  1534. <td>RSRQ:</td>
  1535. <td><span id="__lte_signal_2_rsrq"></span> dB</td>
  1536. </tr>
  1537. <tr id="lte_3_earfcn">
  1538. <td>EARFCN:</td>
  1539. <td><span id="__lte_signal_2_earfcn"></span></td>
  1540. </tr>
  1541. <tr>
  1542. <td>PCI:</td>
  1543. <td><span id="__lte_signal_2_pci"></span></td>
  1544. </tr>
  1545. <tr>
  1546. <td>BW:</td>
  1547. <td><span id="__lte_signal_2_bandwidth"></span> MHz</td>
  1548. </tr>
  1549. </table>
  1550. <div class="spacing"></div>
  1551. </div>
  1552. <div id="lte_4">
  1553. <table class="mod_table signal_table">
  1554. <tr>
  1555. <td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_3_band"></span>)</td>
  1556. </tr>
  1557. <tr>
  1558. <td>RSRP:</td>
  1559. <td><span id="__lte_signal_3_rsrp1"></span> dBm</td>
  1560. </tr>
  1561. <tr>
  1562. <td>SINR:</td>
  1563. <td><span id="__lte_signal_3_sinr1"></span> dB</td>
  1564. </tr>
  1565. <tr>
  1566. <td>RSRQ:</td>
  1567. <td><span id="__lte_signal_3_rsrq"></span> dB</td>
  1568. </tr>
  1569. <tr id="lte_4_earfcn">
  1570. <td>EARFCN:</td>
  1571. <td><span id="__lte_signal_3_earfcn"></span></td>
  1572. </tr>
  1573. <tr>
  1574. <td>PCI:</td>
  1575. <td><span id="__lte_signal_3_pci"></span></td>
  1576. </tr>
  1577. <tr>
  1578. <td>BW:</td>
  1579. <td><span id="__lte_signal_3_bandwidth"></span> MHz</td>
  1580. </tr>
  1581. </table>
  1582. <div class="spacing"></div>
  1583. </div>
  1584. <div id="lte_5">
  1585. <table class="mod_table signal_table">
  1586. <tr>
  1587. <td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_4_band"></span>)</td>
  1588. </tr>
  1589. <tr>
  1590. <td>RSRP:</td>
  1591. <td><span id="__lte_signal_4_rsrp1"></span> dBm</td>
  1592. </tr>
  1593. <tr>
  1594. <td>SINR:</td>
  1595. <td><span id="__lte_signal_4_sinr1"></span> dB</td>
  1596. </tr>
  1597. <tr>
  1598. <td>RSRQ:</td>
  1599. <td><span id="__lte_signal_4_rsrq"></span> dB</td>
  1600. </tr>
  1601. <tr id="lte_5_earfcn">
  1602. <td>EARFCN:</td>
  1603. <td><span id="__lte_signal_4_earfcn"></span></td>
  1604. </tr>
  1605. <tr>
  1606. <td>PCI:</td>
  1607. <td><span id="__lte_signal_4_pci"></span></td>
  1608. </tr>
  1609. <tr>
  1610. <td>BW:</td>
  1611. <td><span id="__lte_signal_4_bandwidth"></span> MHz</td>
  1612. </tr>
  1613. </table>
  1614. <div class="spacing"></div>
  1615. </div>
  1616. <div id="lte_6">
  1617. <table class="mod_table signal_table">
  1618. <tr>
  1619. <td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_5_band"></span>)</td>
  1620. </tr>
  1621. <tr>
  1622. <td>RSRP:</td>
  1623. <td><span id="__lte_signal_5_rsrp1"></span> dBm</td>
  1624. </tr>
  1625. <tr>
  1626. <td>SINR:</td>
  1627. <td><span id="__lte_signal_5_sinr1"></span> dB</td>
  1628. </tr>
  1629. <tr>
  1630. <td>RSRQ:</td>
  1631. <td><span id="__lte_signal_5_rsrq"></span> dB</td>
  1632. </tr>
  1633. <tr id="lte_6_earfcn">
  1634. <td>EARFCN:</td>
  1635. <td><span id="__lte_signal_5_earfcn"></span></td>
  1636. </tr>
  1637. <tr>
  1638. <td>PCI:</td>
  1639. <td><span id="__lte_signal_5_pci"></span></td>
  1640. </tr>
  1641. <tr>
  1642. <td>BW:</td>
  1643. <td><span id="__lte_signal_5_bandwidth"></span> MHz</td>
  1644. </tr>
  1645. </table>
  1646. <div class="spacing"></div>
  1647. </div>
  1648.  
  1649.  
  1650. <div id="umts_signal_container">
  1651. <table class="mod_table signal_table">
  1652. <tr>
  1653. <td colspan='4' style='text-align:center'>UMTS<span id="umts_signal_table_main_band"></span></td>
  1654. </tr>
  1655. <tr>
  1656. <td>RSCP1:</td>
  1657. <td><span id="rscp_1"></span> dBm</td>
  1658. <td>ECIO1:</td>
  1659. <td>-<span id="ecio_1"></span> dB</td>
  1660. </tr>
  1661. <tr>
  1662. <td>RSCP2:</td>
  1663. <td><span id="rscp_2"></span> dBm</td>
  1664. <td>ECIO2:</td>
  1665. <td>-<span id="ecio_2"></span> dB</td>
  1666. </tr>
  1667. <tr>
  1668. <td>RSCP3:</td>
  1669. <td><span id="rscp_3"></span> dBm</td>
  1670. <td>ECIO3:</td>
  1671. <td>-<span id="ecio_3"></span> dB</td>
  1672. </tr>
  1673. <tr>
  1674. <td>RSCP4:</td>
  1675. <td><span id="rscp_4"></span> dBm</td>
  1676. <td>ECIO4:</td>
  1677. <td>-<span id="ecio_4"></span> dB</td>
  1678. </tr>
  1679. </table>
  1680. <div class="spacing"></div>
  1681. </div>
  1682.  
  1683. <!-- NR Primary -->
  1684. <div id="5g_1">
  1685. <table class="mod_table signal_table">
  1686. <tr>
  1687. <td colspan='2' style='text-align:center'>
  1688. 5G (<span id="__nr_signal_0_band"></span>)
  1689. <span id="__nr_signal_0_info_text"></span>
  1690. </td>
  1691. </tr>
  1692. <tr>
  1693. <td>RSRP1:</td>
  1694. <td><span id="__nr_signal_0_rsrp1"></span> dBm</td>
  1695. </tr>
  1696. <tr id="5g_1_rsrp2">
  1697. <td>RSRP2:</td>
  1698. <td><span id="__nr_signal_0_rsrp2"></span> dBm</td>
  1699. </tr>
  1700. <tr>
  1701. <td>SINR:</td>
  1702. <td><span id="__nr_signal_0_sinr"></span> dB</td>
  1703. </tr>
  1704. <tr id="5g_1_arfcn">
  1705. <td>ARFCN:</td>
  1706. <td><span id="__nr_signal_0_arfcn"></span></td>
  1707. </tr>
  1708. <tr>
  1709. <td>PCI:</td>
  1710. <td><span id="__nr_signal_0_pci"></span></td>
  1711. </tr>
  1712. <tr id="5g_1_bandwidth">
  1713. <td>BW:</td>
  1714. <td><span id="__nr_signal_0_bandwidth"></span> MHz</td>
  1715. </tr>
  1716. </table>
  1717. <div class="spacing"></div>
  1718. </div>
  1719.  
  1720. <div id="5g_2">
  1721. <!-- NR Scell1 -->
  1722. <table class="mod_table signal_table">
  1723. <tr>
  1724. <td colspan='2' style='text-align:center'>
  1725. 5G (<span id="__nr_signal_1_band"></span>)
  1726. <span id="__nr_signal_1_info_text"></span>
  1727. </td>
  1728. </tr>
  1729. <tr>
  1730. <td>RSRP:</td>
  1731. <td><span id="__nr_signal_1_rsrp1"></span> dBm</td>
  1732. </tr>
  1733. <tr>
  1734. <td>SINR:</td>
  1735. <td><span id="__nr_signal_1_sinr"></span> dB</td>
  1736. </tr>
  1737. <tr id="5g_2_arfcn">
  1738. <td>ARFCN:</td>
  1739. <td><span id="__nr_signal_1_arfcn"></span></td>
  1740. </tr>
  1741. <tr>
  1742. <td>PCI:</td>
  1743. <td><span id="__nr_signal_1_pci"></span></td>
  1744. </tr>
  1745. <tr>
  1746. <td>BW:</td>
  1747. <td><span id="__nr_signal_1_bandwidth"></span> MHz</td>
  1748. </tr>
  1749. </table>
  1750. <div class="spacing"></div>
  1751. </div>
  1752. <div id="5g_3">
  1753. <!-- NR Scell2 -->
  1754. <table class="mod_table signal_table">
  1755. <tr>
  1756. <td colspan='2' style='text-align:center'>
  1757. 5G (<span id="__nr_signal_2_band"></span>)
  1758. <span id="__nr_signal_2_info_text"></span>
  1759. </td>
  1760. </tr>
  1761. <tr>
  1762. <td>RSRP:</td>
  1763. <td><span id="__nr_signal_2_rsrp1"></span> dBm</td>
  1764. </tr>
  1765. <tr>
  1766. <td>SINR:</td>
  1767. <td><span id="__nr_signal_2_sinr"></span> dB</td>
  1768. </tr>
  1769. <tr id="5g_3_arfcn">
  1770. <td>ARFCN:</td>
  1771. <td><span id="__nr_signal_2_arfcn"></span></td>
  1772. </tr>
  1773. <tr>
  1774. <td>PCI:</td>
  1775. <td><span id="__nr_signal_2_pci"></span></td>
  1776. </tr>
  1777. <tr>
  1778. <td>BW:</td>
  1779. <td><span id="__nr_signal_2_bandwidth"></span> MHz</td>
  1780. </tr>
  1781. </table>
  1782.  
  1783. <div class="spacing"></div>
  1784. </div>
  1785.  
  1786. <div>
  1787. <table class="mod_table cellinfo_table">
  1788. <tr id="provider">
  1789. <td>PROVIDER:</td>
  1790. <td><span id="network_provider_fullname"></span></td>
  1791. </tr>
  1792. <tr id="cell">
  1793. <td>CELL:</td>
  1794. <td><span id="cell_id"></span></td>
  1795. </tr>
  1796. <tr id="5g_cell">
  1797. <td>5G CELL:</td>
  1798. <td><span id="nr5g_cell_id"></span></td>
  1799. </tr>
  1800. <tr id="ngbr_cells">
  1801. <td>NGBR:</td>
  1802. <td><span id="ngbr_cell_info"></span></td>
  1803. </tr>
  1804. <tr id="txp">
  1805. <td>TX POWER:</td>
  1806. <td><span id="tx_power"></span></td>
  1807. </tr>
  1808. <tr>
  1809. <td>CONNECTION:</td>
  1810. <td><span id="network_type"></span></td>
  1811. </tr>
  1812. <tr id="bandinfo">
  1813. <td>BANDS:</td>
  1814. <td>
  1815. <span id="__bandinfo">
  1816. </td>
  1817. </tr>
  1818. <tr id="lte_ca_active_tr">
  1819. <td>LTE CA ACTIVE:</td>
  1820. <td><span id="ca_active"></span></td>
  1821. </tr>
  1822. <tr id="wanipinfo">
  1823. <td>WAN IP:</td>
  1824. <td><span id="wan_ipaddr"></span></td>
  1825. </tr>
  1826. <tr id="temperature">
  1827. <td>TEMP:</td>
  1828. <td id="temps"></td>
  1829. </tr>
  1830. </table>
  1831. </div>
  1832.  
  1833. </div>
  1834.  
  1835. <div class="spacing"></div>
  1836.  
  1837. <div class="inner_mod_container mod_border links_container">
  1838. <a onclick="set_net_mode()">Network Mode</a>
  1839. [
  1840. <a onclick="set_net_mode('WL_AND_5G')">Auto</a> |
  1841. <a onclick="set_net_mode('Only_5G')">5G SA</a> |
  1842. <a onclick="set_net_mode('LTE_AND_5G')">5G NSA</a> |
  1843. <a onclick="set_net_mode('4G_AND_5G')">5G SA/NSA/LTE</a> |
  1844. <a onclick="set_net_mode('Only_LTE')">LTE</a> |
  1845. <a onclick="set_net_mode('Only_WCDMA')">3G</a> |
  1846. <a onclick="set_net_mode('Only_GSM')">2G</a>
  1847. ]
  1848.  
  1849. <div class="spacing_links"></div>
  1850.  
  1851. <div id="lte_band_selection">
  1852. <a onclick="lte_band_selection()">LTE Bands</a>
  1853. [
  1854. <a onclick="lte_band_selection('AUTO')">Auto</a> |
  1855. <a onclick="lte_band_selection('1')">B1</a> |
  1856. <a onclick="lte_band_selection('3')">B3</a> |
  1857. <a onclick="lte_band_selection('7')">B7</a> |
  1858. <a onclick="lte_band_selection('8')">B8</a> |
  1859. <a onclick="lte_band_selection('20')">B20</a> |
  1860. <a onclick="lte_band_selection('1+3')">B1+B3</a> |
  1861. <a onclick="lte_band_selection('1+3+7')">B1+B3+B7</a>
  1862. ]
  1863.  
  1864. <div class="spacing_links"></div>
  1865. </div>
  1866.  
  1867. <a onclick="nr_band_selection()">5G Bands</a>
  1868. [
  1869. <a onclick="nr_band_selection('AUTO')">Auto</a> |
  1870. <a onclick="nr_band_selection('3')">N3</a> |
  1871. <a onclick="nr_band_selection('28')">N28</a> |
  1872. <a onclick="nr_band_selection('38')">N38</a> |
  1873. <a onclick="nr_band_selection('78')">N78</a> |
  1874. <a onclick="nr_band_selection('3,78')">N3+N78</a> |
  1875. <a onclick="nr_band_selection('28,78')">N28+N78</a> |
  1876. <a onclick="nr_band_selection('78,28,38')">N78+N28+N38</a>
  1877. ]
  1878.  
  1879. <div class="spacing_links"></div>
  1880.  
  1881. <a onclick="bridge_mode(true)">Enable bridge mode</a> | <a onclick="bridge_mode(false)">Disable bridge mode</a>
  1882.  
  1883. <div class="spacing_links"></div>
  1884.  
  1885. <a onclick="make_hidden_settings_visible()">Show hidden device settings</a>
  1886. <div class="spacing_links"></div>
  1887.  
  1888. <a onclick="enable_automatic_login()">Enable Automatic Login</a> | <a onclick="version_info()">Version Info</a>
  1889. <div class="spacing_links"></div>
  1890.  
  1891. <a onclick="lte_cell_lock()">LTE Cell Lock</a> <span id="lte_cell_lock"></span> |
  1892. <a onclick="lte_cell_lock(true)">Remove LTE Cell Lock</a> <span id="undo_lte_cell_lock"></span> ||
  1893. <a onclick="nr_cell_lock()">5G Cell Lock</a> <span id="nr_cell_lock"></span> |
  1894. <a onclick="nr_cell_lock(true)">Remove 5G Cell Lock</a> <span id="undo_nr_cell_lock"></span>
  1895.  
  1896. <div class="spacing_links"></div>
  1897.  
  1898. <a onclick="reboot()">Reboot Router</a>
  1899. <br>
  1900.  
  1901. </div>
  1902.  
  1903. <div class="spacing_small"></div>
  1904. </div>
  1905.  
  1906. <div class="spacing"></div>
  1907. `)
  1908. }
  1909.  
  1910. prepare_1_timer_id = window.setInterval(prepare_1, 250);
  1911. prepare_1();
  1912.  
  1913. $("#change").prop("disabled", !1);
  1914.  
  1915. $("#umts_signal_container").hide();
  1916. for (var i = 1; i <= 3; i++) $("#5g_" + i).hide();
  1917. for (var i = 1; i <= 6; i++) $("#lte_" + i).hide();
  1918. $("#lte_ca_active_tr").hide();
  1919. $("#provider").hide();
  1920. $("#cell").hide();
  1921. $("#5g_cell").hide();
  1922. $("#ngbr_cells").hide();
  1923. $("#txp").hide();
  1924. $("#temperature").hide();
  1925. $("#wanipinfo").hide();
  1926.  
Add Comment
Please, Sign In to add comment