Home | History | Annotate | Download | only in sequences
      1 # Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 """
      5 MBIM_CID_DEVICE_CAPS Sequence
      6 
      7 Reference:
      8     [1] Universal Serial Bus Communication Class MBIM Compliance Testing: 22
      9         http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
     10 """
     11 import common
     12 
     13 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_channel
     14 from autotest_lib.client.cros.cellular.mbim_compliance \
     15         import mbim_command_message
     16 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_constants
     17 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_errors
     18 from autotest_lib.client.cros.cellular.mbim_compliance \
     19         import mbim_message_request
     20 from autotest_lib.client.cros.cellular.mbim_compliance \
     21         import mbim_message_response
     22 from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
     23         import sequence
     24 
     25 
     26 class MBIMCIDDeviceCapsSequence(sequence.Sequence):
     27     """
     28     Implement |MBIMCIDDeviceCapsSequence|.
     29     In this sequence, cid |MBIM_CID_DEVICE_CAPS| and uuid |UUID_BASIC_CONNECT|
     30     are used to retrieve a MBIM command done response with a
     31     |MBIM_DEVICE_CPAS_INFO| in its information buffer.
     32     """
     33 
     34     def run_internal(self):
     35         """ Run the MBIM_CID_DEVICE_CAPS Sequence. """
     36         # Step 1
     37         # Send MBIM_COMMAND_MSG.
     38         device_context = self.device_context
     39         descriptor_cache = device_context.descriptor_cache
     40         command_message = mbim_command_message.MBIMDeviceCapsQuery()
     41         packets = mbim_message_request.generate_request_packets(
     42                 command_message,
     43                 device_context.max_control_transfer_size)
     44         channel = mbim_channel.MBIMChannel(
     45                 device_context._device,
     46                 descriptor_cache.mbim_communication_interface.bInterfaceNumber,
     47                 descriptor_cache.interrupt_endpoint.bEndpointAddress,
     48                 device_context.max_control_transfer_size)
     49         response_packets = channel.bidirectional_transaction(*packets)
     50         channel.close()
     51 
     52         # Step 2
     53         response_message = mbim_message_response.parse_response_packets(
     54                 response_packets)
     55 
     56         # Step 3
     57         is_message_valid = isinstance(
     58                 response_message,
     59                 mbim_command_message.MBIMDeviceCapsInfo)
     60         if ((not is_message_valid) or
     61             (response_message.message_type !=
     62              mbim_constants.MBIM_COMMAND_DONE) or
     63             (response_message.status_codes !=
     64              mbim_constants.MBIM_STATUS_SUCCESS)):
     65             mbim_errors.log_and_raise(mbim_errors.MBIMComplianceAssertionError,
     66                                       'mbim1.0:9.4.3')
     67 
     68         return command_message, response_message
     69