• C#基于inpoutx64读写ECRAM硬件信息


    inpoutx64.dll分享路径:

    链接:https://pan.baidu.com/s/1rOt0xtt9EcsrFQtf7S91ag 
    提取码:7om1 
     

    1.InpOutManager:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Runtime.InteropServices;
    5. using System.Text;
    6. using System.Threading.Tasks;
    7. namespace TestLEDWinFrm
    8. {
    9. public class InpOutManager
    10. {
    11. public bool IsInpOutDriverOpen { get; set; }//端口是否已打开
    12. public short PORT_INDEX { get; } = 0x66;//端口号
    13. public short EC_COMMAND_WRITE { get; } = 0X81;//EC命令写入
    14. public short PORT_DATA { get; } = 0X62;//端口数据
    15. public string Err { get; set; }//错误信息
    16. [DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen")]
    17. public static extern uint isInpOutDriverOpen();
    18. [DllImport("inpoutx64.dll", EntryPoint = "Out32")]
    19. public static extern void Out32(short PortAddress, short Data);
    20. [DllImport("inpoutx64.dll", EntryPoint = "Inp32")]
    21. public static extern byte Inp32(short PortAddress);
    22. //[DllImport("inpout32.dll")]
    23. //private static extern void DlPortWritePortUshort(short PortAddress, ushort Data);
    24. //[DllImport("inpout32.dll")]
    25. //private static extern ushort DlPortReadPortUshort(short PortAddress);
    26. //[DllImport("inpout32.dll")]
    27. //private static extern void DlPortWritePortUlong(int PortAddress, uint Data);
    28. //[DllImport("inpout32.dll")]
    29. //private static extern uint DlPortReadPortUlong(int PortAddress);
    30. //[DllImport("inpoutx64.dll")]
    31. //private static extern bool GetPhysLong(ref int PortAddress, ref uint Data);
    32. //[DllImport("inpoutx64.dll")]
    33. //private static extern bool SetPhysLong(ref int PortAddress, ref uint Data);
    34. //[DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen")]
    35. //private static extern UInt32 IsInpOutDriverOpen_x64();
    36. //[DllImport("inpoutx64.dll", EntryPoint = "Out32")]
    37. //private static extern void Out32_x64(short PortAddress, short Data);
    38. //[DllImport("inpoutx64.dll", EntryPoint = "Inp32")]
    39. //private static extern char Inp32_x64(short PortAddress);
    40. //[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUshort")]
    41. //private static extern void DlPortWritePortUshort_x64(short PortAddress, ushort Data);
    42. //[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUshort")]
    43. //private static extern ushort DlPortReadPortUshort_x64(short PortAddress);
    44. //[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUlong")]
    45. //private static extern void DlPortWritePortUlong_x64(int PortAddress, uint Data);
    46. //[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUlong")]
    47. //private static extern uint DlPortReadPortUlong_x64(int PortAddress);
    48. //[DllImport("inpoutx64.dll", EntryPoint = "GetPhysLong")]
    49. //private static extern bool GetPhysLong_x64(ref int PortAddress, ref uint Data);
    50. //[DllImport("inpoutx64.dll", EntryPoint = "SetPhysLong")]
    51. //private static extern bool SetPhysLong_x64(ref int PortAddress, ref uint Data);
    52. public InpOutManager()
    53. {
    54. this.IsInpOutDriverOpen=isInpOutDriverOpen()>0?true:false;
    55. }
    56. ///
    57. /// 读取端口数据
    58. ///
    59. ///
    60. ///
    61. public bool InputPortData(short PortAddress)
    62. {
    63. try
    64. {
    65. Inp32(PortAddress);
    66. return true;
    67. }
    68. catch(Exception ex)
    69. {
    70. this.Err = ex.Message;
    71. return false;
    72. }
    73. }
    74. //Out32(short PortAddress, short Data)
    75. public bool OutPortData(short PortAddress,short Data)
    76. {
    77. try
    78. {
    79. WaitECInputBufferEmpty();
    80. Out32(0x66,0x81);
    81. //Out32(PORT_INDEX,EC_COMMAND_WRITE);
    82. WaitECInputBufferEmpty();
    83. Out32(0x62,PortAddress);
    84. //Out32(PORT_DATA,PortAddress);
    85. WaitECInputBufferEmpty();
    86. Out32(0x62,Data);
    87. //Out32(PORT_DATA,Data);
    88. return true;
    89. }
    90. catch(Exception ex)
    91. {
    92. this.Err=ex.Message;
    93. return false;
    94. }
    95. }
    96. private void WaitECInputBufferEmpty()
    97. {
    98. var IBF = 2;
    99. do
    100. {
    101. IBF = Inp32(0x66)&2;
    102. //IBF = (PORT_INDEX)&2;
    103. }
    104. while (IBF == 2);
    105. }
    106. }
    107. }
    1. namespace TestLEDWinFrm
    2. {
    3. public partial class MainWinFrm : Form
    4. {
    5. InpOutManager inpOutManager;
    6. private System.Windows.Forms.Timer timer;
    7. private int randcount = 0;
    8. public MainWinFrm()
    9. {
    10. InitializeComponent();
    11. inpOutManager = new InpOutManager();
    12. //返还权限给EC
    13. //inpOutManager.OutPortData(0X32, 0X04);
    14. //inpOutManager.OutPortData(0X30, 0X21);
    15. }
    16. #region 所有LED灯点亮测试
    17. ///
    18. /// 所有LED灯点亮测试
    19. ///
    20. /// 次数
    21. public void AllLEDIllumeTest(int count)
    22. {
    23. int i = 0;
    24. while (i < count)
    25. {
    26. //点亮所有LED灯
    27. inpOutManager.OutPortData(0X32, 0X01);
    28. inpOutManager.OutPortData(0X30, 0X21);
    29. Thread.Sleep(1000);
    30. //熄灭所有LED
    31. inpOutManager.OutPortData(0X32, 0X02);
    32. inpOutManager.OutPortData(0X30, 0X21);
    33. Thread.Sleep(1000);
    34. //返还权限给EC
    35. inpOutManager.OutPortData(0X32, 0X04);
    36. inpOutManager.OutPortData(0X30, 0X21);
    37. i++;
    38. }
    39. }
    40. #endregion
    41. #region 电源LED点亮测试
    42. ///
    43. /// 电源LED点亮测试
    44. ///
    45. ///
    46. public void BatteryLedIllumTest(int count)
    47. {
    48. int i = 0;
    49. while (i < count)
    50. {
    51. //点亮Battery指示灯
    52. inpOutManager.OutPortData(0X32, 0X03);
    53. inpOutManager.OutPortData(0X30, 0X21);
    54. Thread.Sleep(1000);
    55. //熄灭所有指示灯
    56. inpOutManager.OutPortData(0X32, 0X02);
    57. inpOutManager.OutPortData(0X30, 0X21);
    58. Thread.Sleep(1000);
    59. //返还权限给EC
    60. inpOutManager.OutPortData(0X32, 0X04);
    61. inpOutManager.OutPortData(0X30, 0X21);
    62. i++;
    63. }
    64. }
    65. #endregion
    66. #region 历史记录
    67. private void btn_StartTest_Click(object sender, EventArgs e)
    68. {
    69. //inpOutManager.InputPortData(0X32);
    70. inpOutManager.OutPortData(0X32, 0X01);
    71. //inpOutManager.InputPortData(0X30);
    72. inpOutManager.OutPortData(0X30, 0X21);
    73. }
    74. private void button1_Click(object sender, EventArgs e)
    75. {
    76. //熄灭所有LED
    77. //inpOutManager.InputPortData(0X32);
    78. inpOutManager.OutPortData(0X32, 0X02);
    79. //inpOutManager.InputPortData(0X30);
    80. inpOutManager.OutPortData(0X30, 0X21);
    81. }
    82. private void button2_Click(object sender, EventArgs e)
    83. {
    84. //点亮第二个battery led
    85. //inpOutManager.InputPortData(0X32);
    86. inpOutManager.OutPortData(0X32, 0X03);
    87. //inpOutManager.InputPortData(0X30);
    88. inpOutManager.OutPortData(0X30, 0X21);
    89. //WinIoFunction.SetPhysValue("0X32", "0X03");
    90. //WinIoFunction.SetPhysValue("0X30", "0X21");
    91. }
    92. private void button3_Click(object sender, EventArgs e)
    93. {
    94. //点亮第二个battery led
    95. //inpOutManager.InputPortData(0X32);
    96. inpOutManager.OutPortData(0X32, 0X04);
    97. //inpOutManager.InputPortData(0X30);
    98. inpOutManager.OutPortData(0X30, 0X21);
    99. //WinIoFunction.SetPhysValue("0X32", "0X04");
    100. //WinIoFunction.SetPhysValue("0X30", "0X21");
    101. }
    102. #endregion
    103. #region 关闭
    104. private void btn_Close_Click(object sender, EventArgs e)
    105. {
    106. System.Environment.Exit(1);//程式退出返回1
    107. }
    108. #endregion
    109. #region 窗体移动
    110. private Point mouseOff;//鼠标移动位置变量
    111. private bool leftFlag;//标签是否为左键
    112. private void Frm_MouseDown(object sender, MouseEventArgs e)
    113. {
    114. if (e.Button == MouseButtons.Left)
    115. {
    116. mouseOff = new Point(-e.X, -e.Y); //得到变量的值
    117. leftFlag = true; //点击左键按下时标注为true;
    118. }
    119. }
    120. private void Frm_MouseMove(object sender, MouseEventArgs e)
    121. {
    122. if (leftFlag)
    123. {
    124. Point mouseSet = Control.MousePosition;
    125. mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
    126. Location = mouseSet;
    127. }
    128. }
    129. private void Frm_MouseUp(object sender, MouseEventArgs e)
    130. {
    131. if (leftFlag)
    132. {
    133. leftFlag = false;//释放鼠标后标注为false;
    134. }
    135. }
    136. #endregion
    137. #region 时间同步
    138. private void Timer_Tick(object sender, EventArgs e)
    139. {
    140. ts_DateTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    141. }
    142. #endregion
    143. #region 桌面加载
    144. private void MainWinFrm_Load(object sender, EventArgs e)
    145. {
    146. timer = new System.Windows.Forms.Timer();
    147. timer.Interval = 1000;
    148. timer.Tick += Timer_Tick!;
    149. timer.Enabled = true;
    150. }
    151. #endregion
    152. #region 移动鼠标坐标
    153. private void MainFrm_Move(object sender, EventArgs e)
    154. {
    155. // 获取当前鼠标的坐标
    156. Point cursorPosition = Cursor.Position;
    157. TS_X.Text = cursorPosition.X.ToString();
    158. TS_Y.Text = cursorPosition.Y.ToString();
    159. }
    160. #endregion
    161. #region 日志信息
    162. private void Loginfo(string log, bool isPass, int item = 0)
    163. {
    164. Invoke(() =>
    165. {
    166. ListViewItem li_er = new ListViewItem();
    167. li_er.SubItems[0].Text = log;
    168. li_er.SubItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
    169. li_er.ForeColor = isPass ? Color.Green : Color.Red;
    170. lv_log.Items.Add(li_er);
    171. if (item == 1)
    172. {
    173. //this.txt_ScanSn.Enabled = true;
    174. //this.Focus();
    175. btn_StartTest.Enabled = false;
    176. btn_Restart.Enabled = false;
    177. }
    178. else if (item == 2)//启动重测
    179. {
    180. //this.txt_ScanSn.Enabled = false;
    181. btn_Restart.Enabled = true;
    182. btn_StartTest.Enabled = false;
    183. }
    184. });
    185. }
    186. #endregion
    187. private void btn_StartTest_Click_1(object sender, EventArgs e)
    188. {
    189. btn_StartTest.Enabled = false;
    190. this.StartTest();//开始测试
    191. }
    192. #region 开始测试
    193. public void StartTest()
    194. {
    195. //lbl_TestItem.Text = "开始所有LED指示灯,随机闪烁次数测试!!";
    196. //lbl_TestImage.Image = Properties.Resources._1;
    197. //Random random = new Random();
    198. //this.randcount = random.Next(1, 5);
    199. //this.AllLEDIllumeTest(this.randcount);//随机数
    200. lbl_TestItem.Text = "开始电源充电指示灯,随机闪烁次数测试!!";
    201. lbl_TestImage.Image = Properties.Resources._2;
    202. Random random = new Random();
    203. this.randcount = random.Next(1, 5);
    204. this.BatteryLedIllumTest(this.randcount);//随机电源指示灯次数
    205. foreach (Control control in this.groupBox5.Controls)
    206. {
    207. if (control is Button)
    208. {
    209. ((Button)control).Enabled = true;
    210. }
    211. }
    212. }
    213. #endregion
    214. #region 初始化界面
    215. private void Winitial(bool IsEnable)
    216. {
    217. foreach (Control control in this.groupBox5.Controls)
    218. {
    219. if (control is Button)
    220. {
    221. ((Button)control).Enabled = IsEnable;
    222. }
    223. }
    224. lbl_TestImage.Image = null;
    225. lbl_TestItem.Text = "待开始电源指示灯测试!!";
    226. lbl_TestResult.Text = "待测试";
    227. lbl_TestImage.ForeColor = Color.SandyBrown;
    228. }
    229. #endregion
    230. #region 重测试
    231. private void btn_Restart_Click(object sender, EventArgs e)
    232. {
    233. this.Winitial(false);//初始化
    234. this.StartTest();//开始测试
    235. }
    236. #endregion
    237. bool isFirst = true;
    238. private void btn_num_Click(object sender, EventArgs e)
    239. {
    240. if (isFirst)
    241. {
    242. if (((Button)sender).Text == this.randcount.ToString())
    243. {
    244. this.lbl_TestResult.ForeColor = Color.Green;
    245. this.lbl_TestResult.Text = "PASS";
    246. //lbl_TestItem.Text = "开始电源充电指示灯,随机闪烁次数测试!!";
    247. //lbl_TestImage.Image = Properties.Resources._2;
    248. //Random random = new Random();
    249. //this.randcount = random.Next(1, 5);
    250. //this.BatteryLedIllumTest(this.randcount);//随机电源指示灯次数
    251. lbl_TestItem.Text = "开始所有LED指示灯,随机闪烁次数测试!!";
    252. lbl_TestImage.Image = Properties.Resources._1;
    253. Random random = new Random();
    254. this.randcount = random.Next(1, 5);
    255. this.AllLEDIllumeTest(this.randcount);//随机数
    256. isFirst = false;
    257. }
    258. else
    259. {
    260. this.lbl_TestResult.ForeColor = Color.Red;
    261. this.lbl_TestResult.Text = "FAIL";
    262. btn_Restart.Enabled = true;
    263. btn_StartTest.Enabled = false;
    264. isFirst = true;
    265. //this.Loginfo("所有LED点亮测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);
    266. this.Loginfo("电源指示灯测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);
    267. foreach (Control control in this.groupBox5.Controls)
    268. {
    269. if (control is Button)
    270. {
    271. ((Button)control).Enabled = false;
    272. }
    273. }
    274. }
    275. }
    276. else
    277. {
    278. if (((Button)sender).Text == this.randcount.ToString())
    279. {
    280. this.lbl_TestResult.ForeColor = Color.Green;
    281. this.lbl_TestResult.Text = "PASS";
    282. timer1.Enabled = true;
    283. }
    284. else
    285. {
    286. this.lbl_TestResult.ForeColor = Color.Red;
    287. this.lbl_TestResult.Text = "FAIL";
    288. btn_Restart.Enabled = true;
    289. btn_StartTest.Enabled = false;
    290. isFirst = true;
    291. //this.Loginfo("电源指示灯测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);
    292. this.Loginfo("所有LED点亮测试,闪烁次数与实际选择的序号不符,测试结果FAIL!!", false);
    293. foreach (Control control in this.groupBox5.Controls)
    294. {
    295. if (control is Button)
    296. {
    297. ((Button)control).Enabled = false;
    298. }
    299. }
    300. }
    301. }
    302. }
    303. private int index = 5;
    304. private void timer1_Tick(object sender, EventArgs e)
    305. {
    306. lbl_Exit.Visible = true;
    307. if (index > 0)
    308. {
    309. lbl_Exit.Text = index.ToString();
    310. index--;
    311. }
    312. else
    313. {
    314. System.Environment.Exit(0);
    315. }
    316. }
    317. }
    318. }

    UI展示:

  • 相关阅读:
    咬文嚼图式的介绍二叉树、B树/B-树
    【基于Arduino的垃圾分类装置开发教程四超声波检测】
    spark集群部署(第三弹)
    Redis分布式缓存(四)| 分片集群搭建、散列插槽、集群伸缩、故障转移、与SpringBoot集成分片集群
    R语言入门
    Seata学习
    drools执行完某个规则后终止别的规则执行
    C++知识黄金学习记录
    13、文本框和单选框
    Csgo 控制台——代码
  • 原文地址:https://blog.csdn.net/u013934107/article/details/134341134