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

    文章

    6107

    浏览量

    36952
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    2025年11月13日-15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术
    的头像 发表于 11-21 16:23 597次阅读

    诚迈科技信电脑助力2025第二届教育信息技术应用创新大赛圆满收官

    11月15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术应用创新工作委
    的头像 发表于 11-17 17:58 348次阅读
    诚迈科技信<b class='flag-5'>创</b>电脑助力2025第二届教育<b class='flag-5'>信息技术</b>应用创新大赛圆满收官

    如何实现软件重置或 CPU 重置以使重置时间比硬件重置方法更短?

    如何实现软件重置或 CPU 重置,以使重置时间比硬件重置方法更短?
    发表于 08-28 07:45

    如何实现软件重置或 CPU 重置,以使重置时间比硬件重置方法更短?

    如何实现软件重置或 CPU 重置,以使重置时间比硬件重置方法更短?
    发表于 08-25 07:39

    易华录入选国家级信息技术应用创新典型解决方案

    近日,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)公布了“2024年信息技术应用创新解决方案”评选结果。易华录申报的“基于节
    的头像 发表于 08-07 15:35 1250次阅读

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 732次阅读

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 560次阅读

    DEKRA德凯成为沙特通信和信息技术设备技术法规认证机构

    近日,DEKRA德凯成功获得沙特标准、计量和质量组织(SASO)认可,正式成为沙特通信和信息技术设备技术法规(Technical Regulation for Communications
    的头像 发表于 07-15 14:27 733次阅读

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络
    的头像 发表于 06-13 10:06 6323次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    2025第二届教育信息技术应用创新大赛正式开赛

    为进一步落实建设网络强国和教育强国的战略部署,推动各级教育行政部门及高校信息技术应用创新能力提升,培养实战型创新人才。龙芯中科联合太初元碁、诚迈科技在2025第二届教育信息技术应用创新大赛共同发布
    的头像 发表于 05-13 16:21 1284次阅读

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

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

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

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

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

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

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

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

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

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