Merge pull request #23 from dr-dolomite/development

Added Improvements to Simple Network Page
This commit is contained in:
Cameron Thompson
2024-03-29 21:13:51 -04:00
committed by GitHub
6 changed files with 283 additions and 327 deletions

View File

@@ -4,7 +4,7 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>AT Commands</title> <title>Simple Settings</title>
<script src="/js/alpinejs.min.js" defer></script> <script src="/js/alpinejs.min.js" defer></script>
<link rel="stylesheet" href="/css/bulma.css" /> <link rel="stylesheet" href="/css/bulma.css" />
@@ -35,7 +35,9 @@
> >
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="/"> Connection Info </a> <a class="navbar-item" href="/"> Connection Info </a>
<a class="navbar-item" href="/atcommander.html"> AT Commands </a> <a class="navbar-item" href="/atcommander.html">
Simple Settings
</a>
<a class="navbar-item" href="/bandlock.html"> Simple Network </a> <a class="navbar-item" href="/bandlock.html"> Simple Network </a>
<a class="navbar-item" href="/sms.html"> SMS </a> <a class="navbar-item" href="/sms.html"> SMS </a>
<a class="navbar-item" href="/ttl.html"> TTL Changer </a> <a class="navbar-item" href="/ttl.html"> TTL Changer </a>
@@ -95,13 +97,13 @@
<div class="column is-8"> <div class="column is-8">
<div class="card"> <div class="card">
<header class="card-header"> <header class="card-header">
<p class="card-header-title">ATI Response</p> <p class="card-header-title">AT Command Response</p>
</header> </header>
<div class="card-content"> <div class="card-content">
<div class="content"> <div class="content">
<textarea <textarea
class="textarea" class="textarea"
placeholder="Please send only 1 AT command at a time" placeholder="Multiple commands should be separated by a semicolon. Example: AT+CGMR;+GSN"
rows="10" rows="10"
x-text="isLoading ? 'Fetching response, please wait...' : atCommandResponse" x-text="isLoading ? 'Fetching response, please wait...' : atCommandResponse"
></textarea> ></textarea>
@@ -115,156 +117,63 @@
</div> </div>
<!-- START Useful Commands Section --> <!-- START Useful Commands Section -->
<div class="container"> <div class="container" x-data="atCommands()">
<div class="columns"> <div class="columns">
<div class="column is-12"> <div class="column is-12">
<div class="card"> <div class="card">
<header class="card-header"> <header class="card-header">
<p class="card-header-title">Useful Commands</p> <p class="card-header-title">Useful One Click Commands</p>
</header> </header>
<div class="card-content"> <div class="card-content">
<div class="content"> <div class="content">
<div <div style="display: flex; flex-direction: row; flex-wrap: wrap; margin-top: 1rem; justify-content: space-between;">
class="field" <div class="field">
style="margin-bottom: 1rem" <div class="control">
x-data="atCommands()" <button
> class="button is-danger"
<p class="control"> @click="sendRebootCommand()"
<button :disabled="isRebooting"
class="button is-danger" >
@click="sendRebootCommand()" Reboot
:disabled="isRebooting" </button>
>
Reboot
</button>
</p>
<!-- Loading modal -->
<div x-show="isRebooting" class="modal-overlay">
<div class="loading-modal">
<div class="spinner"></div>
<div class="loading-text" style="display: flex; flex-direction: column;">
<h3>Rebooting...</h3>
<p style="margin-top: 0.5rem;">Please wait for
<span x-text="countdown" style="font-weight: 500;"></span> seconds before
refreshing the page.</p>
</div>
</div> </div>
</div> </div>
<!-- <div class="field">
<div class="control">
<button
class="button is-danger"
@click="sendRebootCommand()"
:disabled="isRebooting"
>
Reboot
</button>
</div>
</div> -->
</div> </div>
<!-- Add your useful commands content here -->
<p>Here are some useful commands:</p>
<ul>
<li>
<!-- Open to another tab -->
See <a href="https://github.com/iamromulan/RM520N-GL#at-commands" target="_blank" style="cursor: pointer;">https://github.com/iamromulan/RM520N-GL#at-commands</a> for
more
</li>
<li>AT+CFUN=1,1 (reboot)</li>
<li>
AT+QMAPWAC? (get current status of auto connect, 0=disabled
1=enabled)
</li>
<li>
AT+QMAPWAC=1 (enable auto connect internet for ethernet)
</li>
<li>
AT+QMAPWAC=0 (disable auto connect for ethernet; use when
you want internet over usb to work; IPPT must be disabled)
</li>
<li>
AT+QUIMSLOT? (get active sim slot; 1=Slot 1; 2=Slot 2)
</li>
<li>AT+QUIMSLOT=1 (switch to sim slot 1)</li>
<li>AT+QUIMSLOT=2 (switch to sim slot 2)</li>
<li>AT+CGDCONT? (Get active APN profle list 1 through 8)</li>
<li>
AT+CGDCONT=1,"IPV4V6","APNHERE" (Sets APN profle 1 to
APNHERE using both IPV4 and IPV6)
</li>
<li>AT+GSN (Show current IMEI)</li>
<li>AT+EGMR=1,7,"IMEIGOESHERE" (sets/repairs IMEI)</li>
<li>AT+QCAINFO (Show all connected bands/CA info)</li>
<li>
AT+QNWPREFCFG="mode_pref" (Check what the current network
search mode is set to)
</li>
<li>
AT+QNWPREFCFG="mode_pref",AUTO (Set network search mode to
automatic)
</li>
<li>
AT+QNWPREFCFG="mode_pref",NR5G:LTE (Set network search mode
to 5G/NR and 4G/LTE only)
</li>
<li>
AT+QNWPREFCFG="mode_pref",NR5G (Set network search mode to
5G/NR only)
</li>
<li>
AT+QNWPREFCFG="mode_pref",LTE (Set network search mode to
4G/LTE only)
</li>
<li>
AT+QNWPREFCFG="nr5g_disable_mode" (Check to see if SA or NSA
NR5G is disabled)
</li>
<li>
AT+QNWPREFCFG="nr5g_disable_mode",0 (Enable Both SA and NSA
5G/NR)
</li>
<li>
AT+QNWPREFCFG="nr5g_disable_mode",1 (Disable SA 5G/NR only)
</li>
<li>
AT+QNWPREFCFG="nr5g_disable_mode",2 (Disable NSA 5G/NR only)
</li>
<li>
AT+QNWPREFCFG="nr5g_band" (Get current 5G/NR bandlock
settings)
</li>
<li>
AT+QNWPREFCFG="nr5g_band",1:2:3:4:5:6 (Example: Lock to
5G/NR bands n1,n2,n3,n4,n5, and n6)
</li>
<li>
AT+QNWPREFCFG="lte_band" (Get current 4G/LTE bandlock
settings)
</li>
<li>
AT+QNWPREFCFG="lte_band",1:2:3:4:5:6 (Example: Lock to
4G/LTE bands 1,2,3,4,5, and 6)
</li>
<li>
AT+QMAP="WWAN" (Show currently assigned IPv4 and IPv6 from
the provider)
</li>
<li>
AT+QMAP="LANIP" (Show current DHCP range and Gateway address
for VLAN0)
</li>
<li>
AT+QMAP="LANIP",IP_start_range,IP_end_range,Gateway_IP (Set
IPv4 Start/End range and Gateway IP of DHCP for VLAN0)
</li>
<li>
AT+QMAP="DHCPV4DNS","disable" (disable the onboard DNS
proxy; recommended for IPPT)
</li>
<li>
AT+QMAP="MPDN_rule",0,1,0,1,1,"FF:FF:FF:FF:FF:FF" (Turn on
IP Passthrough for Ethernet)
</li>
<li>
AT+QMAP="MPDN_rule",0 (turn off IPPT/clear MPDN rule 0;
Remember to run AT+QMAPWAC=1 and reboot after)
</li>
</ul>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- Loading modal -->
<div x-show="isRebooting" class="modal-overlay">
<div class="loading-modal">
<div class="spinner"></div>
<div
class="loading-text"
style="display: flex; flex-direction: column"
>
<h3>Rebooting...</h3>
<p style="margin-top: 0.5rem">
Please wait for
<span x-text="countdown" style="font-weight: 500"></span> seconds
before refreshing the page.
</p>
</div>
</div>
</div>
</div> </div>
<script> <script>

