|
18 | 18 | # The SCAN field for all input records defaults to I/O Intr. |
19 | 19 |
|
20 | 20 |
|
21 | | -def _in_record(record, name, **fields): |
22 | | - '''For input records we provide some automatic extra features: scanning, |
23 | | - initialisation as appropriate, and blocking puts from outside the IOC.''' |
24 | | - |
| 21 | +def _set_in_defaults(fields): |
25 | 22 | fields.setdefault('SCAN', 'I/O Intr') |
26 | | - if 'initial_value' in fields: |
27 | | - fields.setdefault('PINI', 'YES') |
| 23 | + fields.setdefault('PINI', 'YES') |
28 | 24 | fields.setdefault('DISP', 1) |
29 | | - return getattr(PythonDevice, record)(name, **fields) |
| 25 | + |
| 26 | +def _set_out_defaults(fields): |
| 27 | + fields.setdefault('OMSL', 'supervisory') |
| 28 | + |
| 29 | +# For longout and ao we want DRV{L,H} to match {L,H}OPR by default |
| 30 | +def _set_scalar_out_defaults(fields, DRVL, DRVH): |
| 31 | + fields['DRVL'] = DRVL |
| 32 | + fields['DRVH'] = DRVH |
| 33 | + fields.setdefault('LOPR', DRVL) |
| 34 | + fields.setdefault('HOPR', DRVH) |
30 | 35 |
|
31 | 36 |
|
32 | | -def aIn(name, LOPR=None, HOPR=None, **fields): |
33 | | - return _in_record( |
34 | | - 'ai', name, LOPR = LOPR, HOPR = HOPR, **fields) |
| 37 | +def aIn(name, LOPR=None, HOPR=None, EGU=None, PREC=None, **fields): |
| 38 | + _set_in_defaults(fields) |
| 39 | + return PythonDevice.ai( |
| 40 | + name, LOPR = LOPR, HOPR = HOPR, EGU = EGU, PREC = PREC, **fields) |
35 | 41 |
|
36 | | -def aOut(name, LOPR=None, HOPR=None, **fields): |
37 | | - fields.setdefault('DRVL', LOPR) |
38 | | - fields.setdefault('DRVH', HOPR) |
39 | | - return PythonDevice.ao( |
40 | | - name, LOPR = LOPR, HOPR = HOPR, **fields) |
| 42 | +def aOut(name, DRVL=None, DRVH=None, EGU=None, PREC=None, **fields): |
| 43 | + _set_out_defaults(fields) |
| 44 | + _set_scalar_out_defaults(fields, DRVL, DRVH) |
| 45 | + return PythonDevice.ao(name, EGU = EGU, PREC = PREC, **fields) |
41 | 46 |
|
42 | 47 |
|
43 | 48 | def boolIn(name, ZNAM=None, ONAM=None, **fields): |
44 | | - return _in_record('bi', name, ZNAM = ZNAM, ONAM = ONAM, **fields) |
| 49 | + _set_in_defaults(fields) |
| 50 | + return PythonDevice.bi(name, ZNAM = ZNAM, ONAM = ONAM, **fields) |
45 | 51 |
|
46 | 52 | def boolOut(name, ZNAM=None, ONAM=None, **fields): |
47 | | - return PythonDevice.bo( |
48 | | - name, OMSL = 'supervisory', ZNAM = ZNAM, ONAM = ONAM, **fields) |
| 53 | + _set_out_defaults(fields) |
| 54 | + return PythonDevice.bo(name, ZNAM = ZNAM, ONAM = ONAM, **fields) |
49 | 55 |
|
50 | 56 |
|
51 | 57 | def longIn(name, LOPR=None, HOPR=None, EGU=None, **fields): |
| 58 | + _set_in_defaults(fields) |
52 | 59 | fields.setdefault('MDEL', -1) |
53 | | - return _in_record( |
54 | | - 'longin', name, EGU = EGU, LOPR = LOPR, HOPR = HOPR, **fields) |
| 60 | + return PythonDevice.longin( |
| 61 | + name, LOPR = LOPR, HOPR = HOPR, EGU = EGU, **fields) |
55 | 62 |
|
56 | 63 | def longOut(name, DRVL=None, DRVH=None, EGU=None, **fields): |
57 | | - return PythonDevice.longout( |
58 | | - name, OMSL = 'supervisory', DRVL = DRVL, DRVH = DRVH, EGU = EGU, |
59 | | - **fields) |
| 64 | + _set_out_defaults(fields) |
| 65 | + _set_scalar_out_defaults(fields, DRVL, DRVH) |
| 66 | + return PythonDevice.longout(name, EGU = EGU, **fields) |
60 | 67 |
|
61 | 68 |
|
62 | 69 | # Field name prefixes for mbbi/mbbo records. |
@@ -92,17 +99,21 @@ def process_value(prefix, value, option, severity=None): |
92 | 99 |
|
93 | 100 | def mbbIn(name, *options, **fields): |
94 | 101 | _process_mbb_values(options, fields) |
95 | | - return _in_record('mbbi', name, **fields) |
| 102 | + _set_in_defaults(fields) |
| 103 | + return PythonDevice.mbbi(name, **fields) |
96 | 104 |
|
97 | 105 | def mbbOut(name, *options, **fields): |
98 | 106 | _process_mbb_values(options, fields) |
99 | | - return PythonDevice.mbbo(name, OMSL = 'supervisory', **fields) |
| 107 | + _set_out_defaults(fields) |
| 108 | + return PythonDevice.mbbo(name, **fields) |
100 | 109 |
|
101 | 110 |
|
102 | 111 | def stringIn(name, **fields): |
103 | | - return _in_record('stringin', name, **fields) |
| 112 | + _set_in_defaults(fields) |
| 113 | + return PythonDevice.stringin(name, **fields) |
104 | 114 |
|
105 | 115 | def stringOut(name, **fields): |
| 116 | + _set_out_defaults(fields) |
106 | 117 | return PythonDevice.stringout(name, **fields) |
107 | 118 |
|
108 | 119 | def Action(name, **fields): |
@@ -204,7 +215,8 @@ def _waveform(value, fields): |
204 | 215 |
|
205 | 216 | def Waveform(name, *value, **fields): |
206 | 217 | _waveform(value, fields) |
207 | | - return _in_record('waveform', name, **fields) |
| 218 | + _set_in_defaults(fields) |
| 219 | + return PythonDevice.waveform(name, **fields) |
208 | 220 |
|
209 | 221 | WaveformIn = Waveform |
210 | 222 |
|
@@ -232,7 +244,8 @@ def _long_string(fields): |
232 | 244 |
|
233 | 245 | def longStringIn(name, **fields): |
234 | 246 | _long_string(fields) |
235 | | - return _in_record('long_stringin', name, **fields) |
| 247 | + _set_in_defaults(fields) |
| 248 | + return PythonDevice.long_stringin(name, **fields) |
236 | 249 |
|
237 | 250 | def longStringOut(name, **fields): |
238 | 251 | _long_string(fields) |
|
0 commit comments