捋清网页点击设备信息与开发板的交互(续集)
看懂部分代码后得知是通过 tcapi_get()获得信息的,该函数调用的是tcapi get 节点 子项
思路:首先在本地进行测试,在开发板上通过调用:
tcapi get Info_Ether brHost
发现这样可以显示连接的终端的mac地址,再继续调用:
tcapi get Info_Ether PortIP
由此类比就知道该tcapi_get(“xx1”, “xx2”, xx3)是执行上面的tcapi get xx1 xx2 的结果给 xx3
这样就好办了:
在本地写个测试程序,以终端ip作为判断依据,循环遍历64个lanhost2_entryN,找到匹配的lanhost2_entryN,再利用lanhost2_entryN ,执行tcapi_get( lanhost2_entryN, RxRate_rt, down_rate)…
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libtcapi.h"
#include "cfg_api.h"
typedef struct lan_node
{
char ip[32];
char up_rate[16];
char down_rate[16];
}LAN_NODE;
typedef struct {
int cnt;
LAN_NODE lan_list[64];
}LAN_LIST;
int main(int argc, char *argv[])
{
//打印多少个接入ip:
fprintf(stdout, "-------------------\n");
char ip[64*20]={0};
tcapi_get("Info_Ether", "PortIP", ip);
fprintf(stdout, "%s\n", ip);
fprintf(stdout, "-------------------\n");
//分割ip,并将分割好的ip赋值给 lan[index]
int index=0;
LAN_LIST lan;
char *ptr;
while(1)
{
if(0==index)
{
ptr = strtok(ip, ",");
}
else
{
ptr = strtok(NULL, ",");
}
if(NULL==ptr)
break;
fprintf(stdout, "%s\n", ptr);
strcpy(lan.lan_list[index].ip, ptr);
index++;
}
fprintf(stdout, "-------------------\n");
//在64个lanhost2_entryN找出ip地址来,并打印是哪个lanhost2_entryN
char lan_entry[32]={0};
char lan_entry_IP[32]={0};
for(int i=0; i<64; i++)
{
memset(lan_entry, 32, 0);
memset(lan_entry_IP, 32, 0);
sprintf(lan_entry, "lanhost2_entry%d", i);
//printf("%s\n", lan_entry);
tcapi_get(lan_entry, "IP", lan_entry_IP);
//lan_entry_IP长度小于8 (1.1.1.1)则跳过本次
if(strlen(lan_entry_IP)<8)
{
continue;
}
else
{
//否则,找出对应的lan_entry
for(index=0; index<lan.cnt; index++)
{
if(!strcmp(lan.lan_list[index].ip, lan_entry_IP))
{
printf("%s\n", lan_entry);
//并将该节点的下载速率和上传速率赋值
tcapi_get(lan_entry, "RxRate_rt", lan.lan_list[index].down_rate);
tcapi_get(lan_entry, "TxRate_rt", lan.lan_list[index].up_rate);
fprintf(stdout, "%s down_rate:%s\n",
lan.lan_list[index].ip,
lan.lan_list[index].down_rate);
fprintf(stdout, "%s up_rate:%s\n",
lan.lan_list[index].ip,
lan.lan_list[index].up_rate);
}
}
}
}
return 0;
}
但由于自己不熟悉git,导致写好的测试程序被覆盖,就很醉了,所以这里不展示测试程序,不过大概的意思已经说明了。
将测试程序移植到tz_info中的wan_info.c
最终修改:
//添加:上传速率up_rate 和 下载速率down_rate
char lan_entry[32]={0};
char lan_entry_IP[32]={0};
//在64个lanhost2_entryN中,对ip地址进行匹配,找出对应ip地址的lanhost2_entryN
for(int i=0; i<64; i++)
{
//字符串打包 lanhost2_entryN
memset(lan_entry, 32, 0);
memset(lan_entry_IP, 32, 0);
sprintf(lan_entry, "lanhost2_entry%d", i);
//获取lanhost2_entryN 中的ip 到 lan_entry_IP
tcapi_get(lan_entry, "IP", lan_entry_IP);
//lan_entry_IP 长度小8(1.1.1.1)跳过本次
if( strlen(lan_entry_IP)<8)
{
continue;
}
else
{
//否则,若地址与该节点地址相同 找出对应的lan_entry
if(!strcmp(lan->ip, lan_entry_IP))
{
//并将该节点的下载速率和上传速率赋值
tcapi_get(lan_entry, "RxRate_rt", lan->down_rate);
tcapi_get(lan_entry, "TxRate_rt", lan->up_rate);
break;
}
}
}
写好了程序,需编译一遍,当然就只编译这tz_info
./cool 1 tz_info
然后再打包程序
./cool 1 build_fw