View File

@@ -44,7 +44,9 @@
> >
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="/"> Connection Info </a> <a class="navbar-item" href="/"> Connection Info </a>
<a class="navbar-item" href="/atcommander.html"> AT Commands </a> <a class="navbar-item" href="/atcommander.html">
Simple Settings
</a>
<a class="navbar-item" href="/bandlock.html"> Simple Network </a> <a class="navbar-item" href="/bandlock.html"> Simple Network </a>
<a class="navbar-item" href="/sms.html"> SMS </a> <a class="navbar-item" href="/sms.html"> SMS </a>
<a class="navbar-item" href="/ttl.html"> TTL Changer </a> <a class="navbar-item" href="/ttl.html"> TTL Changer </a>
@@ -130,85 +132,23 @@
</div> </div>
<div <div
class="select is-info"
id="numFreqContainer" id="numFreqContainer"
style="margin-left: 1rem" style="margin-left: 1rem"
x-show="networkMode2 == 'LTE'" x-show="networkMode2 == 'LTE'"
> >
<select id="numFreqSelect" x-model="cellNum">
<option>Number of Cells</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</div>
</div>
<!-- For LTE Freq Number 1 -->
<div
style="margin-top: 1rem"
x-show="cellNum >= 1 && networkMode2 == 'LTE'"
>
<div style="display: flex; flex-direction: row">
<input <input
class="input is-info" class="input is-info"
type="text" type="number"
placeholder="EARFCN" id="numFreqInput"
x-model="earfcn1" min="1"
/> max="10"
<input placeholder="1-10"
class="input is-info" x-model="cellNum"
type="text"
placeholder="PCI"
x-model="pci1"
style="margin-left: 1rem"
/> />
</div> </div>
</div> </div>
<!-- For LTE Freq Number 2 --> <div id="freqNumbersContainer"></div>
<div
style="margin-top: 1rem"
x-show="cellNum >= 2 && networkMode2 == 'LTE'"
>
<div style="display: flex; flex-direction: row">
<input
class="input is-info"
type="text"
placeholder="EARFCN"
x-model="earfcn2"
/>
<input
class="input is-info"
type="text"
placeholder="PCI"
x-model="pci2"
style="margin-left: 1rem"
/>
</div>
</div>
<!-- For LTE Freq Number 3 -->
<div
style="margin-top: 1rem"
x-show="cellNum == 3 && networkMode2 == 'LTE'"
>
<div style="display: flex; flex-direction: row">
<input
class="input is-info"
type="text"
placeholder="EARFCN"
x-model="earfcn3"
/>
<input
class="input is-info"
type="text"
placeholder="PCI"
x-model="pci3"
style="margin-left: 1rem"
/>
</div>
</div>
<!-- For NR5G-SA --> <!-- For NR5G-SA -->
<div style="margin-top: 1rem" x-show="networkMode2 == 'NR5G-SA'"> <div style="margin-top: 1rem" x-show="networkMode2 == 'NR5G-SA'">
@@ -247,7 +187,7 @@
<button <button
class="button is-info" class="button is-info"
@click="cellLock()" @click="cellLock()"
:disabled="isLoading" :disabled="isLocking"
> >
Lock Cell Lock Cell
</button> </button>
@@ -256,7 +196,7 @@
class="button is-warning" class="button is-warning"
style="margin-left: 1rem" style="margin-left: 1rem"
@click="restoreCell()" @click="restoreCell()"
:disabled="isLoading" :disabled="isLocking"
> >
Restore Cell Restore Cell
</button> </button>
@@ -265,10 +205,10 @@
<div class="card-footer" style="padding: 0.25rem"> <div class="card-footer" style="padding: 0.25rem">
<p class="card-footer-item"> <p class="card-footer-item">
To utilize cell locking, first, select the network mode, then To utilize cell locking, first, select the network mode, then
specify the number of frequencies you wish to lock onto if you specify the number of cells you wish to lock onto (max 10) if
are using LTE. Next, input the EARFCN and PCI values for each you are using LTE. Next, input the EARFCN and PCI values for
cell number. If you are locking through NR5G-SA instead, simply each cell number. If you are locking through NR5G-SA instead,
fill up all the required parameters. simply fill up all the required parameters.
</p> </p>
</div> </div>
</div> </div>
@@ -404,90 +344,121 @@
<p class="card-header-title">Query Network Parameters</p> <p class="card-header-title">Query Network Parameters</p>
</header> </header>
<div class="card-content"> <div class="card-content">
<div class="content"> <textarea
<textarea class="textarea"
class="textarea" rows="5"
rows="5" placeholder="Query Response"
placeholder="Query Response" x-text=" isLoading ? 'Getting Response...' : queryCommandResponse"
x-text=" isLoading ? 'Getting Response...' : queryCommandResponse" ></textarea>
></textarea>
<div class="columns is-variable is-multiline" style="margin-top: 1rem"> <div style="margin-top: 1.5rem">
<div class="column is-half-desktop"> <p>Check Locked Bands</p>
<div> <div class="select is-info" style="margin-top: 0.5rem">
<p>Check Locked Bands</p> <select id="lockedBands" x-model="lockedBands">
<div class="is-flex-wrap-wrap"> <option>Locked Bands</option>
<div class="select is-info"> <option>LTE</option>
<select id="lockedBands" x-model="lockedBands"> <option>NSA</option>
<option>Locked Bands</option> <option>SA</option>
<option>LTE</option> </select>
<option>NSA</option>
<option>SA</option>
</select>
</div>
<button
class="button is-link"
style="margin-left: 1rem"
@click="showLockedBands()"
:disabled="isLoading"
>
Check Bands
</button>
</div>
</div>
</div>
<div class="column is-half-desktop">
<div>
<p>Check Cell Lock</p>
<div class="is-flex-wrap-wrap">
<div class="select is-info">
<select id="cellState" x-model="cellState">
<option>Cell Lock</option>
<option>LTE</option>
<option>NR5G-SA</option>
</select>
</div>
<button
class="button is-link"
style="margin-left: 1rem"
@click="showCellState()"
:disabled="isLoading"
>
Check Cell
</button>
</div>
</div>
</div>
</div> </div>
<div class="buttons" style="margin-top: 1rem"> <button
<button class="button is-link"
class="button is-link mr-2" style="margin-left: 1rem; margin-top: 0.5rem"
@click="showSupportedBands()" @click="showLockedBands()"
:disabled="isLoading" :disabled="isLoading"
> >
Show Supported Bands Check Bands
</button> </button>
</div>
<button <div style="margin-top: 1rem">
class="button is-link mr-2" <p>Check Cell Lock</p>
@click="showCurrentSim()" <div class="select is-info" style="margin-top: 0.5rem">
:disabled="isLoading" <select id="cellState" x-model="cellState">
> <option>Cell Lock</option>
Show Current Sim <option>LTE</option>
</button> <option>NR5G-SA</option>
</select>
<button
class="button is-link"
@click="showPrefNetwork()"
:disabled="isLoading"
>
Show Pref Network
</button>
</div> </div>
<button
class="button is-link"
style="margin-left: 1rem; margin-top: 0.5rem"
@click="showCellState()"
:disabled="isLoading"
>
Check Cell
</button>
</div>
<div style="margin-top: 2rem">
<p>Other Network Query</p>
</div>
<div class="buttons" style="margin-top: 0.5rem">
<button
class="button is-link mr-2"
@click="showSupportedBands()"
:disabled="isLoading"
>
Show Supported Bands
</button>
<button
class="button is-link mr-2"
@click="showCurrentSim()"
:disabled="isLoading"
>
Show Current Sim
</button>
<button
class="button is-link"
@click="showPrefNetwork()"
:disabled="isLoading"
>
Show Pref Network
</button>
<button
class="button is-link"
@click="showCaInfo()"
:disabled="isLoading"
>
Carrier Aggregation Info
</button>
<button
class="button is-link"
@click="servingCellInfo()"
:disabled="isLoading"
>
Serving Cell Info
</button>
<button
class="button is-link"
@click="scanNeighbourCells()"
:disabled="isLoading"
>
Scan Neighbour Cells
</button>
<button
class="button is-link"
@click="scanNsaCells()"
:disabled="isLoading"
>
Scan NSA Cells
</button>
<button
class="button is-link"
@click="fullNetworkScan()"
:disabled="isLoading"
>
Full Network Scan
</button>
</div> </div>
</div> </div>
<div class="card-footer" style="padding: 0.25rem"> <div class="card-footer" style="padding: 0.25rem">
@@ -538,6 +509,7 @@
function atCommands() { function atCommands() {
return { return {
isLoading: false, isLoading: false,
isQuerying: false,
isLocking: false, isLocking: false,
isError: false, isError: false,
countdown: 5, // Initial countdown value countdown: 5, // Initial countdown value
@@ -551,6 +523,20 @@
pci2: null, pci2: null,
earfcn3: null, earfcn3: null,
pci3: null, pci3: null,
earfcn4: null,
pci4: null,
earfcn5: null,
pci5: null,
earfcn6: null,
pci6: null,
earfcn7: null,
pci7: null,
earfcn8: null,
pci8: null,
earfcn9: null,
pci9: null,
earfcn10: null,
pci10: null,
band: null, band: null,
scs: null, scs: null,
apnInput: null, apnInput: null,
@@ -559,6 +545,7 @@
nrMode: null, nrMode: null,
lockedBands: null, lockedBands: null,
cellState: null, cellState: null,
invalidCellNum: "",
atCommandResponse: "", atCommandResponse: "",
queryCommandResponse: "", queryCommandResponse: "",
lockBands() { lockBands() {
@@ -623,40 +610,30 @@
return; return;
} }
// Construct the atcmd based on the selected network mode // Construct the AT command based on the selected network mode
// LTE: AT+QNWLOCK="common/4g",<1-3>,<EARFCN>,<PCI>
// NR5G-SA: AT+QNWLOCK="common/5g",<PCI>,<EARFCN>,<SCS>,<BAND>
let atcmd; let atcmd;
if (this.networkMode2 === "LTE") { if (this.networkMode2 === "LTE") {
switch (this.cellNum) { if (parseInt(this.cellNum) > 10) {
case "1": this.invalidCellNum = "Invalid";
atcmd = `AT+QNWLOCK="common/4g",1,${this.earfcn1},${this.pci1}`; this.isError = true;
console.log(atcmd); this.startCountdown();
break; console.error("Invalid frequency number.");
case "2": return;
atcmd = `AT+QNWLOCK="common/4g",2,${this.earfcn1},${this.pci1},${this.earfcn2},${this.pci2}`;
console.log(atcmd);
break;
case "3":
atcmd = `AT+QNWLOCK="common/4g",3,${this.earfcn1},${this.pci1},${this.earfcn2},${this.pci2},${this.earfcn3},${this.pci3}`;
console.log(atcmd);
break;
default:
console.log(atcmd);
this.isError = true;
this.startCountdown();
console.error("Invalid frequency number.");
return;
} }
}
if (this.networkMode2 === "NR5G-SA") { this.isLocking = true;
atcmd = `AT+QNWLOCK="common/4g",${this.cellNum}`;
for (let i = 1; i <= parseInt(this.cellNum); i++) {
atcmd += `,${this["earfcn" + i]},${this["pci" + i]}`;
}
console.log(atcmd);
} else if (this.networkMode2 === "NR5G-SA") {
this.isLocking = true;
atcmd = `AT+QNWLOCK="common/5g",${this.pci1},${this.earfcn1},${this.scs},${this.band}`; atcmd = `AT+QNWLOCK="common/5g",${this.pci1},${this.earfcn1},${this.scs},${this.band}`;
console.log(atcmd); console.log(atcmd);
} }
this.isLoading = true;
this.sendAtCommand(atcmd); this.sendAtCommand(atcmd);
}, },
restoreBands() { restoreBands() {
@@ -764,8 +741,50 @@
const prefCmd = 'AT+QNWPREFCFG="mode_pref"'; const prefCmd = 'AT+QNWPREFCFG="mode_pref"';
this.queryATCommand(prefCmd); this.queryATCommand(prefCmd);
}, },
showCaInfo() {
const caCmd = "AT+QCAINFO";
this.queryATCommand(caCmd);
},
servingCellInfo() {
const servingCmd = 'AT+QENG="servingcell"';
this.queryATCommand(servingCmd);
},
scanNeighbourCells() {
const scanCmd = 'AT+QENG="neighbourcell"';
this.queryATCommand(scanCmd);
},
scanNsaCells() {
const enableCmd = 'AT+QNWCFG="nr5g_meas_info",1';
const queryScanCmd = 'AT+QNWCFG="nr5g_meas_info"';
// Send the enable command first without getting the response
fetch(
"/cgi-bin/get_atcommand?" +
new URLSearchParams({
atcmd: enableCmd,
})
)
.then(() => {
console.log("Enable Success.");
// Show a temporary loading query message
this.queryCommandResponse =
"Enabling NSA cell scan. Please wait...";
this.queryATCommand(queryScanCmd);
})
.catch((error) => {
this.isError = true;
this.startCountdown();
console.error("Error sending AT command:", error);
});
},
fullNetworkScan() {
const scanCmd = "AT+QSCAN=3,1";
// Show a temporary loading query message
this.queryCommandResponse =
"Full network scan initiated. This takes about a minute. Please wait...";
this.queryATCommand(scanCmd);
},
queryATCommand(atcmd) { queryATCommand(atcmd) {
this.isLoading = true; this.isQuerying = true;
fetch( fetch(
"/cgi-bin/get_atcommand?" + "/cgi-bin/get_atcommand?" +
new URLSearchParams({ new URLSearchParams({
@@ -783,11 +802,11 @@
console.error("Error sending AT command:", error); console.error("Error sending AT command:", error);
}) })
.finally(() => { .finally(() => {
this.isLoading = false; this.isQuerying = false;
}); });
}, },
sendAtCommand(atcmd) { sendAtCommand(atcmd) {
this.isLocking = true; this.isLoading = true;
this.startCountdown(); this.startCountdown();
console.log(atcmd); console.log(atcmd);
fetch( fetch(
@@ -820,12 +839,40 @@
this.isLocking = false; this.isLocking = false;
this.isError = false; this.isError = false;
this.isLoading = false; this.isLoading = false;
this.isQuerying = false;
this.countdown = 5; this.countdown = 5;
} }
}, 1000); }, 1000);
}, },
}; };
} }
const freqNumbersContainer = document.getElementById(
"freqNumbersContainer"
);
function generateFreqNumberInputs(num) {
let html = "";
const maxFields = Math.min(num, 10); // Limit to a maximum of 10 fields
for (let i = 1; i <= maxFields; i++) {
html += `
<div style="margin-top: 1rem" x-show="cellNum >= ${i} && networkMode2 == 'LTE'">
<div style="display: flex; flex-direction: row">
<input class="input is-info" type="text" placeholder="EARFCN" x-model="earfcn${i}" />
<input class="input is-info" type="text" placeholder="PCI" x-model="pci${i}" style="margin-left: 1rem" />
</div>
</div>
`;
}
return html;
}
document
.getElementById("numFreqInput")
.addEventListener("input", function () {
const cellNum = parseInt(this.value);
freqNumbersContainer.innerHTML = generateFreqNumberInputs(cellNum);
});
</script> </script>
</body> </body>
</html> </html>

