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
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/junglefly/article/details/52415978