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""" 6This module implements the classes for information structures encapsulated in 7either |MBIMCommandMessage| or |MBIMCommandDone|. 8 9Reference: 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""" 15from autotest_lib.client.cros.cellular.mbim_compliance import mbim_constants 16from autotest_lib.client.cros.cellular.mbim_compliance \ 17 import mbim_message_request 18from autotest_lib.client.cros.cellular.mbim_compliance \ 19 import mbim_message_response 20 21 22class 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 42class 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 62class 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 76class 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 85class 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 109class 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 118class 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 131class 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 138class 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 176class 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