View File

@@ -36,7 +36,7 @@
> >
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="/"> Connection Info </a> <a class="navbar-item" href="/"> Connection Info </a>
<a class="navbar-item" href="/atcommander.html"> AT Commands </a> <a class="navbar-item" href="/atcommander.html"> Simple Settings </a>
<a class="navbar-item" href="/bandlock.html"> Simple Network </a> <a class="navbar-item" href="/bandlock.html"> Simple Network </a>
<a class="navbar-item" href="/sms.html"> SMS </a> <a class="navbar-item" href="/sms.html"> SMS </a>
<a class="navbar-item" href="/ttl.html"> TTL Changer </a> <a class="navbar-item" href="/ttl.html"> TTL Changer </a>

View File

@@ -36,7 +36,7 @@
> >
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="/"> Connection Info </a> <a class="navbar-item" href="/"> Connection Info </a>
<a class="navbar-item" href="/atcommander.html"> AT Commands </a> <a class="navbar-item" href="/atcommander.html"> Simple Settings </a>
<a class="navbar-item" href="/bandlock.html"> Simple Network </a> <a class="navbar-item" href="/bandlock.html"> Simple Network </a>
<a class="navbar-item" href="/sms.html"> SMS </a> <a class="navbar-item" href="/sms.html"> SMS </a>
<a class="navbar-item" href="/ttl.html"> TTL Changer </a> <a class="navbar-item" href="/ttl.html"> TTL Changer </a>

