• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SCSI Peripheral DDK
2
3
4## 概述
5
6SCSI Peripheral DDK是为开发者提供专门用于开发SCSI设备驱动程序的套件, 提供了初始化DDK、释放DDK、打开关闭设备、读写设备等接口,并声明了SCSI Peripheral DDK API所需的宏、枚举变量和数据结构,用于在应用层进行SCSI设备驱动的开发。
7
8**系统能力**:SystemCapability.Driver.SCSI.Extension
9
10**起始版本:** 18
11
12
13## 汇总
14
15
16### 文件
17
18| 名称 | 描述 |
19| -------- | -------- |
20| [scsi_peripheral_api.h](scsi__peripheral__api_8h.md) | 声明用于主机侧访问SCSI设备的SCSI Peripheral DDK接口。 |
21| [scsi_peripheral_types.h](scsi__peripheral__types_8h.md) | 提供在SCSI Peripheral DDK(驱动开发工具包)API中使用的枚举变量、结构体和宏。 |
22
23
24### 结构体
25
26| 名称 | 描述 |
27| -------- | -------- |
28| struct  [ScsiPeripheral_DeviceMemMap](_scsi_peripheral___device_mem_map.md) | 通过调用OH_ScsiPeripheral_CreateDeviceMemMap创建的设备内存映射。 使用该设备内存映射的缓冲区可以提供更好的性能。 |
29| struct  [ScsiPeripheral_IORequest](_scsi_peripheral___i_o_request.md) | 读/写操作的请求参数。 |
30| struct  [ScsiPeripheral_Request](_scsi_peripheral___request.md) | 请求参数结构体。 |
31| struct  [ScsiPeripheral_Response](_scsi_peripheral___response.md) | 响应参数结构体。 |
32| struct  [ScsiPeripheral_TestUnitReadyRequest](_scsi_peripheral___test_unit_ready_request.md) | 命令(test unit ready)的请求结构体。 |
33| struct  [ScsiPeripheral_InquiryRequest](_scsi_peripheral___inquiry_request.md) | SCSI命令(inquiry)的请求结构体。 |
34| struct  [ScsiPeripheral_InquiryInfo](_scsi_peripheral___inquiry_info.md) | SCSI inquiry 数据。 |
35| struct  [ScsiPeripheral_ReadCapacityRequest](_scsi_peripheral___read_capacity_request.md) | SCSI命令(read capacity)的请求结构体。 |
36| struct  [ScsiPeripheral_CapacityInfo](_scsi_peripheral___capacity_info.md) | SCSI read capacity 数据。 |
37| struct  [ScsiPeripheral_RequestSenseRequest](_scsi_peripheral___request_sense_request.md) | SCSI命令(request sense)的请求结构体。 |
38| struct  [ScsiPeripheral_BasicSenseInfo](_scsi_peripheral___basic_sense_info.md) | sense data的基本信息。 |
39| struct  [ScsiPeripheral_VerifyRequest](_scsi_peripheral___verify_request.md) | SCSI命令(verify)的请求结构体。 |
40
41
42### 宏定义
43
44| 名称 | 描述 |
45| -------- | -------- |
46| [SCSIPERIPHERAL_MIN_DESCRIPTOR_FORMAT_SENSE](#scsiperipheral_min_descriptor_format_sense)   8 | sense data描述符格式长度最小值。 |
47| [SCSIPERIPHERAL_MIN_FIXED_FORMAT_SENSE](#scsiperipheral_min_fixed_format_sense)   18 | sense data固定格式长度最小值。 |
48| [SCSIPERIPHERAL_MAX_CMD_DESC_BLOCK_LEN](#scsiperipheral_max_cmd_desc_block_len)   16 | 命令描述符块的最大长度。 |
49| [SCSIPERIPHERAL_MAX_SENSE_DATA_LEN](#scsiperipheral_max_sense_data_len)   252 | 在SCSI协议中,Sense Data(感应数据)的最大长度通常为252字节。 |
50| [SCSIPERIPHERAL_VENDOR_ID_LEN](#scsiperipheral_vendor_id_len)   8 | vendor id的最大长度。 |
51| [SCSIPERIPHERAL_PRODUCT_ID_LEN](#scsiperipheral_product_id_len)   16 | product id的最大长度。 |
52| [SCSIPERIPHERAL_PRODUCT_REV_LEN](#scsiperipheral_product_rev_len)   4 | 产品版本的最大长度。 |
53
54
55### 类型定义
56
57| 名称 | 描述 |
58| -------- | -------- |
59| typedef struct [ScsiPeripheral_Device](#scsiperipheral_device) [ScsiPeripheral_Device](#scsiperipheral_device) | 不透明的SCSI设备结构体。 |
60| typedef struct [ScsiPeripheral_DeviceMemMap](_scsi_peripheral___device_mem_map.md) [ScsiPeripheral_DeviceMemMap](#scsiperipheral_devicememmap) | 通过调用OH_ScsiPeripheral_CreateDeviceMemMap创建的设备内存映射。 使用该设备内存映射的缓冲区可以提供更好的性能。 |
61| typedef struct [ScsiPeripheral_IORequest](_scsi_peripheral___i_o_request.md) [ScsiPeripheral_IORequest](#scsiperipheral_iorequest) | 读/写操作的请求参数。 |
62| typedef struct [ScsiPeripheral_Request](_scsi_peripheral___request.md) [ScsiPeripheral_Request](#scsiperipheral_request) | 请求参数结构体。 |
63| typedef struct [ScsiPeripheral_Response](_scsi_peripheral___response.md) [ScsiPeripheral_Response](#scsiperipheral_response) | 响应参数结构体。 |
64| typedef struct [ScsiPeripheral_TestUnitReadyRequest](_scsi_peripheral___test_unit_ready_request.md) [ScsiPeripheral_TestUnitReadyRequest](#scsiperipheral_testunitreadyrequest) | 命令(test unit ready)的请求结构体。 |
65| typedef struct [ScsiPeripheral_InquiryRequest](_scsi_peripheral___inquiry_request.md) [ScsiPeripheral_InquiryRequest](#scsiperipheral_inquiryrequest) | SCSI命令(inquiry)的请求结构体。 |
66| typedef struct [ScsiPeripheral_InquiryInfo](_scsi_peripheral___inquiry_info.md) [ScsiPeripheral_InquiryInfo](#scsiperipheral_inquiryinfo) | SCSI inquiry 数据。 |
67| typedef struct [ScsiPeripheral_ReadCapacityRequest](_scsi_peripheral___read_capacity_request.md) [ScsiPeripheral_ReadCapacityRequest](#scsiperipheral_readcapacityrequest) | SCSI命令(read capacity)的请求结构体。 |
68| typedef struct [ScsiPeripheral_CapacityInfo](_scsi_peripheral___capacity_info.md) [ScsiPeripheral_CapacityInfo](#scsiperipheral_capacityinfo) | SCSI read capacity 数据。 |
69| typedef struct [ScsiPeripheral_RequestSenseRequest](_scsi_peripheral___request_sense_request.md) [ScsiPeripheral_RequestSenseRequest](#scsiperipheral_requestsenserequest) | SCSI命令(request sense)的请求结构体。 |
70| typedef struct [ScsiPeripheral_BasicSenseInfo](_scsi_peripheral___basic_sense_info.md) [ScsiPeripheral_BasicSenseInfo](#scsiperipheral_basicsenseinfo) | sense data的基本信息。 |
71| typedef struct [ScsiPeripheral_VerifyRequest](_scsi_peripheral___verify_request.md) [ScsiPeripheral_VerifyRequest](#scsiperipheral_verifyrequest) | SCSI命令(verify)的请求结构体。 |
72
73
74### 枚举
75
76| 名称 | 描述 |
77| -------- | -------- |
78| [ScsiPeripheral_DdkErrCode](#scsiperipheral_ddkerrcode) {<br/>SCSIPERIPHERAL_DDK_NO_PERM = 201, SCSIPERIPHERAL_DDK_INVALID_PARAMETER = 401, SCSIPERIPHERAL_DDK_SUCCESS = 31700000, SCSIPERIPHERAL_DDK_MEMORY_ERROR = 31700001, SCSIPERIPHERAL_DDK_INVALID_OPERATION = 31700002, SCSIPERIPHERAL_DDK_IO_ERROR = 31700003, SCSIPERIPHERAL_DDK_TIMEOUT = 31700004, SCSIPERIPHERAL_DDK_INIT_ERROR = 31700005, SCSIPERIPHERAL_DDK_SERVICE_ERROR = 31700006, SCSIPERIPHERAL_DDK_DEVICE_NOT_FOUND = 31700007<br/>} | SCSI Peripheral DDK错误码。 |
79| [ScsiPeripheral_Status](#scsiperipheral_status) {<br/>SCSIPERIPHERAL_STATUS_GOOD = 0x00, SCSIPERIPHERAL_STATUS_CHECK_CONDITION_NEEDED = 0x02, SCSIPERIPHERAL_STATUS_CONDITION_MET = 0x04, SCSIPERIPHERAL_STATUS_BUSY = 0x08, SCSIPERIPHERAL_STATUS_RESERVATION_CONFLICT = 0x18, SCSIPERIPHERAL_STATUS_TASK_SET_FULL = 0x28, SCSIPERIPHERAL_STATUS_ACA_ACTIVE = 0x30, SCSIPERIPHERAL_STATUS_TASK_ABORTED = 0x40<br/>} | 定义用于响应的SCSI状态。 |
80
81
82### 函数
83
84| 名称 | 描述 |
85| -------- | -------- |
86| int32_t [OH_ScsiPeripheral_Init](#oh_scsiperipheral_init) (void) | 初始化SCSI Peripheral DDK。 |
87| int32_t [OH_ScsiPeripheral_Release](#oh_scsiperipheral_release) (void) | 释放SCSI Peripheral DDK。 |
88| int32_t [OH_ScsiPeripheral_Open](#oh_scsiperipheral_open) (uint64_t deviceId, uint8_t interfaceIndex, [ScsiPeripheral_Device](#scsiperipheral_device) \*\*dev) | 打开deviceId和interfaceIndex指定的SCSI设备。 |
89| int32_t [OH_ScsiPeripheral_Close](#oh_scsiperipheral_close) ([ScsiPeripheral_Device](#scsiperipheral_device) \*\*dev) | 关闭SCSI设备。 |
90| int32_t [OH_ScsiPeripheral_TestUnitReady](#oh_scsiperipheral_testunitready) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_TestUnitReadyRequest](_scsi_peripheral___test_unit_ready_request.md) \*request, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 检查逻辑单元是否已经准备好。 |
91| int32_t [OH_ScsiPeripheral_Inquiry](#oh_scsiperipheral_inquiry) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_InquiryRequest](_scsi_peripheral___inquiry_request.md) \*request, [ScsiPeripheral_InquiryInfo](_scsi_peripheral___inquiry_info.md) \*inquiryInfo, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 查询SCSI设备的基本信息。 |
92| int32_t [OH_ScsiPeripheral_ReadCapacity10](#oh_scsiperipheral_readcapacity10) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_ReadCapacityRequest](_scsi_peripheral___read_capacity_request.md) \*request, [ScsiPeripheral_CapacityInfo](_scsi_peripheral___capacity_info.md) \*capacityInfo, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 获取SCSI设备的容量信息。 |
93| int32_t [OH_ScsiPeripheral_RequestSense](#oh_scsiperipheral_requestsense) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_RequestSenseRequest](_scsi_peripheral___request_sense_request.md) \*request, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 获取sense data(SCSI设备返回给主机的信息,用于报告设备的状态、错误信息以及诊断信息)。 |
94| int32_t [OH_ScsiPeripheral_Read10](#oh_scsiperipheral_read10) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_IORequest](_scsi_peripheral___i_o_request.md) \*request, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 从指定逻辑块读取数据。 |
95| int32_t [OH_ScsiPeripheral_Write10](#oh_scsiperipheral_write10) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_IORequest](_scsi_peripheral___i_o_request.md) \*request, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 写数据到设备的指定逻辑块。 |
96| int32_t [OH_ScsiPeripheral_Verify10](#oh_scsiperipheral_verify10) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_VerifyRequest](_scsi_peripheral___verify_request.md) \*request, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 校验指定逻辑块。 |
97| int32_t [OH_ScsiPeripheral_SendRequestByCdb](#oh_scsiperipheral_sendrequestbycdb) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, [ScsiPeripheral_Request](_scsi_peripheral___request.md) \*request, [ScsiPeripheral_Response](_scsi_peripheral___response.md) \*response) | 以CDB(Command Descriptor Block)方式发送SCSI命令。 |
98| int32_t [OH_ScsiPeripheral_CreateDeviceMemMap](#oh_scsiperipheral_createdevicememmap) ([ScsiPeripheral_Device](#scsiperipheral_device) \*dev, size_t size, [ScsiPeripheral_DeviceMemMap](_scsi_peripheral___device_mem_map.md) \*\*devMmap) | 创建缓冲区。请在缓冲区使用完后,调用[OH_ScsiPeripheral_DestroyDeviceMemMap](#oh_scsiperipheral_destroydevicememmap)销毁缓冲区,否则会造成资源泄露。 |
99| int32_t [OH_ScsiPeripheral_DestroyDeviceMemMap](#oh_scsiperipheral_destroydevicememmap) ([ScsiPeripheral_DeviceMemMap](_scsi_peripheral___device_mem_map.md) \*devMmap) | 销毁缓冲区。请在缓冲区使用完后及时销毁缓冲区,否则会造成资源泄露。 |
100| int32_t [OH_ScsiPeripheral_ParseBasicSenseInfo](#oh_scsiperipheral_parsebasicsenseinfo) (uint8_t \*senseData, uint8_t senseDataLen, [ScsiPeripheral_BasicSenseInfo](_scsi_peripheral___basic_sense_info.md) \*senseInfo) | 解析基本的sense data,包括Information、Command specific information、Sense key specific字段。 |
101
102
103## 宏定义说明
104
105
106### SCSIPERIPHERAL_MAX_CMD_DESC_BLOCK_LEN
107
108```
109#define SCSIPERIPHERAL_MAX_CMD_DESC_BLOCK_LEN   16
110```
111
112**描述**
113
114命令描述符块的最大长度。
115
116**起始版本:** 18
117
118
119### SCSIPERIPHERAL_MAX_SENSE_DATA_LEN
120
121```
122#define SCSIPERIPHERAL_MAX_SENSE_DATA_LEN   252
123```
124
125**描述**
126
127在SCSI协议中,Sense Data(感应数据)的最大长度通常为252字节。
128
129**起始版本:** 18
130
131
132### SCSIPERIPHERAL_MIN_DESCRIPTOR_FORMAT_SENSE
133
134```
135#define SCSIPERIPHERAL_MIN_DESCRIPTOR_FORMAT_SENSE   8
136```
137
138**描述**
139
140sense data描述符格式长度最小值。
141
142**起始版本:** 18
143
144
145### SCSIPERIPHERAL_MIN_FIXED_FORMAT_SENSE
146
147```
148#define SCSIPERIPHERAL_MIN_FIXED_FORMAT_SENSE   18
149```
150
151**描述**
152
153sense data固定格式长度最小值。
154
155**起始版本:** 18
156
157
158### SCSIPERIPHERAL_PRODUCT_ID_LEN
159
160```
161#define SCSIPERIPHERAL_PRODUCT_ID_LEN   16
162```
163
164**描述**
165
166product id的最大长度。
167
168**起始版本:** 18
169
170
171### SCSIPERIPHERAL_PRODUCT_REV_LEN
172
173```
174#define SCSIPERIPHERAL_PRODUCT_REV_LEN   4
175```
176
177**描述**
178
179产品版本的最大长度。
180
181**起始版本:** 18
182
183
184### SCSIPERIPHERAL_VENDOR_ID_LEN
185
186```
187#define SCSIPERIPHERAL_VENDOR_ID_LEN   8
188```
189
190**描述**
191
192vendor id的最大长度。
193
194**起始版本:** 18
195
196
197## 类型定义说明
198
199
200### ScsiPeripheral_BasicSenseInfo
201
202```
203typedef struct ScsiPeripheral_BasicSenseInfo ScsiPeripheral_BasicSenseInfo
204```
205
206**描述**
207
208sense data的基本信息。
209
210**起始版本:** 18
211
212
213### ScsiPeripheral_CapacityInfo
214
215```
216typedef struct ScsiPeripheral_CapacityInfo ScsiPeripheral_CapacityInfo
217```
218
219**描述**
220
221SCSI read capacity 数据。
222
223**起始版本:** 18
224
225
226### ScsiPeripheral_Device
227
228```
229typedef struct ScsiPeripheral_Device ScsiPeripheral_Device
230```
231
232**描述**
233
234不透明的SCSI设备结构体。
235
236**起始版本:** 18
237
238
239### ScsiPeripheral_DeviceMemMap
240
241```
242typedef struct ScsiPeripheral_DeviceMemMap ScsiPeripheral_DeviceMemMap
243```
244
245**描述**
246
247通过调用OH_ScsiPeripheral_CreateDeviceMemMap创建的设备内存映射。 使用该设备内存映射的缓冲区可以提供更好的性能。
248
249**起始版本:** 18
250
251
252### ScsiPeripheral_InquiryInfo
253
254```
255typedef struct ScsiPeripheral_InquiryInfo ScsiPeripheral_InquiryInfo
256```
257
258**描述**
259
260SCSI inquiry 数据。
261
262**起始版本:** 18
263
264
265### ScsiPeripheral_InquiryRequest
266
267```
268typedef struct ScsiPeripheral_InquiryRequest ScsiPeripheral_InquiryRequest
269```
270
271**描述**
272
273SCSI命令(inquiry)的请求结构体。
274
275**起始版本:** 18
276
277
278### ScsiPeripheral_IORequest
279
280```
281typedef struct ScsiPeripheral_IORequest ScsiPeripheral_IORequest
282```
283
284**描述**
285
286读/写操作的请求参数。
287
288**起始版本:** 18
289
290
291### ScsiPeripheral_ReadCapacityRequest
292
293```
294typedef struct ScsiPeripheral_ReadCapacityRequest ScsiPeripheral_ReadCapacityRequest
295```
296
297**描述**
298
299SCSI命令(read capacity)的请求结构体。
300
301**起始版本:** 18
302
303
304### ScsiPeripheral_Request
305
306```
307typedef struct ScsiPeripheral_Request ScsiPeripheral_Request
308```
309
310**描述**
311
312请求参数结构体。
313
314**起始版本:** 18
315
316
317### ScsiPeripheral_RequestSenseRequest
318
319```
320typedef struct ScsiPeripheral_RequestSenseRequest ScsiPeripheral_RequestSenseRequest
321```
322
323**描述**
324
325SCSI命令(request sense)的请求结构体。
326
327**起始版本:** 18
328
329
330### ScsiPeripheral_Response
331
332```
333typedef struct ScsiPeripheral_Response ScsiPeripheral_Response
334```
335
336**描述**
337
338响应参数结构体。
339
340**起始版本:** 18
341
342
343### ScsiPeripheral_TestUnitReadyRequest
344
345```
346typedef struct ScsiPeripheral_TestUnitReadyRequest ScsiPeripheral_TestUnitReadyRequest
347```
348
349**描述**
350
351命令(test unit ready)的请求结构体。
352
353**起始版本:** 18
354
355
356### ScsiPeripheral_VerifyRequest
357
358```
359typedef struct ScsiPeripheral_VerifyRequest ScsiPeripheral_VerifyRequest
360```
361
362**描述**
363
364SCSI命令(verify)的请求结构体。
365
366**起始版本:** 18
367
368
369## 枚举类型说明
370
371
372### ScsiPeripheral_DdkErrCode
373
374```
375enum ScsiPeripheral_DdkErrCode
376```
377
378**描述**
379
380SCSI Peripheral DDK错误码。
381
382**起始版本:** 18
383
384| 枚举值 | 描述 |
385| -------- | -------- |
386| SCSIPERIPHERAL_DDK_NO_PERM | 没有权限。 |
387| SCSIPERIPHERAL_DDK_INVALID_PARAMETER | 非法参数。 |
388| SCSIPERIPHERAL_DDK_SUCCESS | 操作成功。 |
389| SCSIPERIPHERAL_DDK_MEMORY_ERROR | 与内存相关的错误,例如,内存不足、内存数据复制失败或内存申请失败。 |
390| SCSIPERIPHERAL_DDK_INVALID_OPERATION | 非法操作。 |
391| SCSIPERIPHERAL_DDK_IO_ERROR | 设备输入/输出操作失败。 |
392| SCSIPERIPHERAL_DDK_TIMEOUT | 传输超时。 |
393| SCSIPERIPHERAL_DDK_INIT_ERROR | DDK初始化错误,或者DDK未初始化。 |
394| SCSIPERIPHERAL_DDK_SERVICE_ERROR | 与SCSI Peripheral DDK服务的通信失败。 |
395| SCSIPERIPHERAL_DDK_DEVICE_NOT_FOUND | 设备未找到。 |
396
397
398### ScsiPeripheral_Status
399
400```
401enum ScsiPeripheral_Status
402```
403
404**描述**
405
406定义用于响应的SCSI状态。
407
408**起始版本:** 18
409
410| 枚举值 | 描述 |
411| -------- | -------- |
412| SCSIPERIPHERAL_STATUS_GOOD | 正常状态。 |
413| SCSIPERIPHERAL_STATUS_CHECK_CONDITION_NEEDED | 需要状态检查。 |
414| SCSIPERIPHERAL_STATUS_CONDITION_MET | 条件满足。 |
415| SCSIPERIPHERAL_STATUS_BUSY | 占用中。 |
416| SCSIPERIPHERAL_STATUS_RESERVATION_CONFLICT | 资源保留冲突。 |
417| SCSIPERIPHERAL_STATUS_TASK_SET_FULL | 任务集已满。 |
418| SCSIPERIPHERAL_STATUS_ACA_ACTIVE | ACA活动状态。 |
419| SCSIPERIPHERAL_STATUS_TASK_ABORTED | 任务已终止。 |
420
421
422## 函数说明
423
424
425### OH_ScsiPeripheral_Close()
426
427```
428int32_t OH_ScsiPeripheral_Close (ScsiPeripheral_Device ** dev)
429```
430
431**描述**
432
433关闭SCSI设备。
434
435**起始版本:** 18
436
437**参数:**
438
439| 名称 | 描述 |
440| -------- | -------- |
441| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
442
443**Permission:**
444
445ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
446
447**返回:**
448
449- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
450
451- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
452
453- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
454
455- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空。
456
457- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
458
459- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
460
461
462### OH_ScsiPeripheral_CreateDeviceMemMap()
463
464```
465int32_t OH_ScsiPeripheral_CreateDeviceMemMap (ScsiPeripheral_Device * dev, size_t size, ScsiPeripheral_DeviceMemMap ** devMmap )
466```
467
468**描述**
469
470创建缓冲区。请在缓冲区使用完后,调用[OH_ScsiPeripheral_DestroyDeviceMemMap](#oh_scsiperipheral_destroydevicememmap)销毁缓冲区,否则会造成资源泄露。
471
472**起始版本:** 18
473
474**参数:**
475
476| 名称 | 描述 |
477| -------- | -------- |
478| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
479| size | 缓冲区的大小。 |
480| devMmap | 创建的缓冲区通过该参数返回给调用者,详情参见[ScsiPeripheral_DeviceMemMap](_scsi_peripheral___device_mem_map.md)。 |
481
482**Permission:**
483
484ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
485
486**返回:**
487
488- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
489
490- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空或devMmap为空。
491
492- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
493
494
495### OH_ScsiPeripheral_DestroyDeviceMemMap()
496
497```
498int32_t OH_ScsiPeripheral_DestroyDeviceMemMap (ScsiPeripheral_DeviceMemMap * devMmap)
499```
500
501**描述**
502
503销毁缓冲区。请在缓冲区使用完后及时销毁缓冲区,否则会造成资源泄露。
504
505**起始版本:** 18
506
507**参数:**
508
509| 名称 | 描述 |
510| -------- | -------- |
511| devMmap | 待销毁的由**OH_ScsiPeripheral_CreateDeviceMemMa**创建的缓冲区,详情参见[ScsiPeripheral_DeviceMemMap](_scsi_peripheral___device_mem_map.md)。 |
512
513**Permission:**
514
515ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
516
517**返回:**
518
519- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
520
521- SCSIPERIPHERAL_DDK_INVALID_PARAMETER devMmap为空。
522
523- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
524
525
526### OH_ScsiPeripheral_Init()
527
528```
529int32_t OH_ScsiPeripheral_Init (void )
530```
531
532**描述**
533
534初始化SCSI Peripheral DDK。
535
536**起始版本:** 18
537
538**Permission:**
539
540ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
541
542**返回:**
543
544- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
545
546- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
547
548- SCSIPERIPHERAL_DDK_INIT_ERROR 初始化DDK失败。
549
550- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
551
552
553### OH_ScsiPeripheral_Inquiry()
554
555```
556int32_t OH_ScsiPeripheral_Inquiry (ScsiPeripheral_Device * dev, ScsiPeripheral_InquiryRequest * request, ScsiPeripheral_InquiryInfo * inquiryInfo, ScsiPeripheral_Response * response )
557```
558
559**描述**
560
561查询SCSI设备的基本信息。
562
563**起始版本:** 18
564
565**参数:**
566
567| 名称 | 描述 |
568| -------- | -------- |
569| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
570| request | inquiry命令的请求信息,详情参见[ScsiPeripheral_InquiryRequest](_scsi_peripheral___inquiry_request.md)。 |
571| inquiryInfo | inquiry命令返回的查询信息,详情参见[ScsiPeripheral_InquiryInfo](_scsi_peripheral___inquiry_info.md)。 |
572| response | inquiry命令返回的原始响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
573
574**Permission:**
575
576ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
577
578**返回:**
579
580- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
581
582- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
583
584- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
585
586- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、 request为空、inquiryInfo 为空、inquiryInfo-&gt;data或者response为空。
587
588- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
589
590- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
591
592- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
593
594- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
595
596- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
597
598
599### OH_ScsiPeripheral_Open()
600
601```
602int32_t OH_ScsiPeripheral_Open (uint64_t deviceId, uint8_t interfaceIndex, ScsiPeripheral_Device ** dev )
603```
604
605**描述**
606
607打开deviceId和interfaceIndex指定的SCSI设备。
608
609**起始版本:** 18
610
611**参数:**
612
613| 名称 | 描述 |
614| -------- | -------- |
615| deviceId | 设备ID,代表要操作的设备。 |
616| interfaceIndex | 接口索引,对应SCSI设备的接口。 |
617| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
618
619**Permission:**
620
621ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
622
623**返回:**
624
625- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
626
627- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
628
629- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
630
631- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空。
632
633- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
634
635- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
636
637- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生IO错误。
638
639- SCSIPERIPHERAL_DDK_DEVICE_NOT_FOUND 通过deviceId和interfaceIndex找不到设备。
640
641- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
642
643
644### OH_ScsiPeripheral_ParseBasicSenseInfo()
645
646```
647int32_t OH_ScsiPeripheral_ParseBasicSenseInfo (uint8_t * senseData, uint8_t senseDataLen, ScsiPeripheral_BasicSenseInfo * senseInfo )
648```
649
650**描述**
651
652解析基本的sense data,包括Information、Command specific information、Sense key specific字段。
653
654**起始版本:** 18
655
656**参数:**
657
658| 名称 | 描述 |
659| -------- | -------- |
660| senseData | 待解析的sense data。 |
661| senseDataLen | sense data长度。 |
662| senseInfo | 用于保存解析后的基本信息,详情参见[ScsiPeripheral_BasicSenseInfo](_scsi_peripheral___basic_sense_info.md)。 |
663
664**Permission:**
665
666ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
667
668**返回:**
669
670- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
671
672- SCSIPERIPHERAL_DDK_INVALID_PARAMETER senseData格式不是描述符或固定格式、senseDataLen小于SCSIPERIPHERAL_MIN_DESCRIPTOR_FORMAT_SENSE或者senseDataLen小于SCSIPERIPHERAL_MIN_FIXED_FORMAT_SENSE。
673
674
675### OH_ScsiPeripheral_Read10()
676
677```
678int32_t OH_ScsiPeripheral_Read10 (ScsiPeripheral_Device * dev, ScsiPeripheral_IORequest * request, ScsiPeripheral_Response * response )
679```
680
681**描述**
682
683从指定逻辑块读取数据。
684
685**起始版本:** 18
686
687**参数:**
688
689| 名称 | 描述 |
690| -------- | -------- |
691| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
692| request | read命令的请求信息,详情参见[ScsiPeripheral_IORequest](_scsi_peripheral___i_o_request.md)。 |
693| response | read命令返回的响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
694
695**Permission:**
696
697ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
698
699**返回:**
700
701- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
702
703- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
704
705- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
706
707- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、 request为空、request-&gt;data或者response为空。
708
709- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
710
711- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
712
713- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
714
715- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
716
717- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
718
719
720### OH_ScsiPeripheral_ReadCapacity10()
721
722```
723int32_t OH_ScsiPeripheral_ReadCapacity10 (ScsiPeripheral_Device * dev, ScsiPeripheral_ReadCapacityRequest * request, ScsiPeripheral_CapacityInfo * capacityInfo, ScsiPeripheral_Response * response )
724```
725
726**描述**
727
728获取SCSI设备的容量信息。
729
730**起始版本:** 18
731
732**参数:**
733
734| 名称 | 描述 |
735| -------- | -------- |
736| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
737| request | read capacity命令的请求信息,详情参见[ScsiPeripheral_ReadCapacityRequest](_scsi_peripheral___read_capacity_request.md)。 |
738| capacityInfo | read capacity命令返回的容量信息,详情参见[ScsiPeripheral_CapacityInfo](_scsi_peripheral___capacity_info.md)。 |
739| response | read capacity命令返回的原始响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
740
741**Permission:**
742
743ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
744
745**返回:**
746
747- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
748
749- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
750
751- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
752
753- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、 request为空、capacityInfo为空或者response为空。
754
755- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
756
757- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
758
759- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
760
761- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
762
763- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
764
765
766### OH_ScsiPeripheral_Release()
767
768```
769int32_t OH_ScsiPeripheral_Release (void )
770```
771
772**描述**
773
774释放SCSI Peripheral DDK。
775
776**起始版本:** 18
777
778**Permission:**
779
780ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
781
782**返回:**
783
784- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
785
786- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
787
788- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
789
790- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
791
792
793### OH_ScsiPeripheral_RequestSense()
794
795```
796int32_t OH_ScsiPeripheral_RequestSense (ScsiPeripheral_Device * dev, ScsiPeripheral_RequestSenseRequest * request, ScsiPeripheral_Response * response )
797```
798
799**描述**
800
801获取sense data(SCSI设备返回给主机的信息,用于报告设备的状态、错误信息以及诊断信息)。
802
803**起始版本:** 18
804
805**参数:**
806
807| 名称 | 描述 |
808| -------- | -------- |
809| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
810| request | request sense命令的请求信息,详情参见[ScsiPeripheral_RequestSenseRequest](_scsi_peripheral___request_sense_request.md)。 |
811| response | request sense命令返回的响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
812
813**Permission:**
814
815ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
816
817**返回:**
818
819- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
820
821- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
822
823- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
824
825- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、 request为空或者response为空。
826
827- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
828
829- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
830
831- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
832
833- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
834
835- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
836
837
838### OH_ScsiPeripheral_SendRequestByCdb()
839
840```
841int32_t OH_ScsiPeripheral_SendRequestByCdb (ScsiPeripheral_Device * dev, ScsiPeripheral_Request * request, ScsiPeripheral_Response * response )
842```
843
844**描述**
845
846以CDB(Command Descriptor Block)方式发送SCSI命令。
847
848**起始版本:** 18
849
850**参数:**
851
852| 名称 | 描述 |
853| -------- | -------- |
854| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
855| request | 请求,详情参见[ScsiPeripheral_Request](_scsi_peripheral___request.md)。 |
856| response | 响应,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
857
858**Permission:**
859
860ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
861
862**返回:**
863
864- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
865
866- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
867
868- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
869
870- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、 request为空、request-&gt;data为空、request-&gt;cdbLength为0或者response为空。
871
872- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
873
874- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
875
876- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
877
878- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
879
880- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
881
882
883### OH_ScsiPeripheral_TestUnitReady()
884
885```
886int32_t OH_ScsiPeripheral_TestUnitReady (ScsiPeripheral_Device * dev, ScsiPeripheral_TestUnitReadyRequest * request, ScsiPeripheral_Response * response )
887```
888
889**描述**
890
891检查逻辑单元是否已经准备好。
892
893**起始版本:** 18
894
895**参数:**
896
897| 名称 | 描述 |
898| -------- | -------- |
899| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
900| request | 逻辑单元检查命令(test unit ready)的请求信息,详情参见[ScsiPeripheral_TestUnitReadyRequest](_scsi_peripheral___test_unit_ready_request.md)。 |
901| response | 逻辑单元检查命令(test unit ready)的响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
902
903**Permission:**
904
905ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
906
907**返回:**
908
909- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
910
911- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
912
913- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
914
915- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、request为空或者response为空。
916
917- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
918
919- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
920
921- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
922
923- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
924
925- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
926
927
928### OH_ScsiPeripheral_Verify10()
929
930```
931int32_t OH_ScsiPeripheral_Verify10 (ScsiPeripheral_Device * dev, ScsiPeripheral_VerifyRequest * request, ScsiPeripheral_Response * response )
932```
933
934**描述**
935
936校验指定逻辑块。
937
938**起始版本:** 18
939
940**参数:**
941
942| 名称 | 描述 |
943| -------- | -------- |
944| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
945| request | verify命令的请求信息,详情参见[ScsiPeripheral_VerifyRequest](_scsi_peripheral___verify_request.md)。 |
946| response | verify命令返回的响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
947
948**Permission:**
949
950ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
951
952**返回:**
953
954- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
955
956- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
957
958- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
959
960- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、request为空或者response为空。
961
962- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
963
964- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
965
966- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
967
968- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
969
970- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
971
972
973### OH_ScsiPeripheral_Write10()
974
975```
976int32_t OH_ScsiPeripheral_Write10 (ScsiPeripheral_Device * dev, ScsiPeripheral_IORequest * request, ScsiPeripheral_Response * response )
977```
978
979**描述**
980
981写数据到设备的指定逻辑块。
982
983**起始版本:** 18
984
985**参数:**
986
987| 名称 | 描述 |
988| -------- | -------- |
989| dev | 设备句柄,详情参见[ScsiPeripheral_Device](#scsiperipheral_device)。 |
990| request | write命令的请求信息,详情参见[ScsiPeripheral_IORequest](_scsi_peripheral___i_o_request.md)。 |
991| response | write命令返回的响应信息,详情参见[ScsiPeripheral_Response](_scsi_peripheral___response.md)。 |
992
993**Permission:**
994
995ohos.permission.ACCESS_DDK_SCSI_PERIPHERAL
996
997**返回:**
998
999- SCSIPERIPHERAL_DDK_SUCCESS 调用接口成功。
1000
1001- SCSIPERIPHERAL_DDK_NO_PERM 权限校验失败。
1002
1003- SCSIPERIPHERAL_DDK_INIT_ERROR 未初始化DDK。
1004
1005- SCSIPERIPHERAL_DDK_INVALID_PARAMETER dev为空、 request为空、request-&gt;data为空或者response为空。
1006
1007- SCSIPERIPHERAL_DDK_SERVICE_ERROR 与DDK服务通信失败。
1008
1009- SCSIPERIPHERAL_DDK_MEMORY_ERROR 内存操作失败。
1010
1011- SCSIPERIPHERAL_DDK_IO_ERROR DDK发生I/O错误。
1012
1013- SCSIPERIPHERAL_DDK_TIMEOUT 传输超时。
1014
1015- SCSIPERIPHERAL_DDK_INVALID_OPERATION 不支持该操作。
1016