Statistics
| Branch: | Tag: | Revision:

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