Void NDKTask(UArg a0, UArg a1) { int rc; // 初始化操作系统环境 // 必须在使用 NDK 之前最先调用 rc = NC_SystemOpen(NC_PRIORITY_LOW, NC_OPMODE_INTERRUPT); if(rc) { printf("NC_SystemOpen Failed (%d)\n", rc); for(;;); } // 创建新的配置 HANDLE hCfg; hCfg = CfgNew(); if(!hCfg) { printf("Unable to create configuration\n"); goto Exit; } // 配置主机名 if(strlen( DomainName ) >= CFG_DOMAIN_MAX || strlen( HostName ) >= CFG_HOSTNAME_MAX) { printf("Names too long\n"); goto Exit; } // 添加全局主机名到 hCfg(对所有连接域有效) CfgAddEntry(hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_HOSTNAME, 0, strlen(HostName), (UINT8 *)HostName, 0); { CI_IPNET NA; CI_ROUTE RT; IPN IPTmp; // 配置 IP bzero(&NA, sizeof(NA)); NA.IPAddr = inet_addr(StaticIPAddr); NA.IPMask = inet_addr(LocalIPMask); strcpy(NA.Domain, DomainName); NA.NetType = 0; // 添加地址到接口 1 CfgAddEntry(hCfg, CFGTAG_IPNET, 1, 0, sizeof(CI_IPNET), (UINT8 *)&NA, 0); // 配置 默认网关 bzero(&RT, sizeof(RT)); RT.IPDestAddr = 0; RT.IPDestMask = 0; RT.IPGateAddr = inet_addr(GatewayIP); // 配置 路由 CfgAddEntry(hCfg, CFGTAG_ROUTE, 0, 0, sizeof(CI_ROUTE), (UINT8 *)&RT, 0); // 配置 DNS 服务器 IPTmp = inet_addr(DNSServer); if(IPTmp) CfgAddEntry(hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_DOMAINNAMESERVER, 0, sizeof(IPTmp), (UINT8 *)&IPTmp, 0); } // 配置协议栈选项 // 显示警告消息 rc = DBG_INFO; CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_DBGPRINTLEVEL, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&rc, 0); rc = 8192; CfgAddEntry(hCfg, CFGTAG_IP, CFGITEM_IP_SOCKTCPTXBUF, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&rc, 0); // TCP 接收 buffer 大小(copy 模式) rc = 8192; CfgAddEntry(hCfg, CFGTAG_IP, CFGITEM_IP_SOCKTCPRXBUF, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&rc, 0); // TCP 接收限制大小(non-copy 模式) rc = 8192; CfgAddEntry(hCfg, CFGTAG_IP, CFGITEM_IP_SOCKTCPRXLIMIT, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&rc, 0); // UDP 接收限制大小 rc = 8192; CfgAddEntry(hCfg, CFGTAG_IP, CFGITEM_IP_SOCKUDPRXLIMIT, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&rc, 0); // 使用当前配置启动 NDK 网络 do { rc = NC_NetStart(hCfg, NetworkOpen, NetworkClose, NetworkIPAddr); } while(rc > 0); // 停止消息 printf("NDK Task has been stop(Return Code %d)!\r\n", rc); // 删除配置 CfgFree(hCfg); // 退出 goto Exit; Exit: NC_SystemClose(); TaskExit(); }