[Feature][R307][task-view-604][webui] add network status
Change-Id: I0c809193dd428ac37dc5c3469408ead81f57a6a1
diff --git a/lynq/R307/ap/app/goahead/interface5.0/zte_web_interface.h b/lynq/R307/ap/app/goahead/interface5.0/zte_web_interface.h
index ee013a7..f6398ca 100755
--- a/lynq/R307/ap/app/goahead/interface5.0/zte_web_interface.h
+++ b/lynq/R307/ap/app/goahead/interface5.0/zte_web_interface.h
@@ -384,6 +384,7 @@
#define GOFORM_SET_NETWORK_ADB "NETWORK_ADB"
#define GOFORM_COMMAND "COMMAND"
+#define GOFORM_NETWORK_INFO "NETWORK_INFO"
/****************************All the web pages' URL************************************/
#define ZTE_WEB_PAGE_LOGIN_NAME "index.html"
@@ -1088,6 +1089,7 @@
extern void zte_goform_set_network_adb(webs_t wp);
extern void zte_goform_set_command(webs_t wp);
+extern void zte_goform_get_network_info(webs_t wp);
/**
* @brief Data to be decoded.
diff --git a/lynq/R307/ap/app/goahead/interface5.0/zte_web_mgmt.c b/lynq/R307/ap/app/goahead/interface5.0/zte_web_mgmt.c
index 3450804..35c9622 100755
--- a/lynq/R307/ap/app/goahead/interface5.0/zte_web_mgmt.c
+++ b/lynq/R307/ap/app/goahead/interface5.0/zte_web_mgmt.c
@@ -306,7 +306,7 @@
int sem_id = -1;
int rc = TRUE;
-
+
sem_id = get_sem(TIME_SEM_KEY_2);
if (sem_id != -1) {
sem_p(sem_id);
@@ -318,11 +318,11 @@
{
rc = FALSE; // kw 3
}
-
+
if (sem_id != -1) {
sem_v(sem_id);
}
-
+
return rc;
}
void zte_mgmt_login_timeout_check()
@@ -343,7 +343,7 @@
luser_login_timemark = LONG_MAX;
slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login_timemark_check: user_login_timemark is out of range [0, LONG_MAX).");
}
-
+
sem_id = get_sem(TIME_SEM_KEY_2);
if (sem_id != -1) {
sem_p(sem_id);
@@ -353,7 +353,7 @@
if (sem_id != -1) {
sem_v(sem_id);
}
-
+
if ((time_now - luser_login_timemark) > LOGIN_TIMEOUT) {
slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login_timemark_check: the login is timeout .");
(void)zte_web_write(NV_USER_IP_ADDR, "");
@@ -452,7 +452,7 @@
char strCfgGetItem[16] = {0};
nv_get_item(NV_RO, "usb_modetype", strCfgGetItem, sizeof(strCfgGetItem));
-
+
slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->%s current->%s\n", debug_enable, strCfgGetItem);
if((strcmp(strCfgGetItem,"user")== 0)&&(atoi(debug_enable) != 0))
{
@@ -463,7 +463,7 @@
return;
}*/
}
-
+
if ('\0' == (*debug_enable)) {
slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_set_devicemode: web para:[debug_enable] is empty string.\n");
zte_write_result_to_web(wp, "set_devicemode fail:parameter debug_enable is empty!");
@@ -1346,7 +1346,7 @@
char *schedule_minute = NULL;
schedule_enable = websGetVar(wp, T("scheduleEnabled"), T(""));
-
+
if(0 == strcmp("1", schedule_enable))
{
schedule_hour = websGetVar(wp, T("scheduleHour"), T(""));
@@ -1764,7 +1764,7 @@
if (NULL == ipv6profile) {
return;
}
-
+
sprintf(cfg_name, "APN_configtmp%d", index);
cfg_get_item(cfg_name, cfg_value, sizeof(cfg_value));
pos_begin = cfg_value;
@@ -2075,7 +2075,7 @@
{
return -1;
}
-
+
memset(&buf, 0, sizeof(buf));
cfg_get_item("manual_time_month", buf, sizeof(buf));
month = atoi(buf);
@@ -2211,7 +2211,7 @@
{
mtime = 0;
}
-
+
if (0 != mtime) {
mtime += (SynBeforeTime - ltime);
} else {
@@ -2240,7 +2240,7 @@
{
ntime = 0;
}
-
+
mtime = SynBeforeTime - ntime;
}
sprintf(SynPppTotal, "%d", mtime);
@@ -2266,7 +2266,7 @@
if (0 != ret) {
slog(MISC_PRINT, SLOG_ERR, "send MSG_CMD_SNTP_SET_TIME to sntp fail!");
}
-
+
ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_SYCTIME_SET_REQ, 0, NULL, 0);
if (0 != ret) {
slog(MISC_PRINT, SLOG_ERR, "sync time to cp fail!");
@@ -3044,6 +3044,141 @@
}
}
+static void parse_at_response(const char *response, char **params, int *param_count, char *at, int count)
+{
+ const char *start = strstr(response, at);
+ if (start == NULL)
+ {
+ printf("Response does not contain the expected prefix.\n");
+ return;
+ }
+
+ start += strlen(at);
+ char *token = strtok((char *)start, ",");
+ *param_count = 0;
+
+ while (token != NULL && *param_count < count)
+ {
+ params[(*param_count)++] = token;
+ token = strtok(NULL, ",");
+ }
+}
+
+#define MIN_RSRQ_VALUE -19.5 // 1¤71¤7§³dB0ö5
+#define STEP_SIZE 0.5 // 071¤71¤71¤71¤71¤71¤7041¤71¤71¤7
+#define MAX_RSRQ_INDEX 34 // 1¤71¤71¤71¤71¤71¤71¤71¤71¤71¤71¤7
+
+static float get_rsrq_db_value(int rsrq_index)
+{
+ if (rsrq_index < 0 || rsrq_index > MAX_RSRQ_INDEX)
+ {
+ return -1000.0;
+ }
+
+ float lower_bound = MIN_RSRQ_VALUE + rsrq_index * STEP_SIZE;
+
+ return lower_bound;
+}
+
+void zte_goform_get_network_info(webs_t wp)
+{
+ char response[1024];
+ char tmp[16] = {0};
+ char plmn[16] = {0};
+ char *params[15];
+ int param_count = 0;
+ int i = 0;
+ char rsrp[16] = {0};
+ char cell_id[16] = {0};
+
+ executeCommand("at at+ZSINR 2>&1", response, sizeof(response));
+ const char *start = strstr(response, "+ZSINR: ");
+ if (start != NULL)
+ {
+ start += strlen("+ZSINR: ");
+ char *sinr = strtok((char *)start, ",");
+ if (atoi(sinr) == -20)
+ {
+ cfg_set("lte_sinr", "--");
+ web_feedback_header(wp);
+ (void)websWrite(wp, T("{\"%s\":\"%s\","), "lte_sinr", "--");
+ }
+ else
+ {
+ cfg_set("lte_sinr", sinr);
+ web_feedback_header(wp);
+ (void)websWrite(wp, T("{\"%s\":\"%s dB\","), "lte_sinr", sinr);
+ }
+ }
+ else
+ {
+ cfg_set("lte_sinr", "--");
+ web_feedback_header(wp);
+ (void)websWrite(wp, T("{\"%s\":\"%s\","), "lte_sinr", "--");
+ }
+
+ executeCommand("at at+ZEMSCIQ=1 2>&1", response, sizeof(response));
+ if (strstr(response, "+CME ERROR:") != NULL)
+ {
+ printf("----No network\n");
+ cfg_set("lte_plmn", "--");
+ cfg_set("lte_pci", "--");
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrp", "--");
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrq", "--");
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_plmn", "--");
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_cellid", "--");
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_pci", "--");
+ (void)websWrite(wp, T("\"%s\":\"%s\"}"), "lte_band", "--");
+ }
+ else
+ {
+ parse_at_response(response, params, ¶m_count, "+ZEMSCIQ: ", 12);
+ for (i = 0; i < param_count; i++)
+ {
+ printf("Parameter[%d]: %s\n", i, params[i]);
+ }
+ printf("======set lte_plmn=%s lte_pci=%s lte_band=%s lte_rsrq=%s\n", params[5], params[6], params[8], params[10]);
+ float db_value = get_rsrq_db_value(atoi(params[10]));
+ if (db_value == -1000.0)
+ {
+ cfg_set("lte_rsrq", " ");
+ }
+ else
+ {
+ sprintf(tmp, "%d", (int)db_value);
+ cfg_set("lte_rsrq", tmp);
+ }
+
+ snprintf(plmn, strlen(params[5]) - 1, "%s", params[5] + 1);
+ cfg_set("lte_plmn", plmn);
+ cfg_set("lte_pci", params[6]);
+ cfg_get_item("cell_id", cell_id, sizeof(cell_id));
+ cfg_get_item("lte_rsrp", rsrp, sizeof(rsrp));
+ if (strlen(rsrp) == 0)
+ {
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrp", "--");
+ }
+ else
+ {
+ (void)websWrite(wp, T("\"%s\":\"%s dBm\","), "lte_rsrp", rsrp);
+ }
+ if (strlen(tmp) == 0)
+ {
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrq", "--");
+ }
+ else
+ {
+ (void)websWrite(wp, T("\"%s\":\"%s dB\","), "lte_rsrq", tmp);
+ }
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_plmn", plmn);
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_cellid", cell_id);
+ (void)websWrite(wp, T("\"%s\":\"%s\","), "lte_band", params[8]);
+ (void)websWrite(wp, T("\"%s\":\"%s\"}"), "lte_pci", params[6]);
+ }
+
+ return;
+}
+
void zte_goform_set_command(webs_t wp)
{
MSG_BUF stMsg = {0};
@@ -3087,7 +3222,7 @@
replace_slash_with_backslash(value);
printf("replace value:%s\n", value);
}
- executeCommand(value, result);
+ executeCommand(value, result, sizeof(result));
printf("Command Output:\n%s\n", result);
zte_write_result_to_web(wp, result);
return;
@@ -3244,7 +3379,7 @@
{
login_times = 0;
}
-
+
login_times--;
sprintf(psw_fail_num_str, "%d", login_times);
(void)zte_web_write("psw_fail_num_str", psw_fail_num_str);
@@ -3469,7 +3604,7 @@
{
int efuse_fd = -1;
T_ZDrvEfuse_Secure efuse = {0};
-
+
memset(&efuse, 0, sizeof(efuse));
efuse_fd = open("/dev/efuse", O_RDWR);
if (efuse_fd < 0) {
@@ -3483,7 +3618,7 @@
}
close(efuse_fd);
memcpy(aes_key, efuse.pubKeyHash, k_len);
-
+
return 1;
}
@@ -3493,13 +3628,13 @@
printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
return 0;
}
-
+
AES_KEY aes = {0}; //cov h
if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {
printf("bs_aes_encrypt AES_set_encrypt_key err\n");
return 0;
}
-
+
int en_len = 0;
while (en_len < len) {
AES_encrypt((unsigned char*)in, (unsigned char*)out, &aes);
@@ -3507,7 +3642,7 @@
out += AES_BLOCK_SIZE;
en_len += AES_BLOCK_SIZE;
}
-
+
return 1;
}
@@ -3517,13 +3652,13 @@
printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
return 0;
}
-
+
AES_KEY aes = {0}; //cov h
if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {
printf("bs_aes_decrypt AES_set_decrypt_key err\n");
return 0;
}
-
+
int en_len = 0;
while (en_len < len) {
AES_decrypt((unsigned char*)in, (unsigned char*)out, &aes);
@@ -3531,7 +3666,7 @@
out += AES_BLOCK_SIZE;
en_len += AES_BLOCK_SIZE;
}
-
+
return 1;
}
@@ -3541,7 +3676,7 @@
printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
return 0;
}
-
+
AES_KEY aes = {0}; //cov h
if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {
printf("bs_aes_encrypt AES_set_encrypt_key err\n");
@@ -3550,11 +3685,11 @@
unsigned char iv[AES_BLOCK_SIZE] = {0};
memcpy(iv, key, AES_BLOCK_SIZE);
-
+
AES_cbc_encrypt((unsigned char*)in, (unsigned char*)out, len,
&aes, iv, AES_ENCRYPT);
-
+
return 1;
}
@@ -3564,7 +3699,7 @@
printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
return 0;
}
-
+
AES_KEY aes = {0}; //cov h
if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {
printf("bs_aes_decrypt AES_set_decrypt_key err\n");
@@ -3573,7 +3708,7 @@
unsigned char iv[AES_BLOCK_SIZE] = {0};
memcpy(iv, key, AES_BLOCK_SIZE);
-
+
AES_cbc_encrypt((unsigned char*)in, (unsigned char*)out, len,
&aes, iv, AES_DECRYPT);
@@ -3793,7 +3928,7 @@
set_apn_prof_aes_by_index(index, &profile);
// printf("decrypt fota ppp_tmp[%d]=%s\n", index, profile.ppp_passwd);
}
-
+
set_apn_profile_by_index(index, &profile);
return;
@@ -3973,7 +4108,7 @@
{
char rstr[10] = {0};
unsigned int rnum = 0;
-
+
srand( (unsigned)time( NULL ) );
rnum = rand();
rnum %= 1000000000;
@@ -3988,11 +4123,11 @@
size_t aes_len = 0;
char *out = NULL;
-
+
char js_aes_key[24 + 1]={0};
char imei_buf[15 + 1] = {0};
char rnum_buf[9 + 1] = {0};
-
+
aes_password = (char *)zte_base64_decode((const unsigned char *)src, len, (unsigned int*)&aes_len);
if (aes_password == NULL)
return NULL;
@@ -4008,7 +4143,7 @@
cfg_get_item("imei", imei_buf, sizeof(imei_buf));
cfg_get_item("rnum_js", rnum_buf, sizeof(rnum_buf));
snprintf(js_aes_key, sizeof(js_aes_key), "%s%sFFFFFFFFFFFFFFF", rnum_buf, imei_buf);
-
+
bs_aes_cbc_decrypt(aes_password, aes_len, out, js_aes_key, sizeof(js_aes_key)-1);
//printf("decrypt js_aes_decode[%d]=%s\n", aes_len, out);
@@ -4020,7 +4155,7 @@
}
*out_len = strlen(out);
-
+
return out;
}
#endif
diff --git a/lynq/R307/ap/app/goahead/interface5.0/zte_web_util.c b/lynq/R307/ap/app/goahead/interface5.0/zte_web_util.c
index a824754..2c3c467 100755
--- a/lynq/R307/ap/app/goahead/interface5.0/zte_web_util.c
+++ b/lynq/R307/ap/app/goahead/interface5.0/zte_web_util.c
@@ -127,6 +127,7 @@
{CMD_HTTPSHARE_GETCARD_VAULE, zte_httpShare_getcard_value},
{CMD_HTTPSHARE_GETCARD_NMEA, zte_httpShare_getcard_name},
{CMD_HTTPSHARE_AUTH_GET, zte_httpShare_auth_get},
+ {GOFORM_NETWORK_INFO, zte_goform_get_network_info},
};
diff --git a/lynq/R307/ap/app/zte_webui/i18n/Messages_en.properties b/lynq/R307/ap/app/zte_webui/i18n/Messages_en.properties
index 9e8e08f..2f21e23 100755
--- a/lynq/R307/ap/app/zte_webui/i18n/Messages_en.properties
+++ b/lynq/R307/ap/app/zte_webui/i18n/Messages_en.properties
@@ -446,6 +446,14 @@
dial_roaming_remind = Check here, you can connect to internet in the roaming status.
dial_roaming_connect = Your device is roaming. Connecting to network may occur additional charges. Continue?
+#net_status
+net_info = Network Status
+pci = PCI
+rsrp = RSRP
+rsrq = RSRQ
+plmn = PLMN
+band = BAND
+
#phonebook
search = Search
save_location = Save Location
diff --git a/lynq/R307/ap/app/zte_webui/i18n/Messages_zh-cn.properties b/lynq/R307/ap/app/zte_webui/i18n/Messages_zh-cn.properties
index fe8b933..52f1093 100755
--- a/lynq/R307/ap/app/zte_webui/i18n/Messages_zh-cn.properties
+++ b/lynq/R307/ap/app/zte_webui/i18n/Messages_zh-cn.properties
@@ -448,6 +448,14 @@
dial_roaming_remind = 勾选此项,您可以在漫游状态下连接到网络,且可能会产生额外费用。
dial_roaming_connect = 设备处于漫游状态,连接网络会使您的资费增加。确定继续?
+#net_status
+net_info = 网络状态
+pci = PCI
+rsrp = RSRP
+rsrq = RSRQ
+plmn = PLMN
+band = BAND
+
#phonebook
search = 搜索
save_location = 存储位置
diff --git a/lynq/R307/ap/app/zte_webui/js/com.js b/lynq/R307/ap/app/zte_webui/js/com.js
index d6c718b..73e9c0d 100755
--- a/lynq/R307/ap/app/zte_webui/js/com.js
+++ b/lynq/R307/ap/app/zte_webui/js/com.js
@@ -497,6 +497,25 @@
}
}
}
+ function getNetworkStatus() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "NETWORK_INFO";
+ return valueReq;
+ }
+ function deal(result) {
+ return {
+ sinr: result.lte_sinr,
+ rsrp: result.lte_rsrp,
+ rsrq: result.lte_rsrq,
+ plmn: result.lte_plmn,
+ pci: result.lte_pci,
+ cellid: result.lte_cellid,
+ band: result.lte_band
+ };
+ }
+ }
function deleteApn() {
return stuffMake(arguments, {}, prepare, deal, null, true);
function prepare(values, isPost) {
@@ -5477,6 +5496,7 @@
getLanInfo: getLanInfo,
setLanInfo: setLanInfo,
getApnSettings: getApnSettings,
+ getNetworkStatus: getNetworkStatus,
deleteApn: deleteApn,
setDefaultApn: setDefaultApn,
addOrEditApn: addOrEditApn,
diff --git a/lynq/R307/ap/app/zte_webui/js/ext/menu.js b/lynq/R307/ap/app/zte_webui/js/ext/menu.js
index 329eab5..dc3a4e4 100755
--- a/lynq/R307/ap/app/zte_webui/js/ext/menu.js
+++ b/lynq/R307/ap/app/zte_webui/js/ext/menu.js
@@ -145,8 +145,14 @@
parent: '#network_set',
requireLogin: needLogin,
checkSIMStatus: true
- },
- {
+ }, {
+ hash: '#net_status',
+ path: 'network_info',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
hash: '#wlan_station',
path: 'wifi_ap_station',
level: '2',
diff --git a/lynq/R307/ap/app/zte_webui/js/ext/menu_pppoe.js b/lynq/R307/ap/app/zte_webui/js/ext/menu_pppoe.js
index b467b2d..52fddf8 100755
--- a/lynq/R307/ap/app/zte_webui/js/ext/menu_pppoe.js
+++ b/lynq/R307/ap/app/zte_webui/js/ext/menu_pppoe.js
@@ -145,8 +145,14 @@
parent: '#network_set',
requireLogin: needLogin,
checkSIMStatus: true
- },
- {
+ }, {
+ hash: '#net_status',
+ path: 'network_info',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
hash: '#wlan_station',
path: 'wifi_ap_station',
level: '2',
diff --git a/lynq/R307/ap/app/zte_webui/js/main.js b/lynq/R307/ap/app/zte_webui/js/main.js
index a771f7d..fa447ca 100755
--- a/lynq/R307/ap/app/zte_webui/js/main.js
+++ b/lynq/R307/ap/app/zte_webui/js/main.js
@@ -24,7 +24,7 @@
tmpl: '../subpg',
underscore: '3rd/underscore',
service: 'com',
-
+
CryptoJS: '3rd/crypto-js',
menu: 'com',
@@ -56,6 +56,7 @@
network_apn_set: 'net',
network_dial_set: 'net',
network_dial_set_cpe: 'net',
+ network_info: 'net',
locknet: 'net',
network_net_select: 'net',
ddns: 'net',
diff --git a/lynq/R307/ap/app/zte_webui/js/net.js b/lynq/R307/ap/app/zte_webui/js/net.js
index 1a5b429..ac6b5c9 100755
--- a/lynq/R307/ap/app/zte_webui/js/net.js
+++ b/lynq/R307/ap/app/zte_webui/js/net.js
@@ -4232,3 +4232,30 @@
init: initialize
};
});
+define("network_info","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ function NetInfoVM() {
+ var target = this;
+ var network_status = service.getNetworkStatus();
+
+ target.pci = ko.observable(network_status.pci);
+ target.sinr = ko.observable(network_status.sinr);
+ target.rsrp = ko.observable(network_status.rsrp);
+ target.rsrq = ko.observable(network_status.rsrq);
+ target.plmn = ko.observable(network_status.plmn);
+ target.cellid = ko.observable(network_status.cellid);
+ target.band = ko.observable(network_status.band);
+ }
+
+ function initialize() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var imVm = new NetInfoVM();
+ ko.applyBindings(imVm, container[0]);
+ }
+
+ return {
+ init: initialize
+ };
+});
diff --git a/lynq/R307/ap/app/zte_webui/subpg/network_apn_set.html b/lynq/R307/ap/app/zte_webui/subpg/network_apn_set.html
index c308b85..16cd939 100755
--- a/lynq/R307/ap/app/zte_webui/subpg/network_apn_set.html
+++ b/lynq/R307/ap/app/zte_webui/subpg/network_apn_set.html
@@ -18,6 +18,7 @@
<li><a data-trans="dial_mode" href="#conn_set"></a></li>
<li><a data-trans="net_select" href="#network_choose"></a></li>
<li class="active"><a data-trans="apn_setting" href="#cgdcont_set"></a></li>
+ <li><a data-trans="net_info" href="#net_status"></a></li>
</ul>
</div>
</div>
@@ -128,9 +129,9 @@
</div>
</div>
</div>
-
+
<!-- 以下是ipv6 -->
-
+
<div data-bind="visible: (selectedPdpType() == 'IPv4v6' && supportIpv4AndIpv6()) || selectedPdpType() == 'IPv6'">
<div class="row form-group">
<label for="apn_ipv6_apn" data-bind="attr:{'data-trans': transApnV6}" class="col-xs-3 side-right"></label>
@@ -159,7 +160,7 @@
<input id="apn_dns2_ipv6" type="text" name="apn_dns2_ipv6" data-bind="value: dns2V6, disable: checkInputDisable" class="ipv6 form-control"/>
</div>
</div>
-
+
<div class="row form-group">
<label for="authentication_ipv6" data-bind="attr:{'data-trans': transAuthV6}" class="col-xs-3 side-right"></label>
<div class="col-xs-6">
@@ -217,4 +218,4 @@
</form>
</div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/lynq/R307/ap/app/zte_webui/subpg/network_dial_set.html b/lynq/R307/ap/app/zte_webui/subpg/network_dial_set.html
index e59b1ca..a13017d 100755
--- a/lynq/R307/ap/app/zte_webui/subpg/network_dial_set.html
+++ b/lynq/R307/ap/app/zte_webui/subpg/network_dial_set.html
@@ -18,6 +18,7 @@
<li class="active"><a data-trans="dial_mode" href="#conn_set"></a></li>
<li><a data-trans="net_select" href="#network_choose"></a></li>
<li><a data-trans="apn_setting" href="#cgdcont_set"></a></li>
+ <li><a data-trans="net_info" href="#net_status"></a></li>
</ul>
</div>
</div>
@@ -65,4 +66,4 @@
</form>
</div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/lynq/R307/ap/app/zte_webui/subpg/network_info.html b/lynq/R307/ap/app/zte_webui/subpg/network_info.html
new file mode 100755
index 0000000..84dabe4
--- /dev/null
+++ b/lynq/R307/ap/app/zte_webui/subpg/network_info.html
@@ -0,0 +1,64 @@
+<div id="innerContainer">
+ <div class="row header-row">
+ <div class="col-xs-1">
+ <a href="#main">
+ <img alt="" src="pic/direct-back.png">
+ </a>
+ </div>
+ <div class="col-xs-11">
+ <div class="form-title">
+ <h1 data-trans='net_setting'></h1>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-xs-2">
+ <div class="nav_right">
+ <ul>
+ <li><a data-trans="dial_mode" href="#conn_set"></a></li>
+ <li><a data-trans="net_select" href="#network_choose"></a></li>
+ <li><a data-trans="apn_setting" href="#cgdcont_set"></a></li>
+ <li class="active"><a data-trans="net_info" href="#net_status"></a></li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="col-xs-10">
+ <form role="form">
+ <div class="form-body">
+ <h3 data-trans="net_info" class="form-title"></h3>
+ <div class="content">
+ <div class="row form-group">
+ <label data-trans="pci" class="col-xs-5"></label>
+ <label data-bind="text: pci" class="col-xs-7"></label>
+ </div>
+ <div class="row form-group">
+ <label data-trans="sinr" class="col-xs-5"></label>
+ <label data-bind="text: sinr" class="col-xs-7"></label>
+ </div>
+ <div class="row form-group">
+ <label data-trans="rsrp" class="col-xs-5"></label>
+ <label data-bind="text: rsrp" class="col-xs-7"></label>
+ </div>
+ <div class="row form-group">
+ <label data-trans="rsrq" class="col-xs-5"></label>
+ <label data-bind="text: rsrq" class="col-xs-7"></label>
+ </div>
+ <div class="row form-group">
+ <label data-trans="plmn" class="col-xs-5"></label>
+ <label data-bind="text: plmn" class="col-xs-7"></label>
+ </div>
+ <div class="row form-group">
+ <label data-trans="cellid" class="col-xs-5"></label>
+ <label data-bind="text: cellid" class="col-xs-7"></label>
+ </div>
+ <div class="row form-group">
+ <label data-trans="band" class="col-xs-5"></label>
+ <label data-bind="text: band" class="col-xs-7"></label>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/lynq/R307/ap/app/zte_webui/subpg/network_net_select.html b/lynq/R307/ap/app/zte_webui/subpg/network_net_select.html
index c7bb48c..b5552c1 100755
--- a/lynq/R307/ap/app/zte_webui/subpg/network_net_select.html
+++ b/lynq/R307/ap/app/zte_webui/subpg/network_net_select.html
@@ -18,6 +18,7 @@
<li><a data-trans="dial_mode" href="#conn_set"></a></li>
<li class="active"><a data-trans="net_select" href="#network_choose"></a></li>
<li><a data-trans="apn_setting" href="#cgdcont_set"></a></li>
+ <li><a data-trans="net_info" href="#net_status"></a></li>
</ul>
</div>
</div>
@@ -54,7 +55,7 @@
<input type="button" data-bind='click: save, visible: selectMode() == "auto_select", enable: enableFlag, css: {disabled: !enableFlag()}' data-trans='apply' class="btn btn-primary"/>
<input type="button" data-bind='click: search, visible: selectMode() != "auto_select", enable: enableFlag, css: {disabled: !enableFlag()}' data-trans='search' class="btn btn-primary"/>
</div>
-
+
<div data-bind='visible: networkList().length > 0 && selectMode() == "manual_select"' class="content">
<div class="form-title">
<h2 data-trans='network_list'></h2>
@@ -103,4 +104,4 @@
</form>
</div>
</div>
-</div>
\ No newline at end of file
+</div>