1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import usb from '@ohos.usb'; 17import CheckEmptyUtils from './CheckEmptyUtils.js'; 18import EventConstants from './EventConstants.js'; 19import parameter from '@ohos.systemparameter'; 20import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index' 21 22/* usb device pipe test */ 23describe('UsbDevicePipeJsFunctionsTest', function () { 24 var gDeviceList 25 var gPipe 26 27 beforeAll(function () { 28 console.log('*************Usb Unit UsbDevicePipeJsFunctionsTest Begin*************'); 29 var Version = usb.getVersion() 30 console.info('usb unit begin test getversion :' + Version) 31 // version > 17 host currentMode = 2 device currentMode = 1 32 var usbPortList = usb.getPorts() 33 if (usbPortList.length > 0) { 34 if (usbPortList[0].status.currentMode == 1) { 35 usb.setPortRoles(usbPortList[0].id, usb.SOURCE, usb.HOST).then(data => { 36 console.info('usb case setPortRoles return: ' + data); 37 }).catch(error => { 38 console.info('usb case setPortRoles error : ' + error); 39 }); 40 console.log('*************Usb Unit switch to host Begin*************'); 41 } 42 } 43 44 gDeviceList = usb.getDevices(); 45 gPipe = usb.connectDevice(gDeviceList[0]) 46 console.info('usb unit connectDevice gPipe ret : ' + JSON.stringify(gPipe)); 47 }) 48 49 beforeEach(function () { 50 console.info('beforeEach: *************Usb Unit Test Case*************'); 51 }) 52 afterEach(function () { 53 console.info('afterEach: *************Usb Unit Test Case*************'); 54 }) 55 56 afterAll(function () { 57 var isPipClose = usb.closePipe(gPipe) 58 console.info('usb unit close gPipe ret : ' + isPipClose); 59 console.log('*************Usb Unit UsbDevicePipeJsFunctionsTest End*************'); 60 }) 61 62 function findInitPoint(testParam, j) { 63 var bfind = false 64 for (var k = 0; k < testParam.config.interfaces[j].endpoints.length; k++) { 65 var endpoint = testParam.config.interfaces[j].endpoints[k]; 66 if (endpoint.type == EventConstants.USB_ENDPOINT_XFER_BULK) { 67 bfind = true 68 if (endpoint.direction == usb.USB_REQUEST_DIR_TO_DEVICE) { 69 testParam.maxOutSize = endpoint.maxPacketSize; 70 testParam.outEndpoint = endpoint; 71 } else if (endpoint.direction == usb.USB_REQUEST_DIR_FROM_DEVICE) { 72 testParam.maxInSize = endpoint.maxPacketSize; 73 testParam.inEndpoint = endpoint 74 } 75 } 76 } 77 if (bfind) { 78 testParam.interface = testParam.config.interfaces[j] 79 return bfind 80 } 81 return false 82 } 83 84 function getFlag(testParam, j) { 85 if (testParam.config.interfaces[j].endpoints.length == 0) { 86 return false 87 } 88 89 if (testParam.config.interfaces[j].clazz != 10 || 90 testParam.config.interfaces[j].subclass != 0 || 91 testParam.config.interfaces[j].protocol != 2) { 92 return false 93 } 94 return true 95 } 96 97 function initPoint(testParam) { 98 for (var j = 0; j < testParam.config.interfaces.length; j++) { 99 if (getFlag(testParam, j) == true) { 100 if (findInitPoint(testParam, j) == true) { 101 break 102 } 103 } 104 } 105 } 106 107 // 预制传输相关参数 108 function getTransferTestParam() { 109 var testParam = { 110 config: null, 111 device: null, 112 pip: null, 113 inEndpoint: null, 114 interface: null, 115 outEndpoint: null, 116 usbRequest: null, 117 sendData: '', 118 isClaimed: 0, 119 maxInSize: 1024, 120 maxOutSize: 1024 121 } 122 123 console.info('usb case gDeviceList.length: ' + gDeviceList.length); 124 for (var i = 0; i < gDeviceList.length; i++) { 125 testParam.device = gDeviceList[i] 126 testParam.config = testParam.device.configs[0] 127 testParam.pip = gPipe 128 initPoint(testParam) 129 } 130 return testParam 131 } 132 133 /** 134 * @tc.number : SUB_USB_bulk_transfer_test_01 135 * @tc.name : bulkTransfer 136 * @tc.desc : 批量传输 收数据 137 */ 138 it('SUB_USB_bulk_transfer_test_01', 0, function () { 139 console.info('usb bulk_transfer_test_01 begin'); 140 var testParam = getTransferTestParam() 141 if (testParam.interface == null || testParam.inEndpoint == null) { 142 expect(false).assertTrue(); 143 return 144 } 145 146 testParam.isClaimed = usb.claimInterface(testParam.pip, testParam.interface, true); 147 expect(testParam.isClaimed).assertEqual(0); 148 149 console.info('usb case readData begin'); 150 var tmpUint8Array = new Uint8Array(testParam.maxInSize); 151 usb.bulkTransfer(testParam.pip, testParam.inEndpoint, tmpUint8Array, 5000).then(data => { 152 console.info('usb case readData tmpUint8Array buffer : ' + CheckEmptyUtils.ab2str(tmpUint8Array)); 153 console.info('usb case readData ret: ' + data); 154 console.info('usb case bulk_transfer_test_01 : PASS'); 155 expect(data >= 0).assertTrue(); 156 }).catch(error => { 157 console.info('usb case readData error : ' + JSON.stringify(error)); 158 expect(false).assertTrue(); 159 }); 160 }) 161 162 /** 163 * @tc.number : SUB_USB_bulk_transfer_test_02 164 * @tc.name : bulkTransfer 165 * @tc.desc : 批量传输 发数据 166 */ 167 it('SUB_USB_bulk_transfer_test_02', 0, function () { 168 console.info('usb bulk_transfer_test_02 begin'); 169 var testParam = getTransferTestParam() 170 if (testParam.interface == null || testParam.outEndpoint == null) { 171 expect(false).assertTrue(); 172 return 173 } 174 175 testParam.isClaimed = usb.claimInterface(testParam.pip, testParam.interface, true); 176 expect(testParam.isClaimed).assertEqual(0); 177 178 testParam.sendData = 'send default'; 179 try { 180 testParam.sendData = parameter.getSync('test_usb', 'default'); 181 console.log('usb parameter ' + JSON.stringify(testParam.sendData)); 182 } catch (e) { 183 console.log('usb parameter getSync unexpected error: ' + e); 184 } 185 186 var tmpUint8Array = CheckEmptyUtils.str2ab(testParam.sendData); 187 usb.bulkTransfer(testParam.pip, testParam.outEndpoint, tmpUint8Array, 5000).then(data => { 188 console.info('usb case bulk_transfer_test_02 ret: ' + data); 189 console.info('usb case bulk_transfer_test_02 send data: ' + testParam.sendData); 190 console.info('usb case bulk_transfer_test_02 : PASS'); 191 expect(true).assertTrue(); 192 }).catch(error => { 193 console.info('usb write error : ' + JSON.stringify(error)); 194 expect(false).assertTrue(); 195 }); 196 197 }) 198 199 /** 200 * @tc.number : SUB_USB_claim_interface_test_01 201 * @tc.name : claimInterface 202 * @tc.desc : 获取接口 并释放 203 */ 204 it('SUB_USB_claim_interface_test_01', 0, function () { 205 console.info('usb claim_interface_test_01 begin'); 206 if (gDeviceList.length == 0) { 207 console.info('usb 01 case get_device_list is null') 208 expect(gDeviceList.length).assertEqual(-1); 209 return 210 } 211 212 if (gDeviceList[0].configs.length == 0) { 213 console.info('usb 01 case current device.configs.length = 0'); 214 expect(false).assertTrue(); 215 return 216 } 217 218 for (var j = 0; j < gDeviceList[0].configs.length; j++) { 219 if (gDeviceList[0].configs[j].interfaces.length == 0) { 220 console.info('usb case current device.configs.interfaces.length = 0'); 221 } 222 for (var k = 0; k < gDeviceList[0].configs[j].interfaces.length; k++) { 223 var isClaim = usb.claimInterface(gPipe, gDeviceList[0].configs[j].interfaces[k], true) 224 console.info('usb case claimInterface function return: ' + isClaim); 225 expect(isClaim).assertEqual(0); 226 if (isClaim == 0) { 227 isClaim = usb.releaseInterface(gPipe, gDeviceList[0].configs[j].interfaces[k]) 228 console.info('usb case releaseInterface function return: ' + isClaim); 229 expect(isClaim).assertEqual(0); 230 gPipe = usb.connectDevice(gDeviceList[0]) 231 } 232 } 233 } 234 235 console.info('usb claim_interface_test_01 : PASS'); 236 expect(true).assertTrue(); 237 }) 238 239 function getTransferParam(iCmd, iReqType, iValue, iIndex) { 240 var tmpUint8Array = new Uint8Array(512); 241 var requestCmd = iCmd 242 var requestType = iReqType 243 var value = iValue; 244 var index = iIndex; 245 var controlParam = { 246 request: requestCmd, 247 reqType: requestType, 248 value: value, 249 index: index, 250 data: tmpUint8Array 251 } 252 return controlParam 253 } 254 255 /** 256 * @tc.number : SUB_USB_set_configuration_test_01 257 * @tc.name : setConfiguration 258 * @tc.desc : 设置设备接口 259 */ 260 it('SUB_USB_set_configuration_test_01', 0, function () { 261 console.info('usb set_configuration_test_01 begin'); 262 if (gDeviceList.length == 0) { 263 console.info('usb case get_device_list is null') 264 expect(false).assertTrue(); 265 return 266 } 267 268 gPipe = usb.connectDevice(gDeviceList[0]) 269 for (var j = 0; j < gDeviceList[0].configs.length; j++) { 270 var ret = usb.setConfiguration(gPipe, gDeviceList[0].configs[j]) 271 console.info('usb case setConfiguration return : ' + ret); 272 expect(ret).assertEqual(0); 273 } 274 275 console.info('usb set_configuration_test_01 : PASS'); 276 expect(true).assertTrue(); 277 }) 278 279 /** 280 * @tc.number : SUB_USB_set_configuration_test_02 281 * @tc.name : setConfiguration 282 * @tc.desc : 反向测试 设置设备接口 283 */ 284 it('SUB_USB_set_configuration_test_02', 0, function () { 285 console.info('usb set_configuration_test_02 begin'); 286 if (gDeviceList.length == 0) { 287 console.info('usb case get_device_list is null') 288 expect(false).assertTrue(); 289 return 290 } 291 292 for (var j = 0; j < gDeviceList[0].configs.length; j++) { 293 var config = JSON.parse(JSON.stringify(gDeviceList[0].configs[j])); 294 config.id = 255 295 var ret = usb.setConfiguration(gPipe, config) 296 console.info('usb case setConfiguration return : ' + ret); 297 expect(ret).assertLess(0); 298 } 299 300 console.info('usb set_configuration_test_02 : PASS'); 301 }) 302 303 /** 304 * @tc.number : SUB_USB_set_interface_test_01 305 * @tc.name : setInterface 306 * @tc.desc : 设置设备接口 307 */ 308 it('SUB_USB_set_interface_test_01', 0, function () { 309 console.info('usb set_interface_test_01 begin'); 310 if (gDeviceList.length == 0) { 311 console.info('usb case get_device_list is null') 312 expect(false).assertTrue(); 313 return 314 } 315 316 for (var j = 0; j < gDeviceList[0].configs.length; j++) { 317 var isClaim = usb.claimInterface(gPipe, gDeviceList[0].configs[j].interfaces[0], true) 318 expect(isClaim).assertEqual(0) 319 if (isClaim == 0) { 320 var ret = usb.setInterface(gPipe, gDeviceList[0].configs[j].interfaces[0]) 321 expect(ret).assertEqual(0); 322 console.info('usb case setInterface return : ' + ret); 323 } 324 } 325 326 console.info('usb set_interface_test_01 : PASS'); 327 expect(true).assertTrue(); 328 }) 329 330 /** 331 * @tc.number : SUB_USB_set_interface_test_02 332 * @tc.name : setInterface 333 * @tc.desc : 反向测试 设置设备接口 334 */ 335 it('SUB_USB_set_interface_test_02', 0, function () { 336 console.info('usb set_interface_test_02 begin'); 337 if (gDeviceList.length == 0) { 338 console.info('usb case get_device_list is null') 339 expect(false).assertTrue() 340 return 341 } 342 343 for (var j = 0; j < gDeviceList[0].configs.length; j++) { 344 var isClaim = usb.claimInterface(gPipe, gDeviceList[0].configs[j].interfaces[0], true) 345 expect(isClaim).assertEqual(0) 346 if (isClaim == 0) { 347 var tmpInterface = JSON.parse(JSON.stringify(gDeviceList[0].configs[j].interfaces[0])); 348 tmpInterface.id = 234 349 var ret = usb.setInterface(gPipe, tmpInterface) 350 expect(ret).assertLess(0) 351 console.info('usb case setInterface return : ' + ret) 352 } 353 } 354 355 console.info('usb set_interface_test_02 : PASS'); 356 expect(true).assertTrue(); 357 }) 358 359 function callControlTransfer(pip, controlParam, timeout, caseName) { 360 usb.controlTransfer(pip, controlParam, timeout).then(data => { 361 console.info('usb controlTransfer ret data : ' + data + ' ' + caseName); 362 console.info('usb controlTransfer controlParam.data buffer : ' + controlParam.data + ' ' + caseName); 363 console.info('usb' + caseName + ': PASS'); 364 expect(true).assertTrue(); 365 }).catch(error => { 366 console.info('usb controlTransfer error : ' + JSON.stringify(error)); 367 console.info('usb' + caseName + ': PASS'); 368 expect(false).assertTrue(); 369 }); 370 } 371 372 /** 373 * @tc.number : SUB_USB_control_transfer_test_01 374 * @tc.name : controlTransfer 375 * @tc.desc : 控制传输 GetDescriptor: cmd 6 reqType 128 value 512 index 0 376 */ 377 it('SUB_USB_control_transfer_test_01', 0, function () { 378 console.info('usb control_transfer_test_01 begin'); 379 var testParam = getTransferTestParam() 380 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 381 expect(false).assertTrue(); 382 return 383 } 384 385 var timeout = 5000; 386 var controlParam = getTransferParam(6, (usb.USB_REQUEST_DIR_FROM_DEVICE) 387 | (usb.USB_REQUEST_TYPE_STANDARD << 5) | (usb.USB_REQUEST_TARGET_DEVICE & 0x1f), (2 << 8), 0) 388 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_01 GetDescriptor') 389 }) 390 391 /** 392 * @tc.number : SUB_USB_control_transfer_test_02 393 * @tc.name : controlTransfer 394 * @tc.desc : 控制传输 GetStatus: cmd 0 reqType 128 value 0 index 0 395 */ 396 it('SUB_USB_control_transfer_test_02', 0, function () { 397 console.info('usb control_transfer_test_02 begin'); 398 var testParam = getTransferTestParam() 399 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 400 expect(false).assertTrue(); 401 return 402 } 403 404 var timeout = 5000; 405 var controlParam = getTransferParam(0, (usb.USB_REQUEST_DIR_FROM_DEVICE) 406 | (usb.USB_REQUEST_TYPE_STANDARD << 5) | (usb.USB_REQUEST_TARGET_DEVICE & 0x1f), 0, 0) 407 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_02 GetStatus') 408 }) 409 410 /** 411 * @tc.number : SUB_USB_control_transfer_test_03 412 * @tc.name : controlTransfer 413 * @tc.desc : 控制传输 GetConfiguration: cmd 8 reqType 128 value 0 index 0 414 */ 415 it('SUB_USB_control_transfer_test_03', 0, function () { 416 console.info('usb control_transfer_test_03 begin'); 417 var testParam = getTransferTestParam() 418 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 419 expect(false).assertTrue(); 420 return 421 } 422 423 var timeout = 5000; 424 var controlParam = getTransferParam(8, (usb.USB_REQUEST_DIR_FROM_DEVICE) 425 | (usb.USB_REQUEST_TYPE_STANDARD << 5) | (usb.USB_REQUEST_TARGET_DEVICE & 0x1f), 0, 0) 426 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_03 GetConfiguration') 427 }) 428 429 /** 430 * @tc.number : SUB_USB_control_transfer_test_04 431 * @tc.name : controlTransfer 432 * @tc.desc : 控制传输 GetInterface: cmd 10 reqType 129 value 0 index 1 433 */ 434 it('SUB_USB_control_transfer_test_04', 0, function () { 435 console.info('usb control_transfer_test_04 begin'); 436 var testParam = getTransferTestParam() 437 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 438 expect(false).assertTrue(); 439 return 440 } 441 442 var timeout = 5000; 443 var controlParam = getTransferParam(10, (usb.USB_REQUEST_DIR_FROM_DEVICE) 444 | (usb.USB_REQUEST_TYPE_STANDARD << 5) | (usb.USB_REQUEST_TARGET_INTERFACE & 0x1f), 0, 1) 445 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_04 GetInterface') 446 }) 447 448 /** 449 * @tc.number : SUB_USB_control_transfer_test_05 450 * @tc.name : controlTransfer 451 * @tc.desc : 控制传输 ClearFeature: cmd 1 reqType 0 value 0 index 0 452 */ 453 it('SUB_USB_control_transfer_test_05', 0, function () { 454 console.info('usb control_transfer_test_05 begin'); 455 var testParam = getTransferTestParam() 456 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 457 expect(false).assertTrue(); 458 return 459 } 460 461 var timeout = 5000; 462 var controlParam = getTransferParam(1, (usb.USB_REQUEST_DIR_TO_DEVICE) 463 | (usb.USB_REQUEST_TYPE_STANDARD << 5) | (usb.USB_REQUEST_TARGET_DEVICE & 0x1f), 0, 0) 464 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_05 ClearFeature') 465 }) 466 467 /** 468 * @tc.number : SUB_USB_control_transfer_test_06 469 * @tc.name : controlTransfer 470 * @tc.desc : 控制传输 ClearFeature: cmd 1 reqType 0 value 0 index 0 471 */ 472 it('SUB_USB_control_transfer_test_06', 0, function () { 473 console.info('usb control_transfer_test_06 begin'); 474 var testParam = getTransferTestParam() 475 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 476 expect(false).assertTrue(); 477 return 478 } 479 480 var timeout = 5000; 481 var controlParam = getTransferParam(255, (usb.USB_REQUEST_DIR_FROM_DEVICE) 482 | (usb.USB_REQUEST_TYPE_STANDARD << 5) | (usb.USB_REQUEST_TARGET_INTERFACE & 0x1f), (2 << 8), 0) 483 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_06 ClearFeature') 484 }) 485 486 /** 487 * @tc.number : SUB_USB_control_transfer_test_07 488 * @tc.name : controlTransfer 489 * @tc.desc : 控制传输 ClearFeature: cmd 1 reqType 0 value 0 index 0 490 */ 491 it('SUB_USB_control_transfer_test_07', 0, function () { 492 console.info('usb control_transfer_test_07 begin'); 493 var testParam = getTransferTestParam() 494 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 495 expect(false).assertTrue(); 496 return 497 } 498 499 var timeout = 5000; 500 var controlParam = getTransferParam(255, (usb.USB_REQUEST_DIR_TO_DEVICE) 501 | (usb.USB_REQUEST_TYPE_CLASS << 5) | (usb.USB_REQUEST_TARGET_ENDPOINT & 0x1f), (2 << 8), 0) 502 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_07 ClearFeature') 503 }) 504 505 /** 506 * @tc.number : SUB_USB_control_transfer_test_08 507 * @tc.name : controlTransfer 508 * @tc.desc : 控制传输 ClearFeature: cmd 1 reqType 0 value 0 index 0 509 */ 510 it('SUB_USB_control_transfer_test_08', 0, function () { 511 console.info('usb control_transfer_test_08 begin'); 512 var testParam = getTransferTestParam() 513 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 514 expect(false).assertTrue(); 515 return 516 } 517 518 var timeout = 5000; 519 var controlParam = getTransferParam(255, (usb.USB_REQUEST_DIR_TO_DEVICE) 520 | (usb.USB_REQUEST_TYPE_VENDOR << 5) | (usb.USB_REQUEST_TARGET_OTHER & 0x1f), (2 << 8), 0) 521 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_08 ClearFeature') 522 }) 523 524 /** 525 * @tc.number : SUB_USB_control_transfer_test_09 526 * @tc.name : controlTransfer 527 * @tc.desc : 控制传输 ClearFeature: cmd 1 reqType 0 value 0 index 0 528 */ 529 it('SUB_USB_control_transfer_test_09', 0, function () { 530 console.info('usb control_transfer_test_09 begin'); 531 var testParam = getTransferTestParam() 532 if (testParam.inEndpoint == null || testParam.interface == null || testParam.outEndpoint == null) { 533 expect(false).assertTrue(); 534 return 535 } 536 537 var timeout = 5000; 538 var controlParam = getTransferParam(255, (usb.USB_REQUEST_DIR_TO_DEVICE) 539 | (usb.USB_REQUEST_TYPE_CLASS << 5) | (usb.USB_REQUEST_TARGET_OTHER & 0x1f), 0, 0) 540 callControlTransfer(testParam.pip, controlParam, timeout, 'control_transfer_test_09 ClearFeature') 541 }) 542 543}) 544