root / gnuradio-core / src / python / gnuradio / eng_option.py @ 5d69a524
History | View | Annotate | Download (2.4 kB)
| 1 | 5d69a524 | jcorgan | #
|
|---|---|---|---|
| 2 | 5d69a524 | jcorgan | # Copyright 2004 Free Software Foundation, Inc.
|
| 3 | 5d69a524 | jcorgan | #
|
| 4 | 5d69a524 | jcorgan | # This file is part of GNU Radio
|
| 5 | 5d69a524 | jcorgan | #
|
| 6 | 5d69a524 | jcorgan | # GNU Radio is free software; you can redistribute it and/or modify
|
| 7 | 5d69a524 | jcorgan | # it under the terms of the GNU General Public License as published by
|
| 8 | 5d69a524 | jcorgan | # the Free Software Foundation; either version 2, or (at your option)
|
| 9 | 5d69a524 | jcorgan | # any later version.
|
| 10 | 5d69a524 | jcorgan | #
|
| 11 | 5d69a524 | jcorgan | # GNU Radio is distributed in the hope that it will be useful,
|
| 12 | 5d69a524 | jcorgan | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 13 | 5d69a524 | jcorgan | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 14 | 5d69a524 | jcorgan | # GNU General Public License for more details.
|
| 15 | 5d69a524 | jcorgan | #
|
| 16 | 5d69a524 | jcorgan | # You should have received a copy of the GNU General Public License
|
| 17 | 5d69a524 | jcorgan | # along with GNU Radio; see the file COPYING. If not, write to
|
| 18 | 5d69a524 | jcorgan | # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
| 19 | 5d69a524 | jcorgan | # Boston, MA 02111-1307, USA.
|
| 20 | 5d69a524 | jcorgan | #
|
| 21 | 5d69a524 | jcorgan | |
| 22 | 5d69a524 | jcorgan | '''Add support for engineering notation to optparse.OptionParser'''
|
| 23 | 5d69a524 | jcorgan | |
| 24 | 5d69a524 | jcorgan | from copy import copy |
| 25 | 5d69a524 | jcorgan | from optparse import Option, OptionValueError |
| 26 | 5d69a524 | jcorgan | |
| 27 | 5d69a524 | jcorgan | scale_factor = {}
|
| 28 | 5d69a524 | jcorgan | scale_factor['E'] = 1e18 |
| 29 | 5d69a524 | jcorgan | scale_factor['P'] = 1e15 |
| 30 | 5d69a524 | jcorgan | scale_factor['T'] = 1e12 |
| 31 | 5d69a524 | jcorgan | scale_factor['G'] = 1e9 |
| 32 | 5d69a524 | jcorgan | scale_factor['M'] = 1e6 |
| 33 | 5d69a524 | jcorgan | scale_factor['k'] = 1e3 |
| 34 | 5d69a524 | jcorgan | scale_factor['m'] = 1e-3 |
| 35 | 5d69a524 | jcorgan | scale_factor['u'] = 1e-6 |
| 36 | 5d69a524 | jcorgan | scale_factor['n'] = 1e-9 |
| 37 | 5d69a524 | jcorgan | scale_factor['p'] = 1e-12 |
| 38 | 5d69a524 | jcorgan | scale_factor['f'] = 1e-15 |
| 39 | 5d69a524 | jcorgan | scale_factor['a'] = 1e-18 |
| 40 | 5d69a524 | jcorgan | |
| 41 | 5d69a524 | jcorgan | |
| 42 | 5d69a524 | jcorgan | def check_eng_float (option, opt, value): |
| 43 | 5d69a524 | jcorgan | try:
|
| 44 | 5d69a524 | jcorgan | scale = 1.0
|
| 45 | 5d69a524 | jcorgan | suffix = value[-1]
|
| 46 | 5d69a524 | jcorgan | if scale_factor.has_key (suffix):
|
| 47 | 5d69a524 | jcorgan | return float (value[0:-1]) * scale_factor[suffix] |
| 48 | 5d69a524 | jcorgan | return float (value) |
| 49 | 5d69a524 | jcorgan | except:
|
| 50 | 5d69a524 | jcorgan | raise OptionValueError (
|
| 51 | 5d69a524 | jcorgan | "option %s: invalid engineering notation value: %r" % (opt, value))
|
| 52 | 5d69a524 | jcorgan | |
| 53 | 5d69a524 | jcorgan | def check_intx (option, opt, value): |
| 54 | 5d69a524 | jcorgan | try:
|
| 55 | 5d69a524 | jcorgan | return int (value, 0) |
| 56 | 5d69a524 | jcorgan | except:
|
| 57 | 5d69a524 | jcorgan | raise OptionValueError (
|
| 58 | 5d69a524 | jcorgan | "option %s: invalid integer value: %r" % (opt, value))
|
| 59 | 5d69a524 | jcorgan | |
| 60 | 5d69a524 | jcorgan | def check_subdev (option, opt, value): |
| 61 | 5d69a524 | jcorgan | """
|
| 62 | 5d69a524 | jcorgan | Value has the form: (A|B)(:0|1)?
|
| 63 | 5d69a524 | jcorgan | |
| 64 | 5d69a524 | jcorgan | @returns a 2-tuple (0|1, 0|1)
|
| 65 | 5d69a524 | jcorgan | """ |
| 66 | 5d69a524 | jcorgan | d = { 'A' : (0, 0), 'A:0' : (0, 0), 'A:1' : (0, 1),
|
| 67 | 5d69a524 | jcorgan | 'B' : (1, 0), 'B:0' : (1, 0), 'B:1' : (1, 1) } |
| 68 | 5d69a524 | jcorgan | try:
|
| 69 | 5d69a524 | jcorgan | return d[value.upper()]
|
| 70 | 5d69a524 | jcorgan | except:
|
| 71 | 5d69a524 | jcorgan | raise OptionValueError(
|
| 72 | 5d69a524 | jcorgan | "option %s: invalid subdev: '%r', must be one of A, B, A:0, A:1, B:0, B:1" % (opt, value))
|
| 73 | 5d69a524 | jcorgan | |
| 74 | 5d69a524 | jcorgan | class eng_option (Option): |
| 75 | 5d69a524 | jcorgan | TYPES = Option.TYPES + ("eng_float", "intx", "subdev") |
| 76 | 5d69a524 | jcorgan | TYPE_CHECKER = copy (Option.TYPE_CHECKER) |
| 77 | 5d69a524 | jcorgan | TYPE_CHECKER["eng_float"] = check_eng_float
|
| 78 | 5d69a524 | jcorgan | TYPE_CHECKER["intx"] = check_intx
|
| 79 | 5d69a524 | jcorgan | TYPE_CHECKER["subdev"] = check_subdev
|