0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术WinCE重置网络的方法

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-04 11:37 次阅读

在实际应用中,复杂的网络状况可能让设备网络产生异常(比如IP冲突),从而无法正常网络通信。通过重启设备可以恢复网络,本文介绍另外一个方法,在应用层不断电的情况下快速重置网络,恢复网络通信

手动重置网络

进入板子控制面板->网络和拨号连接,可以看到板子现有网口的网络连接图标,下图以EM9287为例,EM9287有两个网口,分别为ENET1和ENET2。

右键点击需要重置的网口图标,先选择禁用,可以看到图标显示X,同时板子网络灯停止闪烁。

再次右键点击该图标,选择启用,图标恢复连接显示,可以观察到板子网络灯重新亮起。

代码重置网络

引用pw.h头文件,添加定义板子DEVICEIOCONTROL的相关宏定义。

#defineDD_NDIS_DEVICE_NAME TEXT("NDS0:")

#defineNDISPWR_DEVICE_NAME TEXT("NPW1:")

#define_NDIS_CONTROL_CODE(request,method) \

CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS)

#defineWINCE_IOCTL_START 8

#defineIOCTL_NDIS_BIND_ADAPTER _NDIS_CONTROL_CODE( WINCE_IOCTL_START+4, METHOD_OUT_DIRECT )

#defineIOCTL_NDIS_UNBIND_ADAPTER _NDIS_CONTROL_CODE( WINCE_IOCTL_START+5, METHOD_OUT_DIRECT )

#defineIOCTL_NDIS_GET_ADAPTER_BINDINGS _NDIS_CONTROL_CODE( WINCE_IOCTL_START+8, METHOD_OUT_DIRECT )

#define FSCTL_NDISPWR_BASE FILE_DEVICE_NETWORK

#define_NDISPWR_CTL_CODE(_Function, _Method, _Access) \

CTL_CODE(FSCTL_NDISPWR_BASE, _Function, _Method, _Access)

#defineIOCTL_NPW_SAVE_POWER_STATE \

_NDISPWR_CTL_CODE(0x200, METHOD_BUFFERED, FILE_ANY_ACCESS)

首先调用电源管理设备NPW,通知它关闭网口电源(这里以ENET1为例)

hNdisPwr = CreateFile(NDISPWR_DEVICE_NAME, 0, 0, NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, INVALID_HANDLE_VALUE);

SavePowerState.CePowerState = D4;

SavePowerState.pwcAdapterName = L”ENET1”;

bRet = DeviceIoControl(

hNdisPwr,

IOCTL_NPW_SAVE_POWER_STATE,

&SavePowerState,

sizeof(NDISPWR_SAVEPOWERSTATE),

NULL,

0x00,

NULL,

NULL);

CloseHandle(hNdisPwr);

如果网口有自己的电源管理,那么那么还应该调用以下代码。还是以ENET1为例,这里的字符串一定得是{98C5250D-C29A-4985-AE5F-AFE5367E5006}\ENET1这样的,并且需要两个\0结尾!

TCHAR szName[MAX_PATH]=L”ENET1”;

int nChars;

nChars = _sntprintf(

szName,

MAX_PATH-1,

_T("%s\\%s"),

PMCLASS_NDIS_MINIPORT,

wcName);

szName[MAX_PATH-1]=0;

DWORD dwRet;

dwRet = SetDevicePower(szName, POWER_NAME, D4);

通知系统UNBIND网口

BOOL DoNdisIOControl(DWORD dwCommand, LPVOID pInBuffer,

DWORD cbInBuffer, LPVOID pOutBuffer,

DWORD * pcbOutBuffer)

{

HANDLE hNdis;

BOOL fResult = FALSE;

hNdis = ::CreateFile(DD_NDIS_DEVICE_NAME, GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,

0, NULL);

if(INVALID_HANDLE_VALUE != hNdis)

{

fResult = DeviceIoControl(hNdis, dwCommand, pInBuffer, cbInBuffer,

pOutBuffer, (pcbOutBuffer ? *pcbOutBuffer : 0),

pcbOutBuffer, NULL);

CloseHandle(hNdis);

}

returnfResult;

}

bRet = DoNdisIOControl(

IOCTL_NDIS_UNBIND_ADAPTER,

wcName,

(_tcslen(wcName)+2) *sizeof(TCHAR),

NULL,

NULL);

查询网络,确认一下禁用网络是否成功

bRet = DoNdisIOControl(

IOCTL_NDIS_GET_ADAPTER_BINDINGS,

wcName,

(_tcslen(wcName)+1) *sizeof(TCHAR),

multiSz,

&cbBuffer);

return(multiSz[0] != L'\0');

让板子网口重新上电,这里上电不能直接使用D0,只能使用默认值PwrDeviceUnspecified

hNdisPwr = CreateFile(NDISPWR_DEVICE_NAME, 0, 0, NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, INVALID_HANDLE_VALUE);

SavePowerState.CePowerState = PwrDeviceUnspecified;

SavePowerState.pwcAdapterName = L”ENET1”;

bRet = DeviceIoControl(

hNdisPwr,

IOCTL_NPW_SAVE_POWER_STATE,

&SavePowerState,

sizeof(NDISPWR_SAVEPOWERSTATE),

NULL,

0x00,

NULL,

NULL);

CloseHandle(hNdisPwr);

TCHAR szName[MAX_PATH]=L”ENET1”;

int nChars;

nChars = _sntprintf(

szName,

MAX_PATH-1,

_T("%s\\%s"),

PMCLASS_NDIS_MINIPORT,

wcName);

szName[MAX_PATH-1]=0;

DWORD dwRet;

dwRet = SetDevicePower(szName, POWER_NAME, PwrDeviceUnspecified);

