caproto.ioc_examples.io_interrupt.IOInterruptIOC¶
- class caproto.ioc_examples.io_interrupt.IOInterruptIOC(prefix: str, *, macros: Dict[str, str] | None = None, parent: PVGroup | None = None, name: str | None = None)[source]¶
An IOC that updates on keypress events.
¶ Attribute
Suffix
Docs
Type
Notes
Alarm Group
keypress
keypress
Latest keypress
str
Read-only Length(10) Startup
Methods
group_read
(instance)Generic read called for channels without get defined
group_write
(instance, value)Generic write called for channels without put defined
Attributes
default_values
type_map
type_map_read_only
pvdb
attr_pvdb
attr_to_pvname
groups
pvproperty methods
- keypress.startup(self, instance, async_lib)¶
Source code: keypress.startup
78 @keypress.startup 79 async def keypress(self, instance, async_lib): 80 # This method will be called when the server starts up. 81 print('* keypress method called at server startup') 82 queue = async_lib.ThreadsafeQueue() 83 84 # Start a separate thread that monitors keyboard input, telling it to 85 # put new values into our async-friendly queue 86 thread = threading.Thread( 87 target=start_io_interrupt_monitor, 88 daemon=True, 89 kwargs=dict(new_value_callback=queue.put) 90 ) 91 thread.start() 92 93 # Loop and grab items from the queue one at a time 94 while True: 95 value = await queue.async_get() 96 print(f'Saw new value on async side: {value!r}') 97 98 # Propagate the keypress to the EPICS PV, triggering any monitors 99 # along the way 100 await self.keypress.write(str(value))