inpoutx64.dll分享路径:
链接:https://pan.baidu.com/s/1rOt0xtt9EcsrFQtf7S91ag
提取码:7om1
1.InpOutManager:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace TestLEDWinFrm
{public class InpOutManager{public bool IsInpOutDriverOpen { get; set; }//端口是否已打开public short PORT_INDEX { get; } = 0x66;//端口号public short EC_COMMAND_WRITE { get; } = 0X81;//EC命令写入public short PORT_DATA { get; } = 0X62;//端口数据public string Err { get; set; }//错误信息[DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen")]public static extern uint isInpOutDriverOpen();[DllImport("inpoutx64.dll", EntryPoint = "Out32")]public static extern void Out32(short PortAddress, short Data);[DllImport("inpoutx64.dll", EntryPoint = "Inp32")]public static extern byte Inp32(short PortAddress);//[DllImport("inpout32.dll")]//private static extern void DlPortWritePortUshort(short PortAddress, ushort Data);//[DllImport("inpout32.dll")]//private static extern ushort DlPortReadPortUshort(short PortAddress);//[DllImport("inpout32.dll")]//private static extern void DlPortWritePortUlong(int PortAddress, uint Data);//[DllImport("inpout32.dll")]//private static extern uint DlPortReadPortUlong(int PortAddress);//[DllImport("inpoutx64.dll")]//private static extern bool GetPhysLong(ref int PortAddress, ref uint Data);//[DllImport("inpoutx64.dll")]//private static extern bool SetPhysLong(ref int PortAddress, ref uint Data);//[DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen")]//private static extern UInt32 IsInpOutDriverOpen_x64();//[DllImport("inpoutx64.dll", EntryPoint = "Out32")]//private static extern void Out32_x64(short PortAddress, short Data);//[DllImport("inpoutx64.dll", EntryPoint = "Inp32")]//private static extern char Inp32_x64(short PortAddress);//[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUshort")]//private static extern void DlPortWritePortUshort_x64(short PortAddress, ushort Data);//[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUshort")]//private static extern ushort DlPortReadPortUshort_x64(short PortAddress);//[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUlong")]//private static extern void DlPortWritePortUlong_x64(int PortAddress, uint Data);//[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUlong")]//private static extern uint DlPortReadPortUlong_x64(int PortAddress);//[DllImport("inpoutx64.dll", EntryPoint = "GetPhysLong")]//private static extern bool GetPhysLong_x64(ref int PortAddress, ref uint Data);//[DllImport("inpoutx64.dll", EntryPoint = "SetPhysLong")]//private static extern bool SetPhysLong_x64(ref int PortAddress, ref uint Data);public InpOutManager(){this.IsInpOutDriverOpen=isInpOutDriverOpen()>0?true:false;}/// <summary>/// 读取端口数据/// </summary>/// <param name="PortAddress"></param>/// <returns></returns>public bool InputPortData(short PortAddress){try{Inp32(PortAddress);return true;}catch(Exception ex){this.Err = ex.Message;return false;}}//Out32(short PortAddress, short Data)public bool OutPortData(short PortAddress,short Data){try{WaitECInputBufferEmpty();Out32(0x66,0x81);//Out32(PORT_INDEX,EC_COMMAND_WRITE);WaitECInputBufferEmpty();Out32(0x62,PortAddress);//Out32(PORT_DATA,PortAddress);WaitECInputBufferEmpty();Out32(0x62,Data);//Out32(PORT_DATA,Data);return true;}catch(Exception ex){this.Err=ex.Message;return false;}}private void WaitECInputBufferEmpty(){var IBF = 2;do{IBF = Inp32(0x66)&2;//IBF = (PORT_INDEX)&2;}while (IBF == 2);}}
}
namespace TestLEDWinFrm
{public partial class MainWinFrm : Form{InpOutManager inpOutManager;private System.Windows.Forms.Timer timer;private int randcount = 0;public MainWinFrm(){InitializeComponent();inpOutManager = new InpOutManager();//返还权限给EC//inpOutManager.OutPortData(0X32, 0X04);//inpOutManager.OutPortData(0X30, 0X21);}#region 所有LED灯点亮测试/// <summary>/// 所有LED灯点亮测试/// </summary>/// <param name="count">次数</param>public void AllLEDIllumeTest(int count){int i = 0;while (i < count){//点亮所有LED灯inpOutManager.OutPortData(0X32, 0X01);inpOutManager.OutPortData(0X30, 0X21);Thread.Sleep(1000);//熄灭所有LEDinpOutManager.OutPortData(0X32, 0X02);inpOutManager.OutPortData(0X30, 0X21);Thread.Sleep(1000);//返还权限给ECinpOutManager.OutPortData(0X32, 0X04);inpOutManager.OutPortData(0X30, 0X21);i++;}}#endregion#region 电源LED点亮测试/// <summary>/// 电源LED点亮测试/// </summary>/// <param name="count"></param>public void BatteryLedIllumTest(int count){int i = 0;while (i < count){//点亮Battery指示灯inpOutManager.OutPortData(0X32, 0X03);inpOutManager.OutPortData(0X30, 0X21);Thread.Sleep(1000);//熄灭所有指示灯inpOutManager.OutPortData(0X32, 0X02);inpOutManager.OutPortData(0X30, 0X21);Thread.Sleep(1000);//返还权限给ECinpOutManager.OutPortData(0X32, 0X04);inpOutManager.OutPortData(0X30, 0X21);i++;}}#endregion#region 历史记录private void btn_StartTest_Click(object sender, EventArgs e){//inpOutManager.InputPortData(0X32);inpOutManager.OutPortData(0X32, 0X01);//inpOutManager.InputPortData(0X30);inpOutManager.OutPortData(0X30, 0X21);}private void button1_Click(object sender, EventArgs e){//熄灭所有LED//inpOutManager.InputPortData(0X32);inpOutManager.OutPortData(0X32, 0X02);//inpOutManager.InputPortData(0X30);inpOutManager.OutPortData(0X30, 0X21);}private void button2_Click(object sender, EventArgs e){//点亮第二个battery led//inpOutManager.InputPortData(0X32);inpOutManager.OutPortData(0X32, 0X03);//inpOutManager.InputPortData(0X30);inpOutManager.OutPortData(0X30, 0X21);//WinIoFunction.SetPhysValue("0X32", "0X03");//WinIoFunction.SetPhysValue("0X30", "0X21");}private void button3_Click(object sender, EventArgs e){//点亮第二个battery led//inpOutManager.InputPortData(0X32);inpOutManager.OutPortData(0X32, 0X04);//inpOutManager.InputPortData(0X30);inpOutManager.OutPortData(0X30, 0X21);//WinIoFunction.SetPhysValue("0X32", "0X04");//WinIoFunction.SetPhysValue("0X30", "0X21");}#endregion#region 关闭private void btn_Close_Click(object sender, EventArgs e){System.Environment.Exit(1);//程式退出返回1}#endregion#region 窗体移动private Point mouseOff;//鼠标移动位置变量private bool leftFlag;//标签是否为左键private void Frm_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){mouseOff = new Point(-e.X, -e.Y); //得到变量的值leftFlag = true; //点击左键按下时标注为true;}}private void Frm_MouseMove(object sender, MouseEventArgs e){if (leftFlag){Point mouseSet = Control.MousePosition;mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置Location = mouseSet;}}private void Frm_MouseUp(object sender, MouseEventArgs e){if (leftFlag){leftFlag = false;//释放鼠标后标注为false;}}#endregion#region 时间同步private void Timer_Tick(object sender, EventArgs e){ts_DateTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");}#endregion#region 桌面加载private void MainWinFrm_Load(object sender, EventArgs e){timer = new System.Windows.Forms.Timer();timer.Interval = 1000;timer.Tick += Timer_Tick!;timer.Enabled = true;}#endregion#region 移动鼠标坐标private void MainFrm_Move(object sender, EventArgs e){// 获取当前鼠标的坐标Point cursorPosition = Cursor.Position;TS_X.Text = cursorPosition.X.ToString();TS_Y.Text = cursorPosition.Y.ToString();}#endregion#region 日志信息private void Loginfo(string log, bool isPass, int item = 0){Invoke(() =>{ListViewItem li_er = new ListViewItem();li_er.SubItems[0].Text = log;li_er.SubItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));li_er.ForeColor = isPass ? Color.Green : Color.Red;lv_log.Items.Add(li_er);if (item == 1){//this.txt_ScanSn.Enabled = true;//this.Focus();btn_StartTest.Enabled = false;btn_Restart.Enabled = false;}else if (item == 2)//启动重测{//this.txt_ScanSn.Enabled = false;btn_Restart.Enabled = true;btn_StartTest.Enabled = false;}});}#endregionprivate void btn_StartTest_Click_1(object sender, EventArgs e){btn_StartTest.Enabled = false;this.StartTest();//开始测试}#region 开始测试public void StartTest(){//lbl_TestItem.Text = "开始所有LED指示灯,随机闪烁次数测试!!";//lbl_TestImage.Image = Properties.Resources._1;//Random random = new Random();//this.randcount = random.Next(1, 5);//this.AllLEDIllumeTest(this.randcount);//随机数lbl_TestItem.Text = "开始电源充电指示灯,随机闪烁次数测试!!";lbl_TestImage.Image = Properties.Resources._2;Random random = new Random();this.randcount = random.Next(1, 5);this.BatteryLedIllumTest(this.randcount);//随机电源指示灯次数foreach (Control control in this.groupBox5.Controls){if (control is Button){((Button)control).Enabled = true;}}}#endregion#region 初始化界面private void Winitial(bool IsEnable){foreach (Control control in this.groupBox5.Controls){if (control is Button){((Button)control).Enabled = IsEnable;}}lbl_TestImage.Image = null;lbl_TestItem.Text = "待开始电源指示灯测试!!";lbl_TestResult.Text = "待测试";lbl_TestImage.ForeColor = Color.SandyBrown;}#endregion#region 重测试private void btn_Restart_Click(object sender, EventArgs e){this.Winitial(false);//初始化this.StartTest();//开始测试}#endregionbool isFirst = true;private void btn_num_Click(object sender, EventArgs e){if (isFirst){if (((Button)sender).Text == this.randcount.ToString()){this.lbl_TestResult.ForeColor = Color.Green;this.lbl_TestResult.Text = "PASS";//lbl_TestItem.Text = "开始电源充电指示灯,随机闪烁次数测试!!";//lbl_TestImage.Image = Properties.Resources._2;//Random random = new Random();//this.randcount = random.Next(1, 5);//this.BatteryLedIllumTest(this.randcount);//随机电源指示灯次数lbl_TestItem.Text = "开始所有LED指示灯,随机闪烁次数测试!!";lbl_TestImage.Image = Properties.Resources._1;Random random = new Random();this.randcount = random.Next(1, 5);this.AllLEDIllumeTest(this.randcount);//随机数isFirst = false;}else{this.lbl_TestResult.ForeColor = Color.Red;this.lbl_TestResult.Text = "FAIL";btn_Restart.Enabled = true;btn_StartTest.Enabled = false;isFirst = true;//this.Loginfo("所有LED点亮测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);this.Loginfo("电源指示灯测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);foreach (Control control in this.groupBox5.Controls){if (control is Button){((Button)control).Enabled = false;}}}}else{if (((Button)sender).Text == this.randcount.ToString()){this.lbl_TestResult.ForeColor = Color.Green;this.lbl_TestResult.Text = "PASS";timer1.Enabled = true;}else{this.lbl_TestResult.ForeColor = Color.Red;this.lbl_TestResult.Text = "FAIL";btn_Restart.Enabled = true;btn_StartTest.Enabled = false;isFirst = true;//this.Loginfo("电源指示灯测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);this.Loginfo("所有LED点亮测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);foreach (Control control in this.groupBox5.Controls){if (control is Button){((Button)control).Enabled = false;}}}}}private int index = 5;private void timer1_Tick(object sender, EventArgs e){lbl_Exit.Visible = true;if (index > 0){lbl_Exit.Text = index.ToString();index--;}else{System.Environment.Exit(0);}}}
}
UI展示: