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->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->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->data为空、request->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->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