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

    文章

    6087

    浏览量

    35672
收藏 人收藏

    评论

    相关推荐

    龙芯中科荣获2024年度信息技术应用创新工作委员会卓越贡献成员单位

    近日,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称“信工委会”)在北京召开2024年度工作总结座谈会暨信“大比武”总结大会。中国工程院院士、信
    的头像 发表于 01-23 10:50 210次阅读

    芯盛智能荣获2024年信息技术应用创新工作委员会卓越贡献成员单位

    日前,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称 “信工委会”)2024 年度总结座谈会于北京隆重举行。此次会议对在信工作中作出突出贡献的成员单位予以表彰。江苏
    的头像 发表于 01-20 09:56 191次阅读

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 230次阅读

    有方科技参编的信息技术团体标准发布

    近日,有方科技参编的《信息技术产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息技术产品供应链成熟度 共性指标 第2部分:技术掌控评价》《信息技术产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 272次阅读

    龙芯中科助力2024首届教育信息技术应用创新大赛成功举办

    近日,2024首届教育信息技术应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育技术协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信
    的头像 发表于 12-19 17:02 298次阅读

    拓维信息参与牵头组建!长沙新一代信息技术产教联合体正式获批

    的长沙新一代信息技术产教联合体成功获批,为长沙市信息技术产业发展注入了新的活力。图/《2024年长沙市市级市域产教联合体名单》长沙新一代信息技术产教联合体将依托龙头企
    的头像 发表于 12-07 01:06 511次阅读
    拓维<b class='flag-5'>信息</b>参与牵头组建!长沙新一代<b class='flag-5'>信息技术</b>产教联合体正式获批

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 574次阅读

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 540次阅读

    梯度科技入选2023年信息技术应用创新解决方案名单

    日前,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)在天津举办2024信息技术应用创新发展大会暨解决方案应用推广大会。会上正式
    的头像 发表于 09-09 16:29 507次阅读

    中软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,中软国际协办的,2024年大连市信息技术应用创新产业发展大会
    的头像 发表于 08-27 16:49 987次阅读

    兆芯金融方案入选工信部2023年信息技术应用创新典型解决方案

    近日,由工信部网络安全产业发展中心等主办的2024信息技术应用创新发展大会暨解决方案应用推广大会在天津、浙江、福建、山东四地联动同步召开,会上公布了2023年信息技术应用创新解决方案征集遴选结果。兆
    的头像 发表于 08-05 16:12 749次阅读

    大华股份网络摄像机获得信息技术安全评估通用标准EAL 3+证书

    近日,大华股份网络摄像机系列产品通过SGS Brightsight实验室全方位评估和验证,获得信息技术安全评估通用标准(CC,Common Criteria)EAL 3+证书。     CC
    的头像 发表于 07-05 17:26 1325次阅读

    芯盾时代中标西安西热电站信息技术有限公司!

    芯盾时代中标西安西热电站信息技术有限公司!芯盾时代基于完整的身份安全产品体系,增强客户的业务系统、网络设备和安全设备等认证安全强度
    的头像 发表于 04-09 11:32 597次阅读

    龙芯中科三项信方案入围工信部2023年信息技术应用创新应用示范案例名单

    近日,工业和信息化部通报了2023年信息技术应用创新解决方案征集遴选结果,本次共评选出典型解决方案173个、应用示范案例83个、单项创新案例64个。
    的头像 发表于 03-07 16:45 1041次阅读
    龙芯中科三项信<b class='flag-5'>创</b>方案入围工信部2023年<b class='flag-5'>信息技术</b>应用创新应用示范案例名单

    RX78M组 EtherCAT ETG.5003示例程序固件信息技术

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息技术.pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例程序固件<b class='flag-5'>信息技术</b>