@@ -172,22 +172,43 @@ async def async_record_set(value: T):
172172
173173
174174def _get_input_record (pv : str , attribute : AttrR ) -> RecordWrapper :
175+ attribute_fields = {}
176+ if attribute .description is not None :
177+ attribute_fields .update ({"DESC" : attribute .description })
178+
175179 if attr_is_enum (attribute ):
176180 assert attribute .allowed_values is not None and all (
177181 isinstance (v , str ) for v in attribute .allowed_values
178182 )
179183 state_keys = dict (zip (MBB_STATE_FIELDS , attribute .allowed_values , strict = False ))
180- return builder .mbbIn (pv , ** state_keys )
184+ return builder .mbbIn (pv , ** state_keys , ** attribute_fields )
181185
182186 match attribute .datatype :
183187 case Bool (znam , onam ):
184- return builder .boolIn (pv , ZNAM = znam , ONAM = onam )
185- case Int ():
186- return builder .longIn (pv )
187- case Float (prec ):
188- return builder .aIn (pv , PREC = prec )
188+ return builder .boolIn (pv , ZNAM = znam , ONAM = onam , ** attribute_fields )
189+ case Int (units , min , max , min_alarm , max_alarm ):
190+ return builder .longIn (
191+ pv ,
192+ EGU = units ,
193+ DRVL = min ,
194+ DRVH = max ,
195+ LOPR = min_alarm ,
196+ HOPR = max_alarm ,
197+ ** attribute_fields ,
198+ )
199+ case Float (prec , units , min , max , min_alarm , max_alarm ):
200+ return builder .aIn (
201+ pv ,
202+ PREC = prec ,
203+ EGU = units ,
204+ DRVL = min ,
205+ DRVH = max ,
206+ LOPR = min_alarm ,
207+ HOPR = max_alarm ,
208+ ** attribute_fields ,
209+ )
189210 case String ():
190- return builder .longStringIn (pv )
211+ return builder .longStringIn (pv , ** attribute_fields )
191212 case _:
192213 raise FastCSException (
193214 f"Unsupported type { type (attribute .datatype )} : { attribute .datatype } "
@@ -224,12 +245,21 @@ async def async_write_display(value: T):
224245
225246
226247def _get_output_record (pv : str , attribute : AttrW , on_update : Callable ) -> Any :
248+ attribute_fields = {}
249+ if attribute .description is not None :
250+ attribute_fields .update ({"DESC" : attribute .description })
227251 if attr_is_enum (attribute ):
228252 assert attribute .allowed_values is not None and all (
229253 isinstance (v , str ) for v in attribute .allowed_values
230254 )
231255 state_keys = dict (zip (MBB_STATE_FIELDS , attribute .allowed_values , strict = False ))
232- return builder .mbbOut (pv , always_update = True , on_update = on_update , ** state_keys )
256+ return builder .mbbOut (
257+ pv ,
258+ always_update = True ,
259+ on_update = on_update ,
260+ ** state_keys ,
261+ ** attribute_fields ,
262+ )
233263
234264 match attribute .datatype :
235265 case Bool (znam , onam ):
@@ -240,12 +270,35 @@ def _get_output_record(pv: str, attribute: AttrW, on_update: Callable) -> Any:
240270 always_update = True ,
241271 on_update = on_update ,
242272 )
243- case Int ():
244- return builder .longOut (pv , always_update = True , on_update = on_update )
245- case Float (prec ):
246- return builder .aOut (pv , always_update = True , on_update = on_update , PREC = prec )
273+ case Int (units , min , max , min_alarm , max_alarm ):
274+ return builder .longOut (
275+ pv ,
276+ always_update = True ,
277+ on_update = on_update ,
278+ EGU = units ,
279+ DRVL = min ,
280+ DRVH = max ,
281+ LOPR = min_alarm ,
282+ HOPR = max_alarm ,
283+ ** attribute_fields ,
284+ )
285+ case Float (prec , units , min , max , min_alarm , max_alarm ):
286+ return builder .aOut (
287+ pv ,
288+ always_update = True ,
289+ on_update = on_update ,
290+ PREC = prec ,
291+ EGU = units ,
292+ DRVL = min ,
293+ DRVH = max ,
294+ LOPR = min_alarm ,
295+ HOPR = max_alarm ,
296+ ** attribute_fields ,
297+ )
247298 case String ():
248- return builder .longStringOut (pv , always_update = True , on_update = on_update )
299+ return builder .longStringOut (
300+ pv , always_update = True , on_update = on_update , ** attribute_fields
301+ )
249302 case _:
250303 raise FastCSException (
251304 f"Unsupported type { type (attribute .datatype )} : { attribute .datatype } "
0 commit comments