Ejemplo n.º 1
0
    def __init__(self, *, fs):
        self._fs = fs

        # this assumes a sub-class creates self.zclient and then calls
        # super()
        self.frametime_channel = ChannelGeRMFrameTime(
            value=1, zclient=self.zclient)

        # limited length, but works!
        self.filepath_channel = ca.ChannelString(
            value=b'/tmp/test', string_encoding='latin-1')
        self.last_file_channel = ca.ChannelString(
            value=b'null', string_encoding='latin-1')

        self.count_channel = ca.ChannelInteger(value=0)
        self.overfill_channel = ca.ChannelInteger(value=0)
        self.last_frame_channel = ca.ChannelInteger(value=0)

        self.uid_chip_channel = ca.ChannelString(
            value=b'null', string_encoding='latin-1')
        self.uid_chan_channel = ca.ChannelString(
            value=b'null', string_encoding='latin-1')
        self.uid_td_channel = ca.ChannelString(
            value=b'null', string_encoding='latin-1')
        self.uid_pd_channel = ca.ChannelString(
            value=b'null', string_encoding='latin-1')
        self.uid_ts_channel = ca.ChannelString(
            value=b'null', string_encoding='latin-1')
Ejemplo n.º 2
0
def curio_server():
    caget_pvdb = {
        'pi': ca.ChannelDouble(value=3.14,
                               lower_disp_limit=3.13,
                               upper_disp_limit=3.15,
                               lower_alarm_limit=3.12,
                               upper_alarm_limit=3.16,
                               lower_warning_limit=3.11,
                               upper_warning_limit=3.17,
                               lower_ctrl_limit=3.10,
                               upper_ctrl_limit=3.18,
                               precision=5,
                               units='doodles',
                               ),
        'enum': ca.ChannelEnum(value='b',
                               enum_strings=['a', 'b', 'c', 'd'],
                               ),
        'int': ca.ChannelInteger(value=33,
                                 units='poodles',
                                 lower_disp_limit=33,
                                 upper_disp_limit=35,
                                 lower_alarm_limit=32,
                                 upper_alarm_limit=36,
                                 lower_warning_limit=31,
                                 upper_warning_limit=37,
                                 lower_ctrl_limit=30,
                                 upper_ctrl_limit=38,
                                 ),
        'char': ca.ChannelChar(value=b'3',
                               units='poodles',
                               lower_disp_limit=33,
                               upper_disp_limit=35,
                               lower_alarm_limit=32,
                               upper_alarm_limit=36,
                               lower_warning_limit=31,
                               upper_warning_limit=37,
                               lower_ctrl_limit=30,
                               upper_ctrl_limit=38,
                               ),
        'str': ca.ChannelString(value='hello',
                                alarm=str_alarm_status,
                                reported_record_type='caproto'),
        }

    async def run_server():
        port = find_next_tcp_port(host=SERVER_HOST)
        print('Server will be on', (SERVER_HOST, port))
        ctx = server.Context(SERVER_HOST, port, caget_pvdb, log_level='DEBUG')
        try:
            await ctx.run()
        except Exception as ex:
            print('Server failed', ex)
            raise
        finally:
            print('Server exiting')

    return run_server, caget_pvdb
