| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace PTMedicalInsurance.Business.MetalKeyboard.JustTideEPP
- {
- /// <summary>
- /// JustTide 金属密码键盘驱动接口封装类
- /// </summary>
- public class JustTideEPPDrv
- {
- // 指定 DLL 名称(确保 DLL 在程序运行目录或系统路径中)
- private const string DllName = "JustTideEPPDrv.dll";
- // ===================================================================
- // 5.1.1 OpenCom - 打开串口
- // ===================================================================
- /// <summary>
- /// 打开通讯端口,使键盘可以进行通讯。
- /// </summary>
- /// <param name="iPort">串口号:1=COM1, 2=COM2, ..., 9=COM9</param>
- /// <param name="lBaud">波特率:4800, 9600, 19200, 57600, 115200</param>
- /// <returns>成功返回 0,否则返回 -2</returns>
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall)]
- public static extern short OpenCom(short iPort, int lBaud); // long 在 C# 中对应 int (32位)
- // ===================================================================
- // 5.1.2 CloseCom - 关闭串口
- // ===================================================================
- /// <summary>
- /// 关闭通讯端口,停止对键盘的通讯。
- /// </summary>
- /// <returns>成功返回 0,否则返回错误码</returns>
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall)]
- public static extern short CloseCom();
- // ===================================================================
- // 5.1.3 PinInitialization - 密码键盘初始化
- // ===================================================================
- /// <summary>
- /// 初始化密码键盘。
- /// </summary>
- /// <param name="iInitMode">
- /// 初始化模式:
- /// 0: 初始化键盘,不清除密钥
- /// 1: 初始化键盘,清除所有密钥,恢复出厂设置
- /// </param>
- /// <returns>成功返回 0,否则返回错误码</returns>
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall)]
- public static extern short PinInitialization(short iInitMode);
- // ===================================================================
- // 5.1.4 PinReadVersion - 读取版本信息
- // ===================================================================
- /// <summary>
- /// 读取密码键盘的版本信息、序列号和描述代码。
- /// </summary>
- /// <param name="cpVersion">输出:版本信息 (16 字节 ASCII)</param>
- /// <param name="cpSN">输出:生产序列号 (8 字节 BCD + 4 字节填充或芯片编号)</param>
- /// <param name="cpRechang">输出:描述代码 (2 字节,如充电时间)</param>
- /// <returns>成功返回 0,否则返回错误码</returns>
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
- public static extern short PinReadVersion(
- [Out] StringBuilder cpVersion,
- [Out] StringBuilder cpSN,
- [Out] StringBuilder cpRechang);
- // ===================================================================
- // 可选:定义返回值常量(根据文档补充)
- // ===================================================================
- public const short SUCCESS = 0;
- public const short ERROR_OPEN_COM = -2;
- // 注意:实际错误码需参考“函数返回表”(文档中未提供完整表)
- /// <summary>
- /// 发送多功能控制命令(开关键盘、声音、设置模式等)
- /// </summary>
- /// <param name="iValue">控制命令值(详见文档 CTL 表)</param>
- /// <returns>成功返回 0,否则返回错误码</returns>
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall)]
- public static extern short OpenKeyVoic(short iValue);
- // ===================================================================
- // 便捷方法
- // ===================================================================
- /// <summary>
- /// 开启键盘(带声音)
- /// </summary>
- public static short EnableKeyboard() => OpenKeyVoic((short)KeyControlCommand.TurnOnKeyboardAndSound);
- /// <summary>
- /// 关闭键盘(静音)
- /// </summary>
- public static short DisableKeyboard() => OpenKeyVoic((short)KeyControlCommand.TurnOffKeyboardAndSound);
- /// <summary>
- /// 打开夜视灯(如支持)
- /// </summary>
- public static short TurnOnNightLight() => OpenKeyVoic((short)KeyControlCommand.TurnOnNightVisionLight);
- /// <summary>
- /// 关闭夜视灯(如支持)
- /// </summary>
- public static short TurnOffNightLight() => OpenKeyVoic((short)KeyControlCommand.TurnOffNightVisionLight);
- /// <summary>
- /// 设置通信编码模式:0-9加30H, A-F加37H
- /// </summary>
- public static short SetHexEncoding() => OpenKeyVoic((short)KeyControlCommand.CommEncodingHex37H);
- /// <summary>
- /// 从密码键盘接收一个按键字符(阻塞式,带超时)
- /// </summary>
- /// <param name="cpKey">输出:接收到的字符(ASCII)</param>
- /// <param name="iTimeOut">超时时间(毫秒)</param>
- /// <returns>成功返回 0;超时或错误返回非 0 值</returns>
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall)]
- public static extern short PinReportPressed(ref char cpKey, short iTimeOut);
-
- }
- // ===================================================================
- // 枚举:常用控制命令(便于使用)
- // ===================================================================
- public enum KeyControlCommand : short
- {
- /// <summary>
- /// 关闭键盘 + 关闭蜂鸣声(非固化)
- /// </summary>
- TurnOffKeyboardAndSound = 0x00,
- /// <summary>
- /// 打开键盘 + 关闭蜂鸣声(非固化)
- /// </summary>
- TurnOnKeyboardMuteSound = 0x01,
- /// <summary>
- /// 关闭键盘 + 打开蜂鸣声(非固化)
- /// </summary>
- TurnOffKeyboardOnlySound = 0x02,
- /// <summary>
- /// 打开键盘 + 打开蜂鸣声(非固化,正常模式)
- /// </summary>
- TurnOnKeyboardAndSound = 0x03,
- /// <summary>
- /// IC卡使用 02 头命令(固化,默认)
- /// </summary>
- ICCardUse02Header = 0x04,
- /// <summary>
- /// IC卡使用 ESC(1B) 头命令(固化)
- /// </summary>
- ICCardUseEscHeader = 0x05,
- /// <summary>
- /// 打开夜视灯(非固化,需硬件支持)
- /// </summary>
- TurnOnNightVisionLight = 0x06,
- /// <summary>
- /// 关闭夜视灯(非固化,需硬件支持)
- /// </summary>
- TurnOffNightVisionLight = 0x07,
- /// <summary>
- /// 命令尾不加 03h(固化)
- /// </summary>
- CommandTailNo03 = 0x08,
- /// <summary>
- /// 命令尾加 03h(固化)
- /// </summary>
- CommandTailWith03 = 0x09,
- /// <summary>
- /// 更正键:删除所有已输入字符(固化,默认)
- /// </summary>
- CorrectKeyDeleteAll = 0x14, // 20
- /// <summary>
- /// 更正键:删除一个字符(固化)
- /// </summary>
- CorrectKeyDeleteOne = 0x15, // 21
- /// <summary>
- /// 通信:拆分后全加 30H(固化)
- /// </summary>
- CommEncodingAdd30H = 0x1E, // 30
- /// <summary>
- /// 通信:0-9加30H, A-F加37H(固化)
- /// </summary>
- CommEncodingHex37H = 0x25, // 37
- // 波特率设置(0x41 ~ 0x48)
- SetBaudRate1200 = 0x41,
- SetBaudRate2400 = 0x42,
- SetBaudRate4800 = 0x43,
- SetBaudRate9600 = 0x44,
- SetBaudRate19200 = 0x45,
- SetBaudRate38400 = 0x46,
- SetBaudRate57600 = 0x47,
- SetBaudRate115200 = 0x48,
- }
- }
|