1#!/usr/bin/env python3 2# 3# Copyright 2016 - The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16""" 17Utility functions for for Anritsu Signalling Tester. 18""" 19# yapf: disable 20 21OPERATION_COMPLETE = 1 22NO_ERROR = 0 23 24ANRITSU_ERROR_CODES = { 25 0: 'No errors occurred', 26 2: 'The specified file does not exist', 27 14: 'The buffer size is insufficient', 28 29: 'The save destination is a write-protected file.', 29 80: 'A file with the same name already exists.' 30 ' (If Overwrite is specified to 0.)', 31 87: 'The specified value is wrong.', 32 112: 'The disk space is insufficient.', 33 183: 'SmartStudio is already running.', 34 1060: 'The control software has not been started or has already terminated', 35 1067: 'SmartStudio, control software or SMS Centre could not start due to' 36 'a problem or problems resulting from OS or the MD8475A system.', 37 1229: 'Connecting to the server failed.', 38 1235: 'A request is suspended.', 39 1460: 'The operation is terminated due to the expiration of the' 40 ' timeout period.', 41 9999: 'A GPIB command error occurred.', 42 536870912: 'The license could not be confirmed.', 43 536870913: 'The specified file cannot be loaded by the SmartStudio.', 44 536870914: 'The specified process ID does not exist.', 45 536870915: 'The received data does not exist.', 46 536870916: 'Simulation is not running.', 47 536870917: 'Simulation is running.', 48 536870918: 'Test Case has never been executed.', 49 536870919: 'The resource cannot be obtained.', 50 536870920: 'A resource protocol error, such as download error or' 51 ' license error, occurred.', 52 536870921: 'The function call has been in invalid status.', 53 536870922: 'The current Simulation Model does not allow the operation.', 54 536870923: 'The Cell name to be set does not exist.', 55 536870924: 'The test is being executed.', 56 536870925: 'The current UE status does not correspond to the' 57 ' test parameters.', 58 536870926: 'There is no LOG information because the simulation' 59 ' has not been executed.', 60 536870927: 'Measure Export has already been executed.', 61 536870928: 'SmartStudio is not connected to the SMS Centre.', 62 536870929: 'SmartStudio failed to send an SMS message to the SMS Centre.', 63 536870930: 'SmartStudio has successfully sent an SMS message' 64 ' to the SMS Centre,but the SMS Centre judges it as an error.', 65 536870931: 'The processing that is unavailable with the current system' 66 ' status has been executed.', 67 536870932: 'The option could not be confirmed.', 68 536870933: 'Measure Export has been stopped.', 69 536870934: 'SmartStudio cannot load the specified file because the' 70 ' version is old.', 71 536870935: 'The data with the specified PDN number does not exist.', 72 536870936: 'The data with the specified Dedicated number does not exist.', 73 536870937: 'The PDN data cannot be added because the upper limit of the' 74 ' number of PDN data has been reached.', 75 536870938: 'The number of antennas, which cannot be set to the current' 76 ' Simulation Model,has been specified.', 77 536870939: 'Calibration of path loss failed.', 78 536870940: 'There is a parameter conflict.', 79 536870941: 'The DL Ref Power setting is out of the setting range' 80 ' at W-CDMA (Evolution).', 81 536870942: 'DC-HSDPA is not available for the current channel setting.', 82 536870943: 'The specified Packet Rate cannot be used by the current' 83 ' Simulation Model.', 84 536870944: 'The W-CDMA Cell parameter F-DPCH is set to Enable.', 85 536870945: 'Target is invalid.', 86 536870946: 'The PWS Centre detects an error.', 87 536870947: 'The Ec/Ior setting is invalid.', 88 536870948: 'The combination of Attach Type and TA Update Type is invalid.', 89 536870949: 'The license of the option has expired.', 90 536870950: 'The Ping command is being executed.', 91 536870951: 'The Ping command is not being executed.', 92 536870952: 'The current Test Case parameter setting is wrong.', 93 536870953: 'The specified IP address is the same as that of Default Gateway' 94 'specified by Simulation parameter.', 95 536870954: 'TFT IE conversion failed.', 96 536875008: 'An error exists in the parameter configuration.' 97 '(This error applies only to the current version.)', 98 536936448: 'License verification failed.', 99 536936449: 'The IMS Services cannot load the specified file.', 100 536936462: 'Simulation is not performed and no log information exists.', 101 536936467: 'The executed process is inoperable in the current status' 102 ' of Visual User Agent.', 103 536936707: 'The specified Virtual Network is not running.', 104 536936709: 'The specified Virtual Network is running. ' 105 'Any one of the Virtual Networks is running.', 106 536936727: 'The specified Virtual Network does not exist.', 107 536936729: 'When the Virtual Network already exists.', 108 554762241: 'The RF Measurement launcher cannot be accessed.', 109 554762242: 'License check of the RF Measurement failed.', 110 554762243: 'Function is called when RF Measurement cannot be set.', 111 554762244: 'RF Measurement has been already started.', 112 554762245: 'RF Measurement failed to start due to a problem resulting' 113 ' from OS or the MD8475A system.', 114 554762246: 'RF Measurement is not started or is already terminated.', 115 554762247: 'There is a version mismatch between RF Measurement and CAL.', 116 554827777: 'The specified value for RF Measurement is abnormal.', 117 554827778: 'GPIB command error has occurred in RF Measurement.', 118 554827779: 'Invalid file path was specified to RF Measurement.', 119 554827780: 'RF Measurement argument is NULL pointer.', 120 555810817: 'RF Measurement is now performing the measurement.', 121 555810818: 'RF Measurement is now not performing the measurement.', 122 555810819: 'RF Measurement is not measured yet. (There is no result ' 123 'information since measurement is not performed.)', 124 555810820: 'An error has occurred when RF Measurement' 125 ' starts the measurement.', 126 555810821: 'Simulation has stopped when RF Measurement is ' 127 'performing the measurement.', 128 555810822: 'An error has been retrieved from the Platform when ' 129 'RF Measurement is performing the measurement.', 130 555810823: 'Measurement has been started in the system state where RF ' 131 'Measurement is invalid.', 132 556859393: 'RF Measurement is now saving a file.', 133 556859394: 'There is insufficient disk space when saving' 134 'a Measure Result file of RF Measurement.', 135 556859395: 'An internal error has occurred or USB cable has been' 136 ' disconnected when saving a Measure Result' 137 ' file of RF Measurement.', 138 556859396: 'A write-protected file was specified as the save destination' 139 ' when saving a Measure Result file of RF Measurement.', 140 568328193: 'An internal error has occurred in RF Measurement.', 141 687865857: 'Calibration Measure DSP is now being measured.', 142 687865858: 'Calibration measurement failed.', 143 687865859: 'Calibration slot is empty or its system does not apply.', 144 687865860: 'Unexpected command is received from Calibration HWC.', 145 687865861: 'Failed to receive the Calibration measurement result.', 146 687865862: 'Failed to open the correction value file on the' 147 ' Calibration HDD.', 148 687865863: 'Failed to move the pointer on the Calibration correction' 149 ' value table.', 150 687865864: 'Failed to write the correction value to the Calibration' 151 ' correction value file on the Calibration HDD.', 152 687865865: 'Failed to load the correction value from the Calibration HDD.', 153 687865866: 'Failed to create a directory to which the correction value ' 154 'file on the Calibration HDD is saved.', 155 687865867: 'Correction data has not been written in the' 156 ' Calibration-specified correction table.', 157 687865868: 'Data received from Calibration HWC does not exist.', 158 687865869: 'Data has not been written to the Flash ROM' 159 ' of Calibration BASE UNIT.', 160 687865870: 'Correction data has not been written to the' 161 ' Calibration-specified sector.', 162 687866111: 'An calibration error other than described above occurred.', 163} 164 165 166def _error_code_tostring(error_code): 167 ''' returns the description of the error from the error code 168 returned by anritsu MD8475A ''' 169 try: 170 error_string = ANRITSU_ERROR_CODES[error_code] 171 except KeyError: 172 error_string = "Error : {} ".format(error_code) 173 174 return error_string 175 176 177class AnritsuUtils(object): 178 def gsm_encode(text): 179 '''To encode text string with GSM 7-bit alphabet for common symbols''' 180 table = {' ': '%20', '!': '%21', '\"': '%22', '#': '%23', '$': '%24', 181 '/': '%2F', '%': '%25', '&': '%26', '\'': '%27', '(': '%28', 182 ')': '%29', '*': '%2A', '+': '%2B', ',': '%2C', ':': '%3A', 183 ';': '%3B', '<': '%3C', '=': '%3D', '>': '%3E', '?': '%3F', 184 '@': '%40', '[': '%5B', ']': '%5D', '_': '%5F', 'é': '%C3%A9'} 185 coded_str = "" 186 for char in text: 187 if char in table: 188 coded_str += table[char] 189 else: 190 coded_str += char 191 return coded_str 192 193 def gsm_decode(text): 194 '''To decode text string with GSM 7-bit alphabet for common symbols''' 195 table = {'%20': ' ', '%21': '!', '%22': '\"', '%23': '#', '%24': '$', 196 '%2F': '/', '%25': '%', '%26': '&', '%27': '\'', '%28': '(', 197 '%29': ')', '%2A': '*', '%2B': '+', '%2C': ',', '%3A': ':', 198 '%3B': ';', '%3C': '<', '%3D': '=', '%3E': '>', '%3F': '?', 199 '%40': '@', '%5B': '[', '%5D': ']', '%5F': '_', '%C3%A9': 'é'} 200 coded_str = text 201 for char in table: 202 if char in text: 203 coded_str = coded_str.replace(char, table[char]) 204 return coded_str 205 206 def cdma_encode(text): 207 '''To encode text string with GSM 7-bit alphabet for common symbols''' 208 table = {' ': '%20', '!': '%21', '\"': '%22', '#': '%23', '$': '%24', 209 '/': '%2F', '%': '%25', '&': '%26', '\'': '%27', '(': '%28', 210 ')': '%29', '*': '%2A', '+': '%2B', ',': '%2C', ':': '%3A', 211 ';': '%3B', '<': '%3C', '=': '%3D', '>': '%3E', '?': '%3F', 212 '@': '%40', '[': '%5B', ']': '%5D', '_': '%5F'} 213 coded_str = "" 214 for char in text: 215 if char in table: 216 coded_str += table[char] 217 else: 218 coded_str += char 219 return coded_str 220 221class AnritsuError(Exception): 222 '''Exception for errors related to Anritsu.''' 223 def __init__(self, error, command=None): 224 self._error_code = error 225 self._error_message = _error_code_tostring(self._error_code) 226 if command is not None: 227 self._error_message = "Command {} returned the error: '{}'".format( 228 command, self._error_message) 229 230 def __str__(self): 231 return self._error_message 232# yapf: enable 233