View File

@@ -37,7 +37,7 @@
> >
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="/"> Connection Info </a> <a class="navbar-item" href="/"> Connection Info </a>
<a class="navbar-item" href="/atcommander.html"> AT Commands </a> <a class="navbar-item" href="/atcommander.html"> Simple Settings </a>
<a class="navbar-item" href="/bandlock.html"> Simple Network </a> <a class="navbar-item" href="/bandlock.html"> Simple Network </a>
<a class="navbar-item" href="/sms.html"> SMS </a> <a class="navbar-item" href="/sms.html"> SMS </a>
<a class="navbar-item" href="/ttl.html"> TTL Changer </a> <a class="navbar-item" href="/ttl.html"> TTL Changer </a>

View File

@@ -31,7 +31,7 @@
<div id="navMenu" class="navbar-menu" :class="isOpen ? 'is-active' : ''"> <div id="navMenu" class="navbar-menu" :class="isOpen ? 'is-active' : ''">
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="/"> Connection Info </a> <a class="navbar-item" href="/"> Connection Info </a>
<a class="navbar-item" href="/atcommander.html"> AT Commands </a> <a class="navbar-item" href="/atcommander.html"> Simple Settings </a>
<a class="navbar-item" href="/bandlock.html"> Simple Network </a> <a class="navbar-item" href="/bandlock.html"> Simple Network </a>
<a class="navbar-item" href="/sms.html"> SMS </a> <a class="navbar-item" href="/sms.html"> SMS </a>
<a class="navbar-item" href="/ttl.html"> TTL Changer </a> <a class="navbar-item" href="/ttl.html"> TTL Changer </a>