Ejemplo n.º 3
0
     upper_ctrl_limit=3.18,
     precision=5,
     units='doodles',
 ),
 'enum':
 ca.ChannelEnum(
     value='b',
     enum_strings=['a', 'b', 'c', 'd'],
 ),
 'int':
 ca.ChannelInteger(
     value=33,
     units='poodles',
     lower_disp_limit=33,
     upper_disp_limit=35,
     lower_alarm_limit=32,
     upper_alarm_limit=36,
     lower_warning_limit=31,
     upper_warning_limit=37,
     lower_ctrl_limit=30,
     upper_ctrl_limit=38,
 ),
 'char':
 ca.ChannelChar(
     value=b'3',
     units='poodles',
     lower_disp_limit=33,
     upper_disp_limit=35,
     lower_alarm_limit=32,
     upper_alarm_limit=36,
     lower_warning_limit=31,
     upper_warning_limit=37,
Ejemplo n.º 4
0
def curio_server(prefix):
    str_alarm_status = ca.ChannelAlarm(
        status=ca.AlarmStatus.READ,
        severity=ca.AlarmSeverity.MINOR_ALARM,
        alarm_string='alarm string',
    )

    caget_pvdb = {
        'pi':
        ca.ChannelDouble(
            value=3.14,
            lower_disp_limit=3.13,
            upper_disp_limit=3.15,
            lower_alarm_limit=3.12,
            upper_alarm_limit=3.16,
            lower_warning_limit=3.11,
            upper_warning_limit=3.17,
            lower_ctrl_limit=3.10,
            upper_ctrl_limit=3.18,
            precision=5,
            units='doodles',
        ),
        'enum':
        ca.ChannelEnum(
            value='b',
            enum_strings=['a', 'b', 'c', 'd'],
        ),
        'int':
        ca.ChannelInteger(
            value=33,
            units='poodles',
            lower_disp_limit=33,
            upper_disp_limit=35,
            lower_alarm_limit=32,
            upper_alarm_limit=36,
            lower_warning_limit=31,
            upper_warning_limit=37,
            lower_ctrl_limit=30,
            upper_ctrl_limit=38,
        ),
        'char':
        ca.ChannelByte(
            value=b'3',
            units='poodles',
            lower_disp_limit=33,
            upper_disp_limit=35,
            lower_alarm_limit=32,
            upper_alarm_limit=36,
            lower_warning_limit=31,
            upper_warning_limit=37,
            lower_ctrl_limit=30,
            upper_ctrl_limit=38,
        ),
        'str':
        ca.ChannelString(value='hello',
                         alarm=str_alarm_status,
                         reported_record_type='caproto'),
    }

    # tack on a unique prefix
    caget_pvdb = {prefix + key: value for key, value in caget_pvdb.items()}

    # Hide these imports so that the other fixtures are usable by other
    # libraries (e.g. ophyd) without the experimental dependencies.
    import curio
    import caproto.curio

    async def _server(pvdb):
        ctx = caproto.curio.server.Context(pvdb)
        try:
            await ctx.run()
        except caproto.curio.server.ServerExit:
            logger.info('ServerExit caught; exiting')
        except Exception as ex:
            logger.error('Server failed: %s %s', type(ex), ex)
            raise

    async def run_server(client, *, pvdb=caget_pvdb):
        server_task = await curio.spawn(_server, pvdb, daemon=True)

        try:
            await client()
        except caproto.curio.server.ServerExit:
            ...
        finally:
            await server_task.cancel()

    return run_server, prefix, caget_pvdb
Ejemplo n.º 5
0
def pvdb_from_server_example():
    alarm = ca.ChannelAlarm(
        status=ca.AlarmStatus.READ,
        severity=ca.AlarmSeverity.MINOR_ALARM,
        alarm_string='alarm string',
    )

    pvdb = {
        'pi':
        ca.ChannelDouble(
            value=3.14,
            lower_disp_limit=3.13,
            upper_disp_limit=3.15,
            lower_alarm_limit=3.12,
            upper_alarm_limit=3.16,
            lower_warning_limit=3.11,
            upper_warning_limit=3.17,
            lower_ctrl_limit=3.10,
            upper_ctrl_limit=3.18,
            precision=5,
            units='doodles',
            alarm=alarm,
        ),
        'enum':
        ca.ChannelEnum(
            value='b',
            enum_strings=['a', 'b', 'c', 'd'],
        ),
        'enum2':
        ca.ChannelEnum(
            value='bb',
            enum_strings=['aa', 'bb', 'cc', 'dd'],
        ),
        'int':
        ca.ChannelInteger(
            value=96,
            units='doodles',
        ),
        'char':
        ca.ChannelByte(
            value=b'3',
            units='poodles',
            lower_disp_limit=33,
            upper_disp_limit=35,
            lower_alarm_limit=32,
            upper_alarm_limit=36,
            lower_warning_limit=31,
            upper_warning_limit=37,
            lower_ctrl_limit=30,
            upper_ctrl_limit=38,
        ),
        'bytearray':
        ca.ChannelByte(value=b'1234567890' * 2),
        'chararray':
        ca.ChannelChar(value=b'1234567890' * 2),
        'str':
        ca.ChannelString(value='hello', string_encoding='latin-1',
                         alarm=alarm),
        'str2':
        ca.ChannelString(value='hello', string_encoding='latin-1',
                         alarm=alarm),
        'stra':
        ca.ChannelString(value=['hello', 'how is it', 'going'],
                         string_encoding='latin-1'),
    }

    return pvdb
Ejemplo n.º 6
0
def test_timestamp_raw_access():
    intval = ca.ChannelInteger(value=5)
    # Try the datetime interface:
    intval.epics_timestamp.secondsSinceEpoch
    intval.epics_timestamp.nanoSeconds
Ejemplo n.º 7
0
def test_timestamp_basic():
    intval = ca.ChannelInteger(value=5)
    # Try the datetime interface:
    from_dt = intval.epics_timestamp.as_datetime().timestamp()
    assert abs(from_dt - intval.timestamp) < 1.
Ejemplo n.º 8
0
def curio_server(prefix):
    str_alarm_status = ca.ChannelAlarm(
        status=ca.AlarmStatus.READ,
        severity=ca.AlarmSeverity.MINOR_ALARM,
        alarm_string='alarm string',
    )

    caget_pvdb = {
        'pi':
        ca.ChannelDouble(
            value=3.14,
            lower_disp_limit=3.13,
            upper_disp_limit=3.15,
            lower_alarm_limit=3.12,
            upper_alarm_limit=3.16,
            lower_warning_limit=3.11,
            upper_warning_limit=3.17,
            lower_ctrl_limit=3.10,
            upper_ctrl_limit=3.18,
            precision=5,
            units='doodles',
        ),
        'enum':
        ca.ChannelEnum(
            value='b',
            enum_strings=['a', 'b', 'c', 'd'],
        ),
        'int':
        ca.ChannelInteger(
            value=33,
            units='poodles',
            lower_disp_limit=33,
            upper_disp_limit=35,
            lower_alarm_limit=32,
            upper_alarm_limit=36,
            lower_warning_limit=31,
            upper_warning_limit=37,
            lower_ctrl_limit=30,
            upper_ctrl_limit=38,
        ),
        'char':
        ca.ChannelByte(
            value=b'3',
            units='poodles',
            lower_disp_limit=33,
            upper_disp_limit=35,
            lower_alarm_limit=32,
            upper_alarm_limit=36,
            lower_warning_limit=31,
            upper_warning_limit=37,
            lower_ctrl_limit=30,
            upper_ctrl_limit=38,
        ),
        'str':
        ca.ChannelString(value='hello',
                         alarm=str_alarm_status,
                         reported_record_type='caproto'),
    }

    # tack on a unique prefix
    caget_pvdb = {prefix + key: value for key, value in caget_pvdb.items()}

    async def _server(pvdb):
        ctx = caproto.curio.server.Context(pvdb)
        try:
            await ctx.run()
        except caproto.curio.server.ServerExit:
            logger.info('ServerExit caught; exiting')
        except Exception as ex:
            logger.exception('Server failed')
            raise

    async def run_server(client, *, pvdb=caget_pvdb):
        server_task = await curio.spawn(_server, pvdb, daemon=True)

        try:
            if hasattr(client, 'wait'):
                # NOTE: wrapped by threaded_in_curio_wrapper
                await curio.run_in_thread(client)
                await client.wait()
            else:
                await client()
        except caproto.curio.server.ServerExit:
            ...
        finally:
            await server_task.cancel()

    return run_server, prefix, caget_pvdb
Ejemplo n.º 9
0
                         lower_warning_limit=3.11,
                         upper_warning_limit=3.17,
                         lower_ctrl_limit=3.10,
                         upper_ctrl_limit=3.18,
                         precision=5,
                         units='doodles',
                         alarm=alarm,
                         ),
 'enum': ca.ChannelEnum(value='b',
                        enum_strings=['a', 'b', 'c', 'd'],
                        ),
 'enum2': ca.ChannelEnum(value='bb',
                         enum_strings=['aa', 'bb', 'cc', 'dd'],
                         ),
 'int': ca.ChannelInteger(value=96,
                          units='doodles',
                          ),
 'int2': ca.ChannelInteger(value=96,
                           units='doodles',
                           ),
 'int3': ca.ChannelInteger(value=96,
                           units='doodles',
                           ),
 'char': ca.ChannelByte(value=b'3',
                        units='poodles',
                        lower_disp_limit=33,
                        upper_disp_limit=35,
                        lower_alarm_limit=32,
                        upper_alarm_limit=36,
                        lower_warning_limit=31,
                        upper_warning_limit=37,
Ejemplo n.º 10
0
     units="doodles",
     alarm=alarm,
 ),
 "enum":
 ca.ChannelEnum(
     value="b",
     enum_strings=["a", "b", "c", "d"],
 ),
 "enum2":
 ca.ChannelEnum(
     value="bb",
     enum_strings=["aa", "bb", "cc", "dd"],
 ),
 "int":
 ca.ChannelInteger(
     value=96,
     units="doodles",
 ),
 "int2":
 ca.ChannelInteger(
     value=96,
     units="doodles",
 ),
 "int3":
 ca.ChannelInteger(
     value=96,
     units="doodles",
 ),
 "char":
 ca.ChannelByte(
     value=b"3",
     units="poodles",
Ejemplo n.º 11
0
     units='doodles',
     alarm=alarm,
 ),
 'enum':
 ca.ChannelEnum(
     value='b',
     enum_strings=['a', 'b', 'c', 'd'],
 ),
 'enum2':
 ca.ChannelEnum(
     value='bb',
     enum_strings=['aa', 'bb', 'cc', 'dd'],
 ),
 'int':
 ca.ChannelInteger(
     value=96,
     units='doodles',
 ),
 'int2':
 ca.ChannelInteger(
     value=96,
     units='doodles',
 ),
 'int3':
 ca.ChannelInteger(
     value=96,
     units='doodles',
 ),
 'char':
 ca.ChannelByte(
     value=b'3',
     units='poodles',