通知系统BIND网口

bRet = DoNdisIOControl(

IOCTL_NDIS_BIND_ADAPTER,

wcName,

(_tcslen(wcName)+2) *sizeof(TCHAR),

NULL,

NULL);

查询网络,确认一下网络启动是否成功

bRet = DoNdisIOControl(

IOCTL_NDIS_GET_ADAPTER_BINDINGS,

wcName,

(_tcslen(wcName)+1) *sizeof(TCHAR),

multiSz,

&cbBuffer);

return(multiSz[0] != L'\0');

例程里已经将以上代码封装到enet.h,使用以下代码可以简单重置网络

#include"enet.h"

Void ResetENET()

{

EnableENET(FALSE);

EnableENET(TRUE);

}

在重置网络前,建议先关闭该网口现有的socket连接

整个重置过程是通过电源管理将网口断电,然后通知系统将网络UNBIND。然后重新给网口上电,再通知系统将网络BIND。通过网络灯可以看到,硬件PHY是有复位的,即网络在硬件层进行了复位。文中提到的例程,可以通过联系英创工程师获得。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6063

    浏览量

    34596
收藏 人收藏

    评论

    相关推荐

    FTP连接被重置问题的解决方法与技巧!FTP服务器连接修复!

    FTP连接被重置问题的解决方法与技巧!FTP服务器连接修复! FTP(文件传输协议)是用于在计算机网络环境中进行文件传输的常用协议。然而,有时我们可能会遇到FTP连接被重置的问题,这会
    的头像 发表于 01-12 16:00 2295次阅读

    mysql密码忘了怎么重置

    mysql密码忘了怎么重置  MySQL是一种开源的关系型数据库管理系统,密码用于保护数据库的安全性和保密性。如果你忘记了MySQL的密码,可以通过以下几种方法进行重置方法一:使用
    的头像 发表于 12-27 16:51 824次阅读

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    集成电路是现代电子信息技术的基础

    集成电路是现代电子信息技术的基础 随着科技的不断发展,集成电路技术已成为现代电子信息技术的基础之一。它的应用范围已经涉及到电子、通信、计算机、军事等行业,已经为人们的生活和工作带来了极大的便利
    的头像 发表于 08-29 16:25 1256次阅读

    linux centos7中重置root密码的办法

    重置linuxroot密码的教程是在centos linux环境中进行的!不同版本的linux重置密码的方法是有一定的差别的!
    发表于 08-24 12:27 341次阅读
    linux centos7中<b class='flag-5'>重置</b>root密码的办法

    信息技术促使轨道交通全面升级

    有别于传统的铁公路系统,新型基础建设强调的是将新一代的信息技术纳入基建领域,在未来的交通系统中,智能化、信息化的轨道交通系统网络,搭配5G等技术的发展,将是实现智能城市轨道交通的主要驱
    的头像 发表于 08-21 11:11 461次阅读

    2023年国家级高职学校信息技术教师能力培训会圆满举行

    2023年国家级高职学校信息技术教师能力培训会圆满举行
    的头像 发表于 07-31 22:56 379次阅读
    2023年国家级高职学校<b class='flag-5'>信息技术</b>教师能力培训会圆满举行

    中科驭数成为证券基金行业信息技术应用创新知识库首批合作厂商!

    7月20日,证券基金行业信息技术应用 创新中心与中国信息通信研究院携手合作,正式上线了行业信息技术应用创新知识库, 旨在做好对行业信息技术应用创新工作的支撑,加强产业侧和行业机构之间的
    的头像 发表于 07-21 18:50 319次阅读
    中科驭数成为证券基金行业<b class='flag-5'>信息技术</b>应用创新知识库首批合作厂商!

    2023年中海达星推官系列直播再度启航,与您一起探讨空间信息技术

    信息技术
    中海达
    发布于 :2023年06月21日 11:45:49

    中科曙光参建国内首个信息技术领域产教融合共同体

    “新一代信息技术产业产教融合共同体”在京成立(简称“共同体”)。**该共同体是由中国电子学会联合国内信息技术行业重点职业院校与重点企业成立的。首批成员单位的11家新一代信息技术领域领先职业院校校长,以及9家行业知名企业领导共同出
    的头像 发表于 06-13 12:38 430次阅读

    如何重置ESP8266中包含的wifi信息

    再广播默认的 SSID,就好像它仍然处于连接状态,只是没有传输数据。 我的问题是:我将如何重置 8266 中包含的 wifi 信息?它确实有一个可访问的微型 USB 端口,我安装了 Arduino 软件
    发表于 06-01 13:38

    信息技术革命与网络空间(2)#网络空间安全

    网络安全通信网络
    学习硬声知识
    发布于 :2023年05月30日 19:56:22

    信息技术革命与网络空间(1)#网络空间安全

    网络安全通信网络
    学习硬声知识
    发布于 :2023年05月30日 19:55:49

    再获工信部认可!海泰方圆方案获评“2022年信息技术应用创新解决方案”

    近日,由工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)牵头开展的2022年信息技术应用创新解决方案(典型解决方案)评选结果正式
    的头像 发表于 05-26 16:11 376次阅读
    再获工信部认可!海泰方圆方案获评“2022年<b class='flag-5'>信息技术</b>应用创新解决方案”

    权威榜单发布!“2022-2023信息技术应用创新榜”隆重揭晓

    2023年5月8日,由信息化观察网、信息技术应用创新榜组委会组织发起的“2022-2023信息技术应用创新榜”评审结果正式公示。本次榜单征集旨在全面展示信创发展最新成果,遴选出信创细分领域创新
    的头像 发表于 05-09 09:40 833次阅读