Home | History | Annotate | Download | only in mbim_compliance
      1 # Copyright 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 """
      6 This module implements the classes for information structures encapsulated in
      7 either |MBIMCommandMessage| or |MBIMCommandDone|.
      8 
      9 Reference:
     10     [1] Universal Serial Bus Communications Class Subclass Specification for
     11         Mobile Broadband Interface Model
     12         http://www.usb.org/developers/docs/devclass_docs/
     13         MBIM10Errata1_073013.zip
     14 """
     15 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_constants
     16 from autotest_lib.client.cros.cellular.mbim_compliance \
     17         import mbim_message_request
     18 from autotest_lib.client.cros.cellular.mbim_compliance \
     19         import mbim_message_response
     20 
     21 
     22 class MBIMSetConnect(mbim_message_request.MBIMCommand):
     23     """ The class for MBIM_SET_CONNECT structure. """
     24 
     25     _FIELDS = (('I', 'session_id', ''),
     26                ('I', 'activation_command', ''),
     27                ('I', 'access_string_offset', ''),
     28                ('I', 'access_string_size', ''),
     29                ('I', 'user_name_offset', ''),
     30                ('I', 'user_name_size', ''),
     31                ('I', 'password_offset', ''),
     32                ('I', 'password_size', ''),
     33                ('I', 'compression', ''),
     34                ('I', 'auth_protocol', ''),
     35                ('I', 'ip_type', ''),
     36                ('16s', 'context_type', ''))
     37     _DEFAULTS = {'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
     38                  'cid' : mbim_constants.MBIM_CID_CONNECT,
     39                  'command_type' : mbim_constants.COMMAND_TYPE_SET}
     40 
     41 
     42 class MBIMConnectQuery(mbim_message_request.MBIMCommand):
     43     """ The class for MBIM_CONNECT_QUERY structure. """
     44 
     45     _FIELDS = (('I', 'session_id', ''),
     46                ('I', 'activation_state', ''),
     47                ('I', 'voice_call_state', ''),
     48                ('I', 'ip_type', ''),
     49                ('16s', 'context_type', ''),
     50                ('I', 'nw_error', ''))
     51     _DEFAULTS = {'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
     52                  'cid' : mbim_constants.MBIM_CID_CONNECT,
     53                  'command_type' : mbim_constants.COMMAND_TYPE_QUERY,
     54                  'information_buffer_length' : 36,
     55                  'activation_state' : 0,
     56                  'voice_call_state' : 0,
     57                  'ip_type' : 0,
     58                  'context_type' : mbim_constants.MBIM_CONTEXT_TYPE_NONE.bytes,
     59                  'nw_error' : 0}
     60 
     61 
     62 class MBIMConnectInfo(mbim_message_response.MBIMCommandDone):
     63     """ The class for MBIM_CONNECT_INFO structure. """
     64 
     65     _FIELDS = (('I', 'session_id', ''),
     66                ('I', 'activation_state', ''),
     67                ('I', 'voice_call_state', ''),
     68                ('I', 'ip_type', ''),
     69                ('16s', 'context_type', ''),
     70                ('I', 'nw_error', ''))
     71     _IDENTIFIERS = {
     72             'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
     73             'cid' : mbim_constants.MBIM_CID_CONNECT}
     74 
     75 
     76 class MBIMDeviceCapsQuery(mbim_message_request.MBIMCommand):
     77     """ The class for MBIM_DEVICE_CAPS_QUERY structure. """
     78 
     79     _DEFAULTS = {'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
     80                  'cid' : mbim_constants.MBIM_CID_DEVICE_CAPS,
     81                  'command_type' : mbim_constants.COMMAND_TYPE_QUERY,
     82                  'information_buffer_length' : 0}
     83 
     84 
     85 class MBIMDeviceCapsInfo(mbim_message_response.MBIMCommandDone):
     86     """ The class for MBIM_DEVICE_CAPS_INFO structure. """
     87 
     88     _FIELDS = (('I', 'device_type', ''),
     89                ('I', 'cellular_class', ''),
     90                ('I', 'voice_class', ''),
     91                ('I', 'sim_class', ''),
     92                ('I', 'data_class', ''),
     93                ('I', 'sms_caps', ''),
     94                ('I', 'control_caps', ''),
     95                ('I', 'max_sessions', ''),
     96                ('I', 'custom_data_class_offset', ''),
     97                ('I', 'custom_data_class_size', ''),
     98                ('I', 'device_id_offset', ''),
     99                ('I', 'device_id_size', ''),
    100                ('I', 'firmware_info_offset', ''),
    101                ('I', 'firmware_info_size', ''),
    102                ('I', 'hardware_info_offset', ''),
    103                ('I', 'hardware_info_size', ''))
    104     _IDENTIFIERS = {
    105             'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
    106             'cid' : mbim_constants.MBIM_CID_DEVICE_CAPS}
    107 
    108 
    109 class MBIMDeviceServicesQuery(mbim_message_request.MBIMCommand):
    110     """ The class for MBIM_DEVICE_SERVICES_QUERY structure. """
    111 
    112     _DEFAULTS = {'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
    113                  'cid' : mbim_constants.MBIM_CID_DEVICE_SERVICES,
    114                  'command_type' : mbim_constants.COMMAND_TYPE_QUERY,
    115                  'information_buffer_length' : 0}
    116 
    117 
    118 class MBIMDeviceServicesInfo(mbim_message_response.MBIMCommandDone):
    119     """ The class for MBIM_DEVICE_SERVICES_INFO structure. """
    120 
    121     # The length of |device_services_ref_list| depends on the value of
    122     # |device_services_count|.
    123     _FIELDS = (('I', 'device_services_count', ''),
    124                ('I', 'max_dss_sessions', ''))
    125                #('Q', 'device_services_ref_list', ''))
    126     _IDENTIFIERS = {
    127             'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
    128             'cid' : mbim_constants.MBIM_CID_DEVICE_SERVICES}
    129 
    130 
    131 class MBIMRadioStateInfo(mbim_message_response.MBIMCommandDone):
    132     """ The class for MBIM_RADIO_STATE_INFO structure. """
    133 
    134     _FIELDS = (('I', 'hw_radio_state', ''),
    135                ('I', 'sw_radio_state', ''))
    136 
    137 
    138 class MBIMIPConfigurationQuery(mbim_message_request.MBIMCommand):
    139     """ The class for MBIM_IP_CONFIGURATION_INFO structure. """
    140 
    141     _FIELDS = (('I', 'session_id', ''),
    142                ('I', 'ipv4_configuration_available', ''),
    143                ('I', 'ipv6_configuration_available', ''),
    144                ('I', 'ipv4_address_count', ''),
    145                ('I', 'ipv4_address_offset', ''),
    146                ('I', 'ipv6_address_count', ''),
    147                ('I', 'ipv6_address_offset', ''),
    148                ('I', 'ipv4_gateway_offset', ''),
    149                ('I', 'ipv6_gateway_offset', ''),
    150                ('I', 'ipv4_dns_server_count', ''),
    151                ('I', 'ipv4_dns_server_offset', ''),
    152                ('I', 'ipv6_dns_server_count', ''),
    153                ('I', 'ipv6_dns_server_offset', ''),
    154                ('I', 'ipv4_mtu', ''),
    155                ('I', 'ipv6_mtu', ''))
    156     _DEFAULTS = {'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
    157                  'cid' : mbim_constants.MBIM_CID_IP_CONFIGURATION,
    158                  'command_type' : mbim_constants.COMMAND_TYPE_QUERY,
    159                  'information_buffer_length' : 60,
    160                  'ipv4_configuration_available' : 0,
    161                  'ipv6_configuration_available' : 0,
    162                  'ipv4_address_count' : 0,
    163                  'ipv4_address_offset' : 0,
    164                  'ipv6_address_count' : 0,
    165                  'ipv6_address_offset' : 0,
    166                  'ipv4_gateway_offset' : 0,
    167                  'ipv6_gateway_offset' : 0,
    168                  'ipv4_dns_server_count' : 0,
    169                  'ipv4_dns_server_offset' : 0,
    170                  'ipv6_dns_server_count' : 0,
    171                  'ipv6_dns_server_offset' : 0,
    172                  'ipv4_mtu' : 0,
    173                  'ipv6_mtu' : 0}
    174 
    175 
    176 class MBIMIPConfigurationInfo(mbim_message_response.MBIMCommandDone):
    177     """ The class for MBIM_IP_CONFIGURATION_INFO structure. """
    178 
    179     _FIELDS = (('I', 'session_id', ''),
    180                ('I', 'ipv4_configuration_available', ''),
    181                ('I', 'ipv6_configuration_available', ''),
    182                ('I', 'ipv4_address_count', ''),
    183                ('I', 'ipv4_address_offset', ''),
    184                ('I', 'ipv6_address_count', ''),
    185                ('I', 'ipv6_address_offset', ''),
    186                ('I', 'ipv4_gateway_offset', ''),
    187                ('I', 'ipv6_gateway_offset', ''),
    188                ('I', 'ipv4_dns_server_count', ''),
    189                ('I', 'ipv4_dns_server_offset', ''),
    190                ('I', 'ipv6_dns_server_count', ''),
    191                ('I', 'ipv6_dns_server_offset', ''),
    192                ('I', 'ipv4_mtu', ''),
    193                ('I', 'ipv6_mtu', ''))
    194     _IDENTIFIERS = {
    195             'device_service_id' : mbim_constants.UUID_BASIC_CONNECT.bytes,
    196             'cid' : mbim_constants.MBIM_CID_IP_CONFIGURATION}
    197