skf_api/native/device.rs
1//! 设备管理接口
2//! - SKF_WaitForDevEvent
3//! - SKF_CancelWaitForDevEvent
4//! - SKF_EnumDev
5//! - SKF_ConnectDev
6//! - SKF_DisconnectDev
7//! - SKF_GetDevState
8//! - SKF_SetLabel
9//! - SKF_GetDevInfo
10//! - SKF_LockDev
11//! - SKF_UnlockDev
12//! - SKF_Transmit
13//!
14//! see [GM/T 0016-2012](https://github.com/guanzhi/GM-Standards/blob/master/GMT%E5%AF%86%E7%A0%81%E8%A1%8C%E6%A0%87/GMT%200017-2012%20%E6%99%BA%E8%83%BD%E5%AF%86%E7%A0%81%E9%92%A5%E5%8C%99%E5%AF%86%E7%A0%81%E5%BA%94%E7%94%A8%E6%8E%A5%E5%8F%A3%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F%E8%A7%84%E8%8C%83.PDF)
15
16use crate::native::types::{DeviceInfo, BOOL, BYTE, HANDLE, LPSTR, ULONG};
17
18#[allow(non_camel_case_types)]
19extern "C" {
20
21 /// 等待设备的插拔事件
22 ///
23 /// 备注: 该函数是阻塞调用
24 ///
25 /// [sz_dev_name] `[OUT]`返回发生事件的设备名称
26 ///
27 /// [dev_name_len] `[IN,OUT]`输入/输出参数,当输入时表示缓冲区长度,输出时表示设备名称的有效长度,长度包含字符串结束符
28 ///
29 /// [event] `[OUT]`事件类型。1表示插入,2表示拔出
30 pub fn SKF_WaitForDevEvent(
31 sz_dev_name: LPSTR,
32 dev_name_len: *mut ULONG,
33 event: *mut ULONG,
34 ) -> ULONG;
35
36 /// 取消等待设备插拔事件
37 pub fn SKF_CancelWaitForDevEvent() -> ULONG;
38
39 /// 获得当前系统中的设备列表
40 ///
41 /// [b_present] `[IN]`为TRUE表示取当前设备状态为存在的设备列表。为FALSE表示取当前驱动支持的设备列表
42 ///
43 /// [sz_name_list] `[OUT]`设备名称列表。如果该参数为NULL,将由 `size` 返回所需要的内存空间大小。每个设备的名称以单个`'\0'`结束,以双`'\0'`表示列表的结束
44 ///
45 /// [size] `[IN,OUT]`输入参数,输入设备名称列表的缓冲区长度,输出参数,返回szNameList所需要的空间大小
46 ///
47 pub fn SKF_EnumDev(b_present: BOOL, sz_name_list: LPSTR, size: *mut ULONG) -> ULONG;
48
49 /// 通过设备名称连接设备,返回设备的句柄
50 ///
51 /// [sz_name] `[IN]`设备名称
52 ///
53 /// [handle] `[OUT]`返回设备操作句柄
54 pub fn SKF_ConnectDev(sz_name: LPSTR, handle: *mut HANDLE) -> ULONG;
55
56 /// 断开一个已经连接的设备,并释放句柄。
57 ///
58 /// [handle] `[IN]`连接设备时返回的设备句柄
59 pub fn SKF_DisConnectDev(handle: HANDLE) -> ULONG;
60
61 /// 获取设备是否存在的状态
62 ///
63 /// [sz_dev_name] `[IN]`连接名称
64 ///
65 /// [dev_state] `[OUT]`返回设备状态
66 pub fn SKF_GetDevState(sz_dev_name: LPSTR, dev_state: *mut ULONG) -> ULONG;
67
68 /// 设置设备标签
69 ///
70 /// [handle] `[IN]`连接设备时返回的设备句柄
71 ///
72 /// [sz_label] `[OUT]`设备标签字符串。该字符串应小于32字节
73 pub fn SKF_SetLabel(handle: HANDLE, sz_label: LPSTR) -> ULONG;
74
75 /// 获取设备的一些特征信息,包括设备标签、厂商信息、支持的算法等
76 ///
77 /// [handle] `[IN]`连接设备时返回的设备句柄
78 ///
79 /// [dev_info] `[OUT]`返回设备信息
80 pub fn SKF_GetDevInfo(handle: HANDLE, dev_info: *mut DeviceInfo) -> ULONG;
81
82 /// 获得设备的独占使用权
83 ///
84 /// [handle] `[IN]`连接设备时返回的设备句柄
85 ///
86 /// [timeout] `[IN]`超时时间,单位为毫秒。如果为`0xFFFFFFFF`表示无限等待
87 pub fn SKF_LockDev(handle: HANDLE, timeout: ULONG) -> ULONG;
88
89 /// 释放对设备的独占使用权
90 ///
91 /// [handle] `[IN]`连接设备时返回的设备句柄
92 pub fn SKF_UnlockDev(handle: HANDLE) -> ULONG;
93
94 /// 设备命令传输
95 ///
96 /// [handle] `[IN]`连接设备时返回的设备句柄
97 ///
98 /// [command] `[IN]`设备命令
99 ///
100 /// [command_len] `[IN]`命令长度
101 ///
102 /// [data] `[OUT]`返回结果数据
103 ///
104 /// [data_len] `[IN,OUT]`输入时表示结果缓冲区长度,输出时表示结果缓冲区长度实际长度
105 pub fn SKF_Transmit(
106 handle: HANDLE,
107 command: *const BYTE,
108 command_len: ULONG,
109 data: *mut BYTE,
110 data_len: *mut ULONG,
111 ) -> ULONG;
112}