| 
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