[6320] | 1 | # -*- coding: utf-8 -*- |
---|
| 2 | """ |
---|
| 3 | ------------------------------------------------------------------------------ |
---|
| 4 | Mango 802.11 Reference Design Experiments Framework - Version Utils |
---|
| 5 | ------------------------------------------------------------------------------ |
---|
| 6 | License: Copyright 2019 Mango Communications, Inc. All rights reserved. |
---|
| 7 | Use and distribution subject to terms in LICENSE.txt |
---|
| 8 | ------------------------------------------------------------------------------ |
---|
| 9 | |
---|
| 10 | This module provides wlan_exp version information and commands. |
---|
| 11 | |
---|
| 12 | Functions (see below for more information): |
---|
| 13 | wlan_exp_ver() -- Returns wlan_exp version |
---|
| 14 | wlan_exp_ver_check() -- Checks the provided version against the wlan_exp version |
---|
| 15 | wlan_exp_ver_str() -- Returns string of wlan_exp version |
---|
| 16 | |
---|
| 17 | Integer constants: |
---|
| 18 | WLAN_EXP_MAJOR, WLAN_EXP_MINOR, WLAN_EXP_REVISION, WLAN_EXP_XTRA, |
---|
| 19 | WLAN_EXP_RELEASE -- wlan_exp verision constants |
---|
| 20 | |
---|
| 21 | """ |
---|
| 22 | |
---|
| 23 | import os |
---|
| 24 | import inspect |
---|
| 25 | |
---|
| 26 | |
---|
| 27 | __all__ = ['wlan_exp_ver', 'wlan_exp_ver_check', 'wlan_exp_ver_str'] |
---|
| 28 | |
---|
| 29 | |
---|
| 30 | # Version defines |
---|
| 31 | WLAN_EXP_MAJOR = 1 |
---|
| 32 | WLAN_EXP_MINOR = 8 |
---|
| 33 | WLAN_EXP_REVISION = 0 |
---|
| 34 | WLAN_EXP_XTRA = str('') |
---|
| 35 | WLAN_EXP_RELEASE = True |
---|
| 36 | |
---|
| 37 | # Version string |
---|
| 38 | version = "wlan_exp v" |
---|
| 39 | version += "{0:d}.".format(WLAN_EXP_MAJOR) |
---|
| 40 | version += "{0:d}.".format(WLAN_EXP_MINOR) |
---|
| 41 | version += "{0:d} ".format(WLAN_EXP_REVISION) |
---|
| 42 | version += "{0:s} ".format(WLAN_EXP_XTRA) |
---|
| 43 | |
---|
| 44 | |
---|
| 45 | # Version number |
---|
| 46 | version_number = "{0:d}.".format(WLAN_EXP_MAJOR) |
---|
| 47 | version_number += "{0:d}.".format(WLAN_EXP_MINOR) |
---|
| 48 | version_number += "{0:d} ".format(WLAN_EXP_REVISION) |
---|
| 49 | |
---|
| 50 | |
---|
| 51 | # Status defines for wlan_ver_check |
---|
| 52 | WLAN_EXP_VERSION_SAME = 0 |
---|
| 53 | WLAN_EXP_VERSION_NEWER = 1 |
---|
| 54 | WLAN_EXP_VERSION_OLDER = -1 |
---|
| 55 | |
---|
| 56 | |
---|
| 57 | #----------------------------------------------------------------------------- |
---|
| 58 | # Version Exception |
---|
| 59 | #----------------------------------------------------------------------------- |
---|
| 60 | |
---|
| 61 | class VersionError(Exception): |
---|
| 62 | """Exception for version errors. |
---|
| 63 | |
---|
| 64 | Attributes: |
---|
| 65 | message -- explanation message of the error |
---|
| 66 | """ |
---|
| 67 | def __init__(self, message): |
---|
| 68 | self.message = message |
---|
| 69 | |
---|
| 70 | def __str__(self): |
---|
| 71 | msg = "Version Error:" |
---|
| 72 | msg += " {0} \n".format(self.message) |
---|
| 73 | return msg |
---|
| 74 | |
---|
| 75 | # End Class |
---|
| 76 | |
---|
| 77 | |
---|
| 78 | #----------------------------------------------------------------------------- |
---|
| 79 | # Version Utilities |
---|
| 80 | #----------------------------------------------------------------------------- |
---|
| 81 | def wlan_exp_ver(): |
---|
| 82 | """Returns the version of WlanExp for this package.""" |
---|
| 83 | # Print the release message if this is not an official release |
---|
| 84 | if not WLAN_EXP_RELEASE: |
---|
| 85 | print("-" * 60) |
---|
| 86 | print("You are running a version of wlan_exp that may not be ") |
---|
| 87 | print("compatible with released wlan_exp bitstreams. Please use ") |
---|
| 88 | print("at your own risk.") |
---|
| 89 | print("-" * 60) |
---|
| 90 | |
---|
| 91 | return (WLAN_EXP_MAJOR, WLAN_EXP_MINOR, WLAN_EXP_REVISION) |
---|
| 92 | |
---|
| 93 | # End of wlan_exp_ver() |
---|
| 94 | |
---|
| 95 | |
---|
| 96 | def wlan_exp_ver_check(ver_str=None, major=None, minor=None, revision=None, |
---|
| 97 | caller_desc=None): |
---|
| 98 | """Checks the version of wlan_exp for this package. |
---|
| 99 | |
---|
| 100 | This function will print a warning message if the version specified |
---|
| 101 | is older than the current version and will raise a VersionError |
---|
| 102 | if the version specified is newer than the current version. |
---|
| 103 | |
---|
| 104 | Args: |
---|
| 105 | ver_str -- Version string returned by wlan_exp_ver_str() |
---|
| 106 | major -- Major release number for wlan_exp |
---|
| 107 | minor -- Minor release number for wlan_exp |
---|
| 108 | revision -- Revision release number for wlan_exp |
---|
| 109 | |
---|
| 110 | The ver_str attribute takes precedence over the major, minor, revsion |
---|
| 111 | attributes. |
---|
| 112 | """ |
---|
| 113 | status = WLAN_EXP_VERSION_SAME |
---|
| 114 | print_msg = False |
---|
| 115 | raise_ex = False |
---|
| 116 | |
---|
| 117 | if not ver_str is None: |
---|
| 118 | try: |
---|
| 119 | temp = ver_str.split(" ") |
---|
| 120 | (major, minor, revision) = temp[0].split(".") |
---|
| 121 | except AttributeError: |
---|
| 122 | msg = "ERROR: input parameter ver_str not valid" |
---|
| 123 | raise AttributeError(msg) |
---|
| 124 | |
---|
| 125 | # If ver_str was not specified, then major, minor, revision should be defined |
---|
| 126 | # and contain strings. Need to convert to integers. |
---|
| 127 | try: |
---|
| 128 | major = int(major) |
---|
| 129 | minor = int(minor) |
---|
| 130 | revision = int(revision) |
---|
| 131 | except ValueError: |
---|
| 132 | msg = "ERROR: input parameters major, minor, revision not valid" |
---|
| 133 | raise AttributeError(msg) |
---|
| 134 | |
---|
| 135 | # Check the provided version vs the current version |
---|
| 136 | if (caller_desc is None): |
---|
| 137 | msg = "wlan_exp Version Mismatch: \n" |
---|
| 138 | msg += " Caller is using wlan_exp package version: {0}\n".format(wlan_exp_ver_str(major, minor, revision)) |
---|
| 139 | else: |
---|
| 140 | msg = "wlan_exp Version Mismatch: \n" |
---|
| 141 | msg += " " + str(caller_desc) |
---|
| 142 | |
---|
| 143 | msg += " Current wlan_exp package version: {0}".format(wlan_exp_ver_str()) |
---|
| 144 | |
---|
| 145 | # Given there might be changes that break things, always raise an |
---|
| 146 | # exception on version mismatch |
---|
| 147 | if (major == WLAN_EXP_MAJOR): |
---|
| 148 | if (minor == WLAN_EXP_MINOR): |
---|
| 149 | if (revision != WLAN_EXP_REVISION): |
---|
| 150 | if (revision < WLAN_EXP_REVISION): |
---|
| 151 | msg += " (newer)\n" |
---|
| 152 | status = WLAN_EXP_VERSION_NEWER |
---|
| 153 | raise_ex = True |
---|
| 154 | else: |
---|
| 155 | msg += " (older)\n" |
---|
| 156 | status = WLAN_EXP_VERSION_OLDER |
---|
| 157 | raise_ex = True |
---|
| 158 | else: |
---|
| 159 | if (minor < WLAN_EXP_MINOR): |
---|
| 160 | msg += " (newer)\n" |
---|
| 161 | status = WLAN_EXP_VERSION_NEWER |
---|
| 162 | raise_ex = True |
---|
| 163 | else: |
---|
| 164 | msg += " (older)\n" |
---|
| 165 | status = WLAN_EXP_VERSION_OLDER |
---|
| 166 | raise_ex = True |
---|
| 167 | else: |
---|
| 168 | if (major < WLAN_EXP_MAJOR): |
---|
| 169 | msg += " (newer)\n" |
---|
| 170 | status = WLAN_EXP_VERSION_NEWER |
---|
| 171 | raise_ex = True |
---|
| 172 | else: |
---|
| 173 | msg += " (older)\n" |
---|
| 174 | status = WLAN_EXP_VERSION_OLDER |
---|
| 175 | raise_ex = True |
---|
| 176 | |
---|
| 177 | msg += " ({0})\n".format(__file__) |
---|
| 178 | |
---|
| 179 | if print_msg: |
---|
| 180 | print(msg) |
---|
| 181 | |
---|
| 182 | if raise_ex: |
---|
| 183 | raise VersionError(msg) |
---|
| 184 | |
---|
| 185 | return status |
---|
| 186 | |
---|
| 187 | # End def |
---|
| 188 | |
---|
| 189 | |
---|
| 190 | def print_wlan_exp_ver(): |
---|
| 191 | """Print the wlan_exp Version.""" |
---|
| 192 | print("wlan_exp v" + wlan_exp_ver_str() + "\n") |
---|
| 193 | print("Framework Location:") |
---|
| 194 | print(os.path.dirname( |
---|
| 195 | os.path.abspath(inspect.getfile(inspect.currentframe())))) |
---|
| 196 | |
---|
| 197 | # End def |
---|
| 198 | |
---|
| 199 | |
---|
| 200 | def wlan_exp_ver_str(major=WLAN_EXP_MAJOR, minor=WLAN_EXP_MINOR, |
---|
| 201 | revision=WLAN_EXP_REVISION, xtra=WLAN_EXP_XTRA): |
---|
| 202 | """Return a string of the wlan_exp version. |
---|
| 203 | |
---|
| 204 | This will raise a VersionError if the arguments are not integers. |
---|
| 205 | """ |
---|
| 206 | try: |
---|
| 207 | msg = "{0:d}.".format(major) |
---|
| 208 | msg += "{0:d}.".format(minor) |
---|
| 209 | msg += "{0:d} ".format(revision) |
---|
| 210 | msg += "{0:s}".format(xtra) |
---|
| 211 | except ValueError: |
---|
| 212 | # Set output string to default values so program can continue |
---|
| 213 | error = "WARNING: Unknown Argument - All arguments should be integers\n" |
---|
| 214 | error += " Setting wlan_exp version string to default." |
---|
| 215 | print(error) |
---|
| 216 | |
---|
| 217 | msg = "{0:d}.".format(WLAN_EXP_MAJOR) |
---|
| 218 | msg += "{0:d}.".format(WLAN_EXP_MINOR) |
---|
| 219 | msg += "{0:d} ".format(WLAN_EXP_REVISION) |
---|
| 220 | msg += "{0:s}".format(WLAN_EXP_XTRA) |
---|
| 221 | |
---|
| 222 | return msg |
---|
| 223 | |
---|
| 224 | # End def |
---|
| 225 | |
---|
| 226 | |
---|
| 227 | def wlan_exp_ver_code_to_str(ver_code): |
---|
| 228 | """Convert four byte version code with format [x major minor rev] to a string.""" |
---|
| 229 | ver = int(ver_code) |
---|
| 230 | return wlan_exp_ver_str(((ver >> 24) & 0xFF), ((ver >> 16) & 0xFF), ((ver >> 0) & 0xFF)) |
---|
| 231 | |
---|
| 232 | # End def |
---|