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}