openwrt版本:DESIGNATED DRIVER (Bleeding Edge, r49395)
【读wifi参数中的ssid】
int getWirelessCfgValue(char *name,char *value, int valueBufLen)
{
if (NULL == name || NULL == value)
{
return RC_PROC_FAIL;
}
struct uci_context * uciCtx = uci_alloc_context();
char * pValueData = NULL;
struct uci_package * pkg = NULL;
struct uci_element * e;
const char * NETWORK_UCI_CFG_NAME = "wireless";
if (UCI_OK != uci_load(uciCtx, NETWORK_UCI_CFG_NAME, &pkg))
goto cleanup;
uci_foreach_element(&pkg->sections, e)
{
struct uci_section *s = uci_to_section(e);
if (NULL != (pValueData = uci_lookup_option_string(uciCtx, s, name)))
{
strncpy(value, pValueData, valueBufLen);
printf("get wireless cfg ok, %s: %s\n", name, value);
}
}
uci_unload(uciCtx, pkg);
cleanup:
uci_free_context(uciCtx);
uciCtx = NULL;
return RC_PROC_SUCC;
}
【修改WIFI参数中的ssid】
下面函数中注销的那部分代码一直无法修改ssid成功。 如果对应的option不存在的话,下面的函数应该还需要再修改一下
int setWirelessCfgValue(char *name,char *value)
{
if (NULL == name || NULL == value)
{
return RC_PROC_FAIL;
}
struct uci_context * ctx = uci_alloc_context();
if (NULL == ctx)
printf("setWirelessCfgValue uci_alloc_context error\n");
int ret = 0;
#if 0
struct uci_ptr ptr;
memset(&ptr, 0, sizeof(ptr));
ptr.package = "wireless",
ptr.section = "@wifi-iface[0]",
ptr.option = name,
ptr.value = value,
#else
struct uci_ptr ptr;
memset(&ptr, 0, sizeof(ptr));
char uciOption[128];
memset(uciOption, 0, sizeof(uciOption));
snprintf(uciOption, sizeof(uciOption)-1, "wireless.@wifi-iface[0].%s", name);
printf("uci_lookup_ptr %s\n", uciOption);
if(UCI_OK != uci_lookup_ptr(ctx, &ptr, uciOption, true))
{
uci_perror(ctx, "no found!\n");
return RC_PROC_FAIL;
}
printf("uci_lookup_ptr ok: %s.%s.%s\n",
ptr.package, ptr.section, ptr.option);
ptr.value = value;
#endif
printf("change cfg: %s.%s.%s, value(%s)\n",
ptr.package, ptr.section, ptr.option, ptr.value);
ret = uci_set(ctx,&ptr);
printf("uci_set ret(%d)\n", ret);
if (0 == ret){
ret = uci_commit(ctx, &ptr.p, false);
printf("uci_commit ret(%d)\n", ret);
}
uci_unload(ctx,ptr.p);
uci_free_context(ctx);
printf("set wireless cfg end, %s: %s\n", name, value);
return RC_PROC_SUCC;
}
【main函数】
int main(int argc , char** argv)
{
char ssidStr[64];
memset(ssidStr, 0, sizeof(ssidStr));
getWirelessCfgValue("ssid",ssidStr, sizeof(ssidStr));
setWirelessCfgValue("ssid","miva_hello_TEST");
getWirelessCfgValue("ssid",ssidStr, sizeof(ssidStr));
return 0;
}
执行结果:
get wireless cfg ok, ssid: OpenWrt_7F3CD4
uci_lookup_ptr wireless.@wifi-iface[0].ssid
uci_lookup_ptr ok: wireless.cfg033579.ssid
change cfg: wireless.cfg033579.ssid, value(miva_hello_TEST)
uci_set ret(0)
uci_commit ret(0)
set wireless cfg end, ssid: miva_hello_TEST
get wireless cfg ok, ssid: miva_hello_TEST