| | 63 | |
|---|
| | 64 | # This fakes out the source_c(*args) that swig generates and adds **kwargs to it. |
|---|
| | 65 | # I wish I knew a cleaner way to convert the list, but I dont. |
|---|
| | 66 | # This problem might be fixable by using the "-keyword" option passed to swig during compile time. |
|---|
| | 67 | # However, this function is not well documented and can cause errors with overloaded function |
|---|
| | 68 | # (like in shared_ptr.i). While this is kludgey, it solves the keyword argument problem. |
|---|
| | 69 | |
|---|
| | 70 | def process_args(argslist): |
|---|
| | 71 | # process the doc string to get the argument names and default values |
|---|
| | 72 | p = re.compile("\w+=\S*") |
|---|
| | 73 | m = p.findall(argslist) |
|---|
| | 74 | argslist = list() |
|---|
| | 75 | argsvals = list() |
|---|
| | 76 | for val in m: |
|---|
| | 77 | key = val.split("=")[0] |
|---|
| | 78 | value = val.split("=")[1].strip(",)") |
|---|
| | 79 | try: |
|---|
| | 80 | v = int(value) |
|---|
| | 81 | except ValueError: # convert the hex value |
|---|
| | 82 | try: |
|---|
| | 83 | v = int(value,16) |
|---|
| | 84 | except ValueError, e: |
|---|
| | 85 | v = value.strip("\"") |
|---|
| | 86 | argslist.append(key) |
|---|
| | 87 | argsvals.append(v) |
|---|
| | 88 | |
|---|
| | 89 | return (argslist, argsvals) |
|---|
| | 90 | |
|---|
| | 91 | def source_c(*args, **kwargs): |
|---|
| | 92 | constructor_args = _usrp.source_c.__doc__ |
|---|
| | 93 | constructor_args = constructor_args.split("->")[0] |
|---|
| | 94 | argslist, argsvals = process_args(constructor_args) |
|---|
| | 95 | i = 0 |
|---|
| | 96 | for a in argslist: |
|---|
| | 97 | if(kwargs.has_key(a)): |
|---|
| | 98 | argsvals[i] = kwargs[a] |
|---|
| | 99 | i += 1 |
|---|
| | 100 | return _usrp.source_c(*argsvals) |
|---|
| | 101 | |
|---|
| | 102 | def source_s(*args, **kwargs): |
|---|
| | 103 | constructor_args = _usrp.source_s.__doc__ |
|---|
| | 104 | constructor_args = constructor_args.split("->")[0] |
|---|
| | 105 | argslist, argsvals = process_args(constructor_args) |
|---|
| | 106 | i = 0 |
|---|
| | 107 | for a in argslist: |
|---|
| | 108 | if(kwargs.has_key(a)): |
|---|
| | 109 | argsvals[i] = kwargs[a] |
|---|
| | 110 | i += 1 |
|---|
| | 111 | return _usrp.source_s(*argsvals) |
|---|
| | 112 | |
|---|
| | 113 | def sink_c(*args, **kwargs): |
|---|
| | 114 | constructor_args = _usrp.sink_c.__doc__ |
|---|
| | 115 | constructor_args = constructor_args.split("->")[0] |
|---|
| | 116 | argslist, argsvals = process_args(constructor_args) |
|---|
| | 117 | i = 0 |
|---|
| | 118 | for a in argslist: |
|---|
| | 119 | if(kwargs.has_key(a)): |
|---|
| | 120 | argsvals[i] = kwargs[a] |
|---|
| | 121 | i += 1 |
|---|
| | 122 | return _usrp.sink_c(*argsvals) |
|---|
| | 123 | |
|---|
| | 124 | def sink_s(*args, **kwargs): |
|---|
| | 125 | constructor_args = _usrp.sink_s.__doc__ |
|---|
| | 126 | constructor_args = constructor_args.split("->")[0] |
|---|
| | 127 | argslist, argsvals = process_args(constructor_args) |
|---|
| | 128 | i = 0 |
|---|
| | 129 | for a in argslist: |
|---|
| | 130 | if(kwargs.has_key(a)): |
|---|
| | 131 | argsvals[i] = kwargs[a] |
|---|
| | 132 | i += 1 |
|---|
| | 133 | return _usrp.sink_s(*argsvals) |
|---|