33< head >
44 < meta charset ="utf-8 " />
55 < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
6- < title > softioc.device — pythonSoftIOC 4.7.0+3.g09ea964 documentation</ title >
6+ < title > softioc.device — pythonSoftIOC 4.7.0+6.g3126269 documentation</ title >
77 < link rel ="stylesheet " href ="../../_static/pygments.css " type ="text/css " />
88 < link rel ="stylesheet " href ="../../_static/css/theme.css " type ="text/css " />
99 < link rel ="stylesheet " href ="../../_static/theme_overrides.css " type ="text/css " />
@@ -105,7 +105,7 @@ <h1>Source code for softioc.device</h1><div class="highlight"><pre>
105105 < span class ="n "> dbLoadDatabase</ span > < span class ="p "> ,</ span >
106106 < span class ="n "> signal_processing_complete</ span > < span class ="p "> ,</ span >
107107 < span class ="n "> recGblResetAlarms</ span > < span class ="p "> ,</ span >
108- < span class ="n "> db_put_field </ span > < span class ="p "> ,</ span >
108+ < span class ="n "> db_put_field_process </ span > < span class ="p "> ,</ span >
109109 < span class ="n "> db_get_field</ span > < span class ="p "> ,</ span >
110110< span class ="p "> )</ span >
111111< span class ="kn "> from</ span > < span class ="nn "> .device_core</ span > < span class ="kn "> import</ span > < span class ="n "> DeviceSupportCore</ span > < span class ="p "> ,</ span > < span class ="n "> RecordLookup</ span >
@@ -202,7 +202,7 @@ <h1>Source code for softioc.device</h1><div class="highlight"><pre>
202202 < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> c_char</ span > < span class ="o "> *</ span > < span class ="mi "> 40</ span > < span class ="p "> )()</ span >
203203 < span class ="n "> data</ span > < span class ="o "> .</ span > < span class ="n "> value</ span > < span class ="o "> =</ span > < span class ="nb "> str</ span > < span class ="p "> (</ span > < span class ="n "> value</ span > < span class ="p "> )</ span > < span class ="o "> .</ span > < span class ="n "> encode</ span > < span class ="p "> ()</ span > < span class ="o "> +</ span > < span class ="sa "> b</ span > < span class ="s1 "> '</ span > < span class ="se "> \0</ span > < span class ="s1 "> '</ span >
204204 < span class ="n "> name</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _name</ span > < span class ="o "> +</ span > < span class ="s1 "> '.'</ span > < span class ="o "> +</ span > < span class ="n "> field</ span >
205- < span class ="n "> db_put_field </ span > < span class ="p "> (</ span > < span class ="n "> name</ span > < span class ="p "> ,</ span > < span class ="n "> fields</ span > < span class ="o "> .</ span > < span class ="n "> DBF_STRING</ span > < span class ="p "> ,</ span > < span class ="n "> addressof</ span > < span class ="p "> (</ span > < span class ="n "> data</ span > < span class ="p "> ),</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
205+ < span class ="n "> db_put_field_process </ span > < span class ="p "> (</ span > < span class ="n "> name</ span > < span class ="p "> ,</ span > < span class ="n "> fields</ span > < span class ="o "> .</ span > < span class ="n "> DBF_STRING</ span > < span class ="p "> ,</ span > < span class ="n "> addressof</ span > < span class ="p "> (</ span > < span class ="n "> data</ span > < span class ="p "> ),</ span > < span class ="mi "> 1</ span > < span class =" p " > , </ span > < span class =" kc " > True </ span > < span class ="p "> )</ span >
206206
207207< div class ="viewcode-block " id ="ProcessDeviceSupportIn "> < a class ="viewcode-back " href ="../../reference/api.html#softioc.builder.ProcessDeviceSupportIn "> [docs]</ a > < span class ="k "> class</ span > < span class ="nc "> ProcessDeviceSupportIn</ span > < span class ="p "> (</ span > < span class ="n "> ProcessDeviceSupportCore</ span > < span class ="p "> ):</ span >
208208 < span class ="n "> _link_</ span > < span class ="o "> =</ span > < span class ="s1 "> 'INP'</ span >
@@ -272,7 +272,6 @@ <h1>Source code for softioc.device</h1><div class="highlight"><pre>
272272
273273 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __validate</ span > < span class ="o "> =</ span > < span class ="n "> kargs</ span > < span class ="o "> .</ span > < span class ="n "> pop</ span > < span class ="p "> (</ span > < span class ="s1 "> 'validate'</ span > < span class ="p "> ,</ span > < span class ="kc "> None</ span > < span class ="p "> )</ span >
274274 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __always_update</ span > < span class ="o "> =</ span > < span class ="n "> kargs</ span > < span class ="o "> .</ span > < span class ="n "> pop</ span > < span class ="p "> (</ span > < span class ="s1 "> 'always_update'</ span > < span class ="p "> ,</ span > < span class ="kc "> False</ span > < span class ="p "> )</ span >
275- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __enable_write</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span >
276275
277276 < span class ="k "> if</ span > < span class ="s1 "> 'initial_value'</ span > < span class ="ow "> in</ span > < span class ="n "> kargs</ span > < span class ="p "> :</ span >
278277 < span class ="n "> value</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _value_to_epics</ span > < span class ="p "> (</ span > < span class ="n "> kargs</ span > < span class ="o "> .</ span > < span class ="n "> pop</ span > < span class ="p "> (</ span > < span class ="s1 "> 'initial_value'</ span > < span class ="p "> ))</ span >
@@ -333,8 +332,7 @@ <h1>Source code for softioc.device</h1><div class="highlight"><pre>
333332 < span class ="k "> return</ span > < span class ="n "> EPICS_OK</ span >
334333
335334 < span class ="n "> python_value</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _epics_to_value</ span > < span class ="p "> (</ span > < span class ="n "> value</ span > < span class ="p "> )</ span >
336- < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __enable_write</ span > < span class ="ow "> and</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __validate</ span > < span class ="ow "> and</ span > \
337- < span class ="ow "> not</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __validate</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> python_value</ span > < span class ="p "> ):</ span >
335+ < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __validate</ span > < span class ="ow "> and</ span > < span class ="ow "> not</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __validate</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> python_value</ span > < span class ="p "> ):</ span >
338336 < span class ="c1 "> # Asynchronous validation rejects value, so restore the last good</ span >
339337 < span class ="c1 "> # value.</ span >
340338 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _write_value</ span > < span class ="p "> (</ span > < span class ="n "> record</ span > < span class ="p "> ,</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _value</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ])</ span >
@@ -343,7 +341,7 @@ <h1>Source code for softioc.device</h1><div class="highlight"><pre>
343341 < span class ="c1 "> # Value is good. Hang onto it, let users know the value has changed</ span >
344342 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _value</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span > < span class ="n "> severity</ span > < span class ="p "> ,</ span > < span class ="n "> alarm</ span > < span class ="p "> )</ span >
345343 < span class ="n "> record</ span > < span class ="o "> .</ span > < span class ="n "> UDF</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span >
346- < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __on_update</ span > < span class =" ow " > and </ span > < span class =" bp " > self </ span > < span class =" o " > . </ span > < span class =" n " > __enable_write </ span > < span class ="p "> :</ span >
344+ < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __on_update</ span > < span class ="p "> :</ span >
347345 < span class ="n "> record</ span > < span class ="o "> .</ span > < span class ="n "> PACT</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _blocking</ span >
348346 < span class ="n "> dispatcher</ span > < span class ="p "> (</ span >
349347 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __on_update</ span > < span class ="p "> ,</ span >
@@ -381,9 +379,15 @@ <h1>Source code for softioc.device</h1><div class="highlight"><pre>
381379 < span class ="k "> else</ span > < span class ="p "> :</ span >
382380 < span class ="c1 "> # The array parameter is used to keep the raw pointer alive</ span >
383381 < span class ="n "> dbf_code</ span > < span class ="p "> ,</ span > < span class ="n "> length</ span > < span class ="p "> ,</ span > < span class ="n "> data</ span > < span class ="p "> ,</ span > < span class ="n "> array</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _value_to_dbr</ span > < span class ="p "> (</ span > < span class ="n "> value</ span > < span class ="p "> )</ span >
384- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __enable_write</ span > < span class ="o "> =</ span > < span class ="n "> process</ span >
385- < span class ="n "> db_put_field</ span > < span class ="p "> (</ span > < span class ="n "> _record</ span > < span class ="o "> .</ span > < span class ="n "> NAME</ span > < span class ="p "> ,</ span > < span class ="n "> dbf_code</ span > < span class ="p "> ,</ span > < span class ="n "> data</ span > < span class ="p "> ,</ span > < span class ="n "> length</ span > < span class ="p "> )</ span >
386- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __enable_write</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > </ div >
382+
383+ < span class ="c1 "> # If we do process we instead do this inside _process, allowing</ span >
384+ < span class ="c1 "> # validation to potentially refuse the update.</ span >
385+ < span class ="c1 "> # However if we do not process, we must do this here to keep the</ span >
386+ < span class ="c1 "> # Python and EPICS values in line</ span >
387+ < span class ="k "> if</ span > < span class ="ow "> not</ span > < span class ="n "> process</ span > < span class ="p "> :</ span >
388+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _value</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span > < span class ="n "> severity</ span > < span class ="p "> ,</ span > < span class ="n "> alarm</ span > < span class ="p "> )</ span >
389+
390+ < span class ="n "> db_put_field_process</ span > < span class ="p "> (</ span > < span class ="n "> _record</ span > < span class ="o "> .</ span > < span class ="n "> NAME</ span > < span class ="p "> ,</ span > < span class ="n "> dbf_code</ span > < span class ="p "> ,</ span > < span class ="n "> data</ span > < span class ="p "> ,</ span > < span class ="n "> length</ span > < span class ="p "> ,</ span > < span class ="n "> process</ span > < span class ="p "> )</ span > </ div >
387391
388392< div class ="viewcode-block " id ="ProcessDeviceSupportOut.get "> < a class ="viewcode-back " href ="../../reference/api.html#softioc.builder.ProcessDeviceSupportOut.get "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> get</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
389393 < span class ="k "> return</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _epics_to_value</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _value</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ])</ span > </ div > </ div >
0 commit comments