Skip to content

Release Version 4.0.0

Compare
Choose a tag to compare
@slacrherbst slacrherbst released this 26 Sep 18:34
097e7f4

This release makes some major changes, some which impact user interfaces. The key PRs to pay attention to are listed below:

Key Pull Requests

#491 - Add support for Rogue PyDm plugin
#509 - Change default gui to PYDM
#440 - Updated API For DataWriter Device Class
#455 - Add groups field to Nodes
#442 - Add alarm levels to Variables
#452 - Add EPICS 4 (P4P) Support
#190 - Add big-endian and fixed-point Models
#446 - Add process device
#482 - Add data receiver Device
#517 - Add native numpy get and put for Frames
#518 - Add support for multidimensional arrays
#508 - Allow sub-transactions on large blocks

All Pull Requests

  1. #500 - Replicate Existing GUI Using PYDM
  2. #519 - Updates to PYDM Interface to make use of PYDM features
  3. #472 - Make error messages more clear
  4. #481 - Add SQL Logger
  5. #440 - Updated API For DataWriter Device Class
  6. #478 - Reorganize fileio directory and update FileReader
  7. #507 - Cleanup
  8. #491 - Add support for Rogue PyDm plugin
  9. #455 - Add groups field to Nodes
  10. #513 - Pymd init
  11. #442 - Add alarm levels to Variables
  12. #452 - Add EPICS 4 (P4P) Support
  13. #499 - Add thread names
  14. #501 - Merge 3.3.7 Changes
  15. #190 - Add big-endian and fixed-point Models
  16. #446 - Add process device
  17. #480 - Improve SystemLog Inteface And Display
  18. #517 - Add native numpy get and put for Frames
  19. #470 - Add CPSW Export Utilities
  20. #518 - Add support for multidimensional arrays
  21. #497 - Speedup array attribute lookups, revamp attributeHelper and nodeMatch
  22. #512 - ESROGUE-210 - Add UART Memory Interface
  23. #504 - Add Process Widget
  24. #516 - Prep For release.
  25. #482 - Add data receiver Device
  26. #508 - Allow sub-transactions on large blocks
  27. #476 - Add command line entry point
  28. #484 - Legacy file updates and better checks
  29. #410 - Check for error when extracting python values
  30. #458 - Remove PCAS support from MACOS, properly detect existence of PCAS
  31. #461 - Add VariableWait function to wait for values in one or more variables
  32. #405 - Allow user to specify typeStr for LocalVariables
  33. #515 - Update rx device
  34. #463 - Add simple ZmqClient class
  35. #520 - Minor Updates to Frame Numpy Interface
  36. #489 - Allow for read of configuration directory containing multiple files
  37. #466 - Change names in DataWriter to break interface.
  38. #475 - Add poll blocking context
  39. #521 - Update array storage to a dictionary
  40. #522 - Add expand sub-menus for arrays.
  41. #511 - Update modules to handle or forward frame errors
  42. #498 - Add pydm as a dependency. Use conda-forge boost libraries in anaconda.
  43. #471 - Pure python zmq client
  44. #474 - Make some functions public so they can be access by users
  45. #473 - Supress stack trace for memory errors
  46. #468 - Move address map dump to root
  47. #464 - Allow process device to be called with an arg
  48. #469 - Move VirtualClient to interfaces
  49. #494 - Add root level group lists for streaming and sql logging
  50. #493 - Add gui run helper; Remove syslog error loops
  51. #441 - Add variable information dialog box
  52. #443 - Fix spin box updates
  53. #450 - Fix pre-release bugs and add more Remote Variable fields
  54. #451 - Change the way alarms are displayed in the GUI
  55. #465 - Support zip file archives for libraries and config files
  56. #502 - Fix mac compile
  57. #496 - Add yaml save compression
  58. #467 - Fix race condition in waitFor methods
  59. #456 - Update anaconda documentation
  60. #407 - Handle File Write Errors With Log Error Instead Of Exception
  61. #509 - Change default gui to PYDM
  62. #447 - Add ability to define command return type
  63. #459 - Use tidair-packages for epics modules instead of lcls-ii
  64. #487 - Add wait helper
  65. #477 - Provide mechanism to lock variable contents
  66. #485 - Revert stream to use encoded variable value
  67. #403 - Support 64-bit file sizes
  68. #437 - Call enable variable update chain directly
  69. #449 - protocols/batcher/CoreV1.cpp Update
  70. #514 - Merge in thread names for UDP client and server
  71. #503 - Add NoServe Group
  72. #510 - PrbsRx: Check for frame errors and address segfault
  73. #462 - Remove epics from mac build
  74. #448 - Batcher bug fixes
  75. #479 - Pass varValue list to test function
  76. #505 - Fix corner case where block and device have the same offset
  77. #492 - Adding twosComplement() function to _Model.py
  78. #460 - Hidden fix
  79. #430 - Fix out of bounds error in configuration file
  80. #488 - Adding checkPayload argument to PrbsRx
  81. #486 - Avoid sending empty streams
  82. #495 - Allow user to update a command's function
  83. #454 - Add deprecation warning to background commands
  84. #435 - Fix config load issue
  85. #523 - Fixed typo in _gui.py
  86. #490 - Exclude hidden in gui by default
  87. #483 - Increase max byte size for PRBS
  88. #457 - Update package requirements in documentation
  89. #453 - Remove debug message

Pull Request Details

Replicate Existing GUI Using PYDM

Author: Ryan Herbst [email protected]
Date: Tue Sep 17 19:58:46 2019 -0700
Pull: #500 (1599 additions, 275 deletions, 25 files changed)
Branch: slaclab/pydm_frame

Notes:

you can now use the pydm gui:

python -m pyrogue pydm


Updates to PYDM Interface to make use of PYDM features

Author: Ryan Herbst [email protected]
Date: Tue Sep 24 11:21:49 2019 -0700
Pull: #519 (767 additions, 338 deletions, 27 files changed)
Branch: slaclab/gui_enhance

Notes:


Make error messages more clear

Author: Ryan Herbst [email protected]
Date: Fri Aug 30 15:23:59 2019 -0700
Pull: #472 (304 additions, 374 deletions, 45 files changed)
Branch: slaclab/error_messages

Notes:

This PR changes many of the error messages in the system in order to make them more clear to the end user.

In order to accomplish this the error transport for memory transactions is now changed. In the new model the error message is generated at the lowest level, allowing more specific details to be communicated.

This will break custom memory hubs written in either C++ or Python as the transaction->done() interface changes. Applications which use a memory bridge should re-deploy both sides of the link.


Add SQL Logger

Author: Ryan Herbst [email protected]
Date: Wed Sep 4 12:59:50 2019 -0700
Pull: #481 (172 additions, 429 deletions, 10 files changed)
Branch: slaclab/msql_logging

Notes:

This adds an optional sql logger to PyRogue. The url of the sql interface is passed to the root.start() method via the sqlUrl parameter.

Variable updates and syslog entries will be added to the database.

I have also removed the obsolete mysql control interface.


Updated API For DataWriter Device Class

Author: Ryan Herbst [email protected]
Date: Wed Aug 7 16:18:51 2019 -0700
Pull: #440 (321 additions, 182 deletions, 9 files changed)
Branch: slaclab/ESROGUE-367
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-367

Notes:

This PR addresses ESROGUE-367 by changing the API of the DataWriter base class and the C++ modules which are used with it. Instead of having an open/close combo box, the API now uses open and close commands and provides the current status.

I have also moved the DataWriter sub-device into its own file.


Reorganize fileio directory and update FileReader

Author: Ryan Herbst [email protected]
Date: Wed Sep 4 13:00:24 2019 -0700
Pull: #478 (292 additions, 199 deletions, 6 files changed)
Branch: slaclab/numpy_reader

Notes:

This PR breaks the fileio.py file into multiple files under a fileio sub-directory. Existing imports will still work as before.

I also have updated the currently unused FileReader to provide a path lookup mechanism for configuration as well as return the data contents as a numpy array.


Cleanup

Author: Ryan Herbst [email protected]
Date: Thu Sep 19 12:54:58 2019 -0700
Pull: #507 (216 additions, 253 deletions, 17 files changed)
Branch: slaclab/cleanup

Notes:


Add support for Rogue PyDm plugin

Author: Ryan Herbst [email protected]
Date: Wed Sep 11 14:08:13 2019 -0400
Pull: #491 (447 additions, 4 deletions, 16 files changed)
Branch: slaclab/pydm

Notes:

This PR adds the PyDm plugin for Rogue in the pydm sub-directory.


Add groups field to Nodes

Author: Ryan Herbst [email protected]
Date: Fri Aug 30 00:55:51 2019 -0700
Pull: #455 (241 additions, 208 deletions, 21 files changed)
Branch: slaclab/group

Notes:

This groups field replaces the visibility field and changes the implementation of the hidden flag. Each node in the system can be a part of one or more groups, stored as a list of strings. Setting a Node as hidden adds the 'Hidden' string to the groups list. Unhiding a node removes the 'Hidden' string from the groups list.

A device can be added to or removed from a group dynamically. When adding children to a node, the children will inherit the groups that the parent is part of (to be discussed?). Later adding a Node to a group will result in its children also being added to the group(?). Removing a Node from a group does not affect the child group membership. (should be discussed).

The Nodes can later be filtered by the incGroups and excGroups arguments. The Node is selected if it is a member of any of the incGroups and not a member of any of the excGroups.

The group membership can be used to control GUI visibility, inclusion in the epics export and inclusion in the configuration and status storage.


Pymd init

Author: Ryan Herbst [email protected]
Date: Thu Sep 19 23:05:10 2019 -0700
Pull: #513 (251 additions, 190 deletions, 13 files changed)
Branch: slaclab/pymd-init

Notes:


Add alarm levels to Variables

Author: Ryan Herbst [email protected]
Date: Wed Aug 14 10:01:45 2019 -0700
Pull: #442 (355 additions, 69 deletions, 8 files changed)
Branch: slaclab/ESROGUE-166
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-166

Notes:

This PR adds an alarm state to pyrogue Variables. For each variable you can high and low alarm and warning levels. These levels will then update the alarm state for the variable which is reported by EPICS. The GUI will also indicate the alarm state with a new alarm column which replaces the previous base column.

There are a couple of items to consider. First what alarm status and state values should we define within Rogue?. Right now we have borrowed from epics and indicate the following status values:

None
AlarmLoLo
AlarmHiHi
AlarmLow
AlarmHigh

with the corresponding severities:
None
AlarmMinor
AlarmMajor

Secondly should we replace the GUI base column with alarm, add a new column, or simply indicate the alarm state by changing the color of the field?


Add EPICS 4 (P4P) Support

Author: Ryan Herbst [email protected]
Date: Thu Aug 22 01:24:19 2019 -0700
Pull: #452 (313 additions, 85 deletions, 14 files changed)
Branch: slaclab/ESROGUE-166_pv
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-166_pv

Notes:

This PR adds EPICS 4 (P4P) server support, coexistent with the existing EPICS 3 module.

In order to support this in anaconda, a tidair hosted anaconda package containing the PCAS module was created and the anaconda recipe now pulls the epics package from the lcls-ii build. This changes the anaconda install and update commands to include both tidair-tag/tidair-dev for the pcas module and lcls-ii for the EPICS 7 module. The -ne (no epics) anaconda build is removed as it is no longer required.

The API for epics4 is the same as in epics3 except the syncRead arg is no longer supported:

   epics = pyrogue.protocols.epicsV4.EpicsPvServer(base,root,pvMap=None)

The stream to EPICS interface from EPIC3 is not implemented in EPICS4 as this will be replaced with a special stream device in a future version of Rogue, and the existing EPIC3 stream interface will be deprecated.


Add thread names

Author: Ryan Herbst [email protected]
Date: Tue Sep 17 22:18:11 2019 -0700
Pull: #499 (217 additions, 168 deletions, 17 files changed)
Branch: slaclab/ESROGUE-391
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-391

Notes:

With these changes, I see this output when running top:

Threads:  22 total,   0 running,  22 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.8 us,  4.4 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16038172 total, 11330456 free,  1320016 used,  3387700 buff/cache
KiB Swap: 16777212 total, 16777212 free,        0 used. 14370776 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
21671 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:03.63 python3
21692 cryo      20   0 4567564 222848  68692 S  6.6  1.4   0:02.47 AxiStreamDma
21693 cryo      20   0 4567564 222848  68692 S  6.3  1.4   0:01.88 AxiStreamDma
21694 cryo      20   0 4567564 222848  68692 S  6.6  1.4   0:01.89 AxiStreamDma
21695 cryo      20   0 4567564 222848  68692 S  6.6  1.4   0:01.89 AxiStreamDma
21696 cryo      20   0 4567564 222848  68692 S  6.0  1.4   0:01.88 AxiStreamDma
21697 cryo      20   0 4567564 222848  68692 S  6.3  1.4   0:01.88 AxiStreamDma
21698 cryo      20   0 4567564 222848  68692 S  6.3  1.4   0:01.88 AxiStreamDma
21699 cryo      20   0 4567564 222848  68692 S  6.3  1.4   0:01.84 AxiStreamDma
21700 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 ZMQbg/0
21701 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 ZMQbg/1
21702 cryo      20   0 4567564 222848  68692 S  4.3  1.4   0:02.43 python3
21703 cryo      20   0 4567564 222848  68692 S  1.3  1.4   0:00.41 python3
21704 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 Fifo
21705 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 Fifo
21706 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 Fifo
21707 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 Fifo
21708 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 Fifo
21709 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 Fifo
21710 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.03 EpicsV3Server
21711 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.00 QXcbEventQueue
21713 cryo      20   0 4567564 222848  68692 S  0.0  1.4   0:00.01 QDBusConnection

Merge 3.3.7 Changes

Author: Ryan Herbst [email protected]
Date: Tue Sep 17 19:59:53 2019 -0700
Pull: #501 (199 additions, 153 deletions, 16 files changed)
Branch: slaclab/ESROGUE-391-pr
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-391-pr

Notes:


Add big-endian and fixed-point Models

Author: Ryan Herbst [email protected]
Date: Thu Sep 26 10:49:49 2019 -0700
Pull: #190 (184 additions, 164 deletions, 5 files changed)
Branch: slaclab/fixed-point

Notes:

This is still in development but I'd like some feedback on it.

This PR adds the following new Models:

  • UIntBE - Unsigned big-endian integer
  • IntBe - Signed big-endian integer
  • Float - Existed before but is now explicitly 32-bits
  • Double - An 64-bit float (little-endian)
  • FloatBE - A big-endian Float
  • DoubleBE - a big-endian Double
  • Fixed - A fixed point number

Underneath, there is a big change to the way Models work.
Models are now instantiated with a specific bitSize. Model subclasses can also add other parameters, but bitSize is the one that is always required. This change was made mostly to support the fixed-point Models. These need to know both a bitSize and a pointPosition.

There is some special python metaclass magic to make sure that only one instance of each Model is ever instantiated with a given set of parameters. If the code tries to instantiate e.g. UInt(16) twice, the second call with return a reference to the object created by the first call, rather than creating an identical object in memory.

Backward compatibility has been maintained. You can still call:

RemoteVariable(..., base=pr.UInt, bitSize=16, ...)

The RemoteVariable constructor will check the type of base, and if it is a Model class, it will instantiate that class with the bitSize. This is how we should continue to use it.

It is also now valid to do this:

RemoteVariable(..., base=pr.UInt(16), bitSize=16, ...)

Note that the bitSize param to RemoteVariable() is still necessary. The fact that this works is mostly a side effect of the changes required for base=pr.Fixed to work.

Fixed-point numbers look like this:

RemoteVariable(..., base=pr.Fixed(16, 15, signed=True), bitSize=16, ...)

It's all still a bit clunky (and totally untested) but we should discuss if this is the path we want to go down.


Add process device

Author: Ryan Herbst [email protected]
Date: Thu Aug 15 11:52:11 2019 -0700
Pull: #446 (210 additions, 90 deletions, 7 files changed)
Branch: slaclab/process

Notes:

This PR creates a base class Process which is a sub-class of device. This Process class is meant to host a long running operation. The base class has a start and stop command as well as a running flag and percent complete status variable. The user can add configuration and output variables as required.


Improve SystemLog Inteface And Display

Author: Ryan Herbst [email protected]
Date: Tue Sep 10 13:16:39 2019 -0400
Pull: #480 (221 additions, 22 deletions, 7 files changed)
Branch: slaclab/syslog

Notes:

With this change the SystemLog variable now contains a json encoded list of dictionaries. Each dictionary entry contains a system entry with fields providing meta data about each system log entry. This allows the GUI client client to display the entries as a simple one line log entry, with the ability to include more data, including a stack trace if desired.

This also adds a syslog command to the pryrogue command line client, allowing for command line monitoring of a Rogue server:

python -m pyrogue syslog --detail

I also added a command line variable monitor option:

pthon -m pyrogue monitor dummyTree.Time


Add native numpy get and put for Frames

Author: Ryan Herbst [email protected]
Date: Sat Sep 21 19:02:11 2019 -0700
Pull: #517 (174 additions, 50 deletions, 9 files changed)
Branch: slaclab/jj-dev

Notes:


Add CPSW Export Utilities

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 09:36:02 2019 -0700
Pull: #470 (198 additions, 0 deletions, 1 files changed)
Branch: slaclab/cpsw_exp

Notes:


Add support for multidimensional arrays

Author: Ryan Herbst [email protected]
Date: Tue Sep 24 11:22:02 2019 -0700
Pull: #518 (125 additions, 72 deletions, 2 files changed)
Branch: slaclab/ESROGUE-193
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-193

Notes:

This PR adds support for multidimensional arrays for Nodes. Non rectangular and sparse arrays are supported. For example:

 for i in range(4):
     for j in range(4):
         for j in range(4):              
             self.add(pr.LocalVariable(name = f'TestArray[{i}][{j}][{k}]', value=0)) 

addVariable(pyrogue.LocalVariable(name='TestArray[4][5]',value=0))
addVariable(pyrogue.LocalVariable(name='TestArray[6]',value=0))

Which generates the following configuration file matching:

In [3]: a.nodeMatch('TestArray[*][*][*]')                                                                                                                                                                                                                  
Out[3]: 
[dummyTree.AxiVersion.TestArray[0][0][0],
 dummyTree.AxiVersion.TestArray[0][0][1],
 dummyTree.AxiVersion.TestArray[0][0][2],
 dummyTree.AxiVersion.TestArray[0][0][3],
....
 dummyTree.AxiVersion.TestArray[3][3][2],
 dummyTree.AxiVersion.TestArray[3][3][3]]

In [4]: a.nodeMatch('TestArray[*][*]')                                                                                                                                                                                                                     
Out[4]: [dummyTree.AxiVersion.TestArray[4][5]]

In [5]: a.nodeMatch('TestArray[*]')                                                                                                                                                                                                                        
Out[5]: [dummyTree.AxiVersion.TestArray[6]]

In [6]: a.nodeMatch('TestArray[*][0][0]')                                                                                                                                                                                                                  
Out[6]: 
[dummyTree.AxiVersion.TestArray[0][0][0],
 dummyTree.AxiVersion.TestArray[1][0][0],
 dummyTree.AxiVersion.TestArray[2][0][0],
 dummyTree.AxiVersion.TestArray[3][0][0]]

In [7]: a.nodeMatch('TestArray[*][0][*]')                                                                                                                                                                                                                  
Out[7]: 
[dummyTree.AxiVersion.TestArray[0][0][0],
 dummyTree.AxiVersion.TestArray[0][0][1],
 dummyTree.AxiVersion.TestArray[0][0][2],
 dummyTree.AxiVersion.TestArray[0][0][3],
 dummyTree.AxiVersion.TestArray[1][0][0],
 dummyTree.AxiVersion.TestArray[1][0][1],
 dummyTree.AxiVersion.TestArray[1][0][2],
 dummyTree.AxiVersion.TestArray[1][0][3],
 dummyTree.AxiVersion.TestArray[2][0][0],
 dummyTree.AxiVersion.TestArray[2][0][1],
 dummyTree.AxiVersion.TestArray[2][0][2],
 dummyTree.AxiVersion.TestArray[2][0][3],
 dummyTree.AxiVersion.TestArray[3][0][0],
 dummyTree.AxiVersion.TestArray[3][0][1],
 dummyTree.AxiVersion.TestArray[3][0][2],
 dummyTree.AxiVersion.TestArray[3][0][3]]


Speedup array attribute lookups, revamp attributeHelper and nodeMatch

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 15:15:18 2019 -0700
Pull: #497 (110 additions, 85 deletions, 4 files changed)
Branch: slaclab/array_lookup

Notes:

This PR combine the previous attributeHelper and nodeMatch functions into a single class object method _nodeMatch to return nodes and node lists on lookups. At creation node arrays are stored in a new variable _anodes to speed up array element lookups.

This PR also fixes a previous error that allowed a sub-node with the same base name as an array to be added to a node.

Node.node(key) can now process complex lookups such as Node.node('TestArray[4:6]')


ESROGUE-210 - Add UART Memory Interface

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 10:31:48 2019 -0700
Pull: #512 (138 additions, 0 deletions, 6 files changed)
Branch: slaclab/ESROGUE-210
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-210

Notes:

Provides software interface to https://github.com/slaclab/surf/blob/master/protocols/uart/rtl/UartAxiLiteMaster.vhd

Implementation of this JIRA Ticket: https://jira.slac.stanford.edu/browse/ESROGUE-210


Add Process Widget

Author: Ryan Herbst [email protected]
Date: Tue Sep 17 23:30:15 2019 -0700
Pull: #504 (135 additions, 3 deletions, 6 files changed)
Branch: slaclab/process_widget

Notes:


Prep For release.

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 14:49:30 2019 -0700
Pull: #516 (52 additions, 76 deletions, 12 files changed)
Branch: slaclab/rel_prep

Notes:


Add data receiver Device

Author: Ryan Herbst [email protected]
Date: Mon Sep 9 21:47:52 2019 -0400
Pull: #482 (101 additions, 2 deletions, 2 files changed)
Branch: slaclab/data_device

Notes:

This adds a data receiver Device which contains variables indication rx count, bytes etc. It also includes a method for users to override to re-organize the stored numpy array to match the data structure.


Allow sub-transactions on large blocks

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 23:19:44 2019 -0700
Pull: #508 (64 additions, 35 deletions, 2 files changed)
Branch: slaclab/sub_block

Notes:

This PR allows the user to setup a device with a large block size, allowing both large bulk memory transactions and individual sub-block transactions.

Calling writeBlocks, readBlocks, verifyBlocks without a variable list will generate a burst transaction on the entire block. Calling the above functions with a variable list will only access the range of the block overlapped by the passed variables. Single get() and set() transactions will only generate transactions on the range of the block covered by the accessed variable.


Add command line entry point

Author: Ryan Herbst [email protected]
Date: Tue Sep 3 09:40:46 2019 -0700
Pull: #476 (91 additions, 2 deletions, 3 files changed)
Branch: slaclab/cmd_line

Notes:

This allows a pyrogue server to be accessed from the command line:

python -m pyrogue gui
python -m pyrogue get dummyTree.AxiVersion.ScratchPad
python -m pyrogue set dummyTree.AxiVersion.ScratchPad 1
python -m pyrogue value dummyTree.AxiVersion.ScratchPad
python -m pyrogue exec dummyTree.LoadConfig config.yml


Legacy file updates and better checks

Author: Ryan Herbst [email protected]
Date: Sun Sep 8 12:35:52 2019 -0700
Pull: #484 (87 additions, 4 deletions, 3 files changed)
Branch: slaclab/legacy_test

Notes:


Check for error when extracting python values

Author: Ryan Herbst [email protected]
Date: Sun Jun 9 09:15:26 2019 -0700
Pull: #410 (60 additions, 30 deletions, 2 files changed)
Branch: slaclab/file_overflow

Notes:


Remove PCAS support from MACOS, properly detect existence of PCAS

Author: Ryan Herbst [email protected]
Date: Thu Aug 22 19:44:55 2019 -0700
Pull: #458 (34 additions, 55 deletions, 3 files changed)
Branch: slaclab/mac_no_e7

Notes:

This PR changes the CMakelists file to properly detect situations where epics-base is installed without pcas. It also removes pcas support from MACOS Anaconda builds.


Add VariableWait function to wait for values in one or more variables

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 23:12:27 2019 -0700
Pull: #461 (82 additions, 4 deletions, 2 files changed)
Branch: slaclab/virt_new

Notes:

This adds a VariableWait function which can be used to wait for one or more variables to pass a condition test.

Example Usage:
pyrogue.VariableWait([client.dummyTree.AxiVersion.ScratchPad],lambda varValues: varValues['dummyTree.AxiVersion.Scratchpad'].value > 10)

This PR also adds a hook into the Virtual client to be able to access the root device immediately by name:

client = pyrogue.VirtualClient()
client.dummyTree.AxiVersion.ScratchPad.get()


Allow user to specify typeStr for LocalVariables

Author: Ryan Herbst [email protected]
Date: Fri Jun 7 23:25:14 2019 -0700
Pull: #405 (65 additions, 20 deletions, 4 files changed)
Branch: slaclab/user_type

Notes:

This is required to properly map variable type to external clients.


Update rx device

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 13:57:45 2019 -0700
Pull: #515 (50 additions, 34 deletions, 1 files changed)
Branch: slaclab/rx_dev

Notes:


Add simple ZmqClient class

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 14:08:48 2019 -0700
Pull: #463 (82 additions, 2 deletions, 3 files changed)
Branch: slaclab/new_client

Notes:

This adds a thin lightweight, fast to load, SimpleClient. The interface on this client is limited to the following commands:

client.get("path.to.variable")
client.getDisp("path.to.variable")
client.value("path.to.variable")
client.valueDisp("path.to.variable")
client.set("path.to.variable",value)
client.setDisp("path.to.variable",value)
client.exec("path.to.command",arg)

This PR also deprecates the zmqPort= arg for root.Start() and adds serverPort to make sure the interface is protocol agnostic for the future.


Minor Updates to Frame Numpy Interface

Author: Ryan Herbst [email protected]
Date: Tue Sep 24 11:26:44 2019 -0700
Pull: #520 (62 additions, 21 deletions, 4 files changed)
Branch: slaclab/jj-dev

Notes:


Allow for read of configuration directory containing multiple files

Author: Ryan Herbst [email protected]
Date: Tue Sep 10 17:48:03 2019 -0400
Pull: #489 (62 additions, 17 deletions, 2 files changed)
Branch: slaclab/dir_read

Notes:

This PR allows the loading of multiple configuration files when a directory is passed as an arg to LoadConfig.

Any .yml or .yaml files in the passed directory will be loaded in sorted order. Each file is parsed and applied to the management tree individually with the write() call generated after all configuration files have been loaded.

This PR also allows the root node to be aliased with the name 'root'.


Change names in DataWriter to break interface.

Author: Ryan Herbst [email protected]
Date: Tue Aug 27 14:13:56 2019 -0700
Pull: #466 (39 additions, 39 deletions, 3 files changed)
Branch: slaclab/break_data

Notes:

PR #440 changed the API for opening files with the DataWriter, but did so in a way that caused the old way to silently fail.

This PR fixes the silent fail by explicitly breaking everything, including the #440 API. It does this by changing all Variable and Command names to use UpperCase, which is the correct Rogue naming convention anyway.


Add poll blocking context

Author: Ryan Herbst [email protected]
Date: Wed Sep 4 13:13:29 2019 -0700
Pull: #475 (49 additions, 22 deletions, 2 files changed)
Branch: slaclab/poll_lock

Notes:

This PR adds a poller blocking context to temporarily pause polling while the context is active:

with root.pollBlock():
--- do some stuff


Update array storage to a dictionary

Author: Ryan Herbst [email protected]
Date: Thu Sep 26 08:38:11 2019 -0700
Pull: #521 (38 additions, 32 deletions, 2 files changed)
Branch: slaclab/node_dict

Notes:

Array variables are now stored as a dictionary, which is returned when the user accesses the variable via direction lookup, allowing the following calls:

for v in dummyTree.AxiVersion.TestArray.values():
    v.setDisp('0')

or

for k,v in dummyTree.AxiVersion.TestArray.values():
    print(f"Item {k} = {v}")

nodeMatch will still return the matched nodes as an array. A list generation performance penalty is created when slicing arrays in a configuration file.


Add expand sub-menus for arrays.

Author: Ryan Herbst [email protected]
Date: Wed Sep 25 01:04:43 2019 -0700
Pull: #522 (59 additions, 7 deletions, 2 files changed)
Branch: slaclab/gui_enhance

Notes:


Update modules to handle or forward frame errors

Author: Ryan Herbst [email protected]
Date: Thu Sep 19 17:08:31 2019 -0700
Pull: #511 (57 additions, 2 deletions, 12 files changed)
Branch: slaclab/ESROGUE-396
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-396

Notes:


Add pydm as a dependency. Use conda-forge boost libraries in anaconda.

Author: Ryan Herbst [email protected]
Date: Sat Sep 14 02:25:25 2019 -0400
Pull: #498 (41 additions, 18 deletions, 15 files changed)
Branch: slaclab/pydm_update

Notes:


Pure python zmq client

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 22:49:29 2019 -0700
Pull: #471 (29 additions, 28 deletions, 1 files changed)
Branch: slaclab/thinner

Notes:


Make some functions public so they can be access by users

Author: Ryan Herbst [email protected]
Date: Tue Sep 10 10:49:30 2019 -0400
Pull: #474 (40 additions, 16 deletions, 2 files changed)
Branch: slaclab/public_helper

Notes:

This moves some root methods from private to public so that users are able to create their own versions of LoadConfig and SaveConfig which may make use of the new groups feature.

i.e. SaveThresholds....


Supress stack trace for memory errors

Author: Ryan Herbst [email protected]
Date: Fri Aug 30 15:04:09 2019 -0700
Pull: #473 (35 additions, 20 deletions, 8 files changed)
Branch: slaclab/stack_trace

Notes:

This PR adds a new wrapper function used when logging exceptions. If the exception is a MemoryError then the stack trace printout will be suppressed. This avoids user confusion when Rogue generates memory errors which are a standard run time error.


Move address map dump to root

Author: Ryan Herbst [email protected]
Date: Tue Aug 27 21:13:22 2019 -0700
Pull: #468 (29 additions, 26 deletions, 1 files changed)
Branch: slaclab/amap_dump

Notes:


Allow process device to be called with an arg

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 23:18:14 2019 -0700
Pull: #464 (40 additions, 14 deletions, 6 files changed)
Branch: slaclab/process_call

Notes:

This adds the call() and call methods to the Process device to allow it to be treated as a command. The creator now includes the argVariable arg which indicates which sub-variable to update with the value passed in the call. This could be used to replace the "LoadConfig" Command with a Process.

LoadConfig(argVariable='FileName')

LoadConfig.Start.call("config.yaml")
LoadConfig.Start("config.yaml")
LoadConfig.call("config.yaml")
LoadConfig("config.yaml")

all can be used to start the process.


Move VirtualClient to interfaces

Author: Ryan Herbst [email protected]
Date: Fri Aug 30 01:26:11 2019 -0700
Pull: #469 (26 additions, 24 deletions, 8 files changed)
Branch: slaclab/virt_move

Notes:

This moves the VirtualClient class from pyrogue.VirtualClient to pyrogue.interfaces.VirtualClient to be consistent with other itnterfaces.


Add root level group lists for streaming and sql logging

Author: Ryan Herbst [email protected]
Date: Thu Sep 12 18:19:56 2019 -0400
Pull: #494 (35 additions, 14 deletions, 2 files changed)
Branch: slaclab/group_settings

Notes:

This adds root level settings for streaming and log generation.


Add gui run helper; Remove syslog error loops

Author: Ryan Herbst [email protected]
Date: Thu Sep 12 15:43:39 2019 -0400
Pull: #493 (35 additions, 14 deletions, 4 files changed)
Branch: slaclab/syslog_loop

Notes:

This adds a helper function for starting a gui:
pyrogue.gui.runGui(root)

It also removes error handling loops when an exception occurs while adding a systemlog entry.


Add variable information dialog box

Author: Ryan Herbst [email protected]
Date: Tue Aug 6 09:37:45 2019 -0700
Pull: #441 (41 additions, 1 deletions, 2 files changed)
Branch: slaclab/var_info

Notes:

This add a popup window to the right click menu for variables. The popup window will display all of the attributes for a variable.


Fix spin box updates

Author: Ryan Herbst [email protected]
Date: Wed Aug 7 16:19:37 2019 -0700
Pull: #443 (21 additions, 18 deletions, 1 files changed)
Branch: slaclab/sbox

Notes:

Fixes the spin box updates with the new VariableValue passing.


Fix pre-release bugs and add more Remote Variable fields

Author: Ryan Herbst [email protected]
Date: Wed Aug 14 16:23:32 2019 -0700
Pull: #450 (21 additions, 17 deletions, 4 files changed)
Branch: slaclab/bug_fix

Notes:


Change the way alarms are displayed in the GUI

Author: Ryan Herbst [email protected]
Date: Tue Aug 20 23:55:42 2019 -0700
Pull: #451 (27 additions, 6 deletions, 2 files changed)
Branch: slaclab/alarm-dev

Notes:

Alarm column now doesn't show anything at all unless a variable has an alarm value set.
Also shows green "Good" status in GUI if value is inside of alarm thresholds.


Support zip file archives for libraries and config files

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 14:07:52 2019 -0700
Pull: #465 (24 additions, 7 deletions, 2 files changed)
Branch: slaclab/zip_files

Notes:

This adds support for adding library paths in zip files with the following command:

pyrogue.addLibraryPath('/my/path/to/archive.zip/python/')

It also allows config files to be loaded from similar archives:

root.LoadConfig('/my/path/to/archive.zip/config/defaults.yml')


Fix mac compile

Author: Ryan Herbst [email protected]
Date: Tue Sep 17 20:51:52 2019 -0700
Pull: #502 (28 additions, 0 deletions, 14 files changed)
Branch: slaclab/mac_threads

Notes:


Add yaml save compression

Author: Ryan Herbst [email protected]
Date: Thu Sep 12 17:46:04 2019 -0400
Pull: #496 (18 additions, 7 deletions, 2 files changed)
Branch: slaclab/compress_files

Notes:


Fix race condition in waitFor methods

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 23:16:30 2019 -0700
Pull: #467 (18 additions, 7 deletions, 3 files changed)
Branch: slaclab/frame_wait

Notes:


Update anaconda documentation

Author: Ryan Herbst [email protected]
Date: Fri Aug 23 15:20:12 2019 -0700
Pull: #456 (14 additions, 11 deletions, 2 files changed)
Branch: slaclab/ESROGUE-366
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-366

Notes:


Handle File Write Errors With Log Error Instead Of Exception

Author: Ryan Herbst [email protected]
Date: Fri Jun 7 23:24:55 2019 -0700
Pull: #407 (20 additions, 4 deletions, 2 files changed)
Branch: slaclab/file_error

Notes:

Do not allow write errors to crash the application.


Change default gui to PYDM

Author: Ryan Herbst [email protected]
Date: Thu Sep 19 13:21:11 2019 -0700
Pull: #509 (6 additions, 16 deletions, 3 files changed)
Branch: slaclab/newgui

Notes:


Add ability to define command return type

Author: Ryan Herbst [email protected]
Date: Wed Aug 14 16:43:42 2019 -0700
Pull: #447 (19 additions, 2 deletions, 2 files changed)
Branch: slaclab/cmd_ret_type

Notes:

This adds a retType= arg to command creation in order to identify the return type value for commands which return values. This adds the accompanying property to the command:

self.retTypeStr

which returns None for commands that do no return a value.


Use tidair-packages for epics modules instead of lcls-ii

Author: Ryan Herbst [email protected]
Date: Fri Aug 23 15:17:04 2019 -0700
Pull: #459 (9 additions, 11 deletions, 6 files changed)
Branch: slaclab/conda2

Notes:


Add wait helper

Author: Ryan Herbst [email protected]
Date: Sun Sep 8 12:34:08 2019 -0700
Pull: #487 (11 additions, 7 deletions, 2 files changed)
Branch: slaclab/wait_helper

Notes:


Provide mechanism to lock variable contents

Author: Ryan Herbst [email protected]
Date: Tue Sep 3 09:41:02 2019 -0700
Pull: #477 (16 additions, 2 deletions, 3 files changed)
Branch: slaclab/var_lock

Notes:

This is useful when modifying a list or other complex data stored in a local variable.

with self.MyVariable.lock:
lst = self.MyVariable.get()
lst[100] = 10
self.MyVariable.set(lst)


Revert stream to use encoded variable value

Author: Ryan Herbst [email protected]
Date: Fri Sep 6 14:42:12 2019 -0700
Pull: #485 (7 additions, 9 deletions, 1 files changed)
Branch: slaclab/small_stream

Notes:


Support 64-bit file sizes

Author: Ryan Herbst [email protected]
Date: Fri Jun 7 23:25:44 2019 -0700
Pull: #403 (8 additions, 8 deletions, 2 files changed)
Branch: slaclab/file_64-bit

Notes:


Call enable variable update chain directly

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 23:20:26 2019 -0700
Pull: #437 (8 additions, 6 deletions, 2 files changed)
Branch: slaclab/enable_update

Notes:

This will cause the update chain for the Enable variable to be caused directly in response to set() instead of being pushed to the update queue.


protocols/batcher/CoreV1.cpp Update

Author: Ryan Herbst [email protected]
Date: Wed Aug 14 09:28:05 2019 -0700
Pull: #449 (8 additions, 6 deletions, 1 files changed)
Branch: slaclab/batcher-update

Notes:

Description

  • Added 256-bit and 512 bit support
  • Added URL to Batcher documentation

Merge in thread names for UDP client and server

Author: Ryan Herbst [email protected]
Date: Fri Sep 20 10:31:25 2019 -0700
Pull: #514 (11 additions, 1 deletions, 2 files changed)
Branch: slaclab/ESROGUE-391-pre
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-391-pre

Notes:


Add NoServe Group

Author: Ryan Herbst [email protected]
Date: Tue Sep 17 21:59:33 2019 -0700
Pull: #503 (9 additions, 3 deletions, 3 files changed)
Branch: slaclab/no_update

Notes:


PrbsRx: Check for frame errors and address segfault

Author: Ryan Herbst [email protected]
Date: Thu Sep 19 14:22:30 2019 -0700
Pull: #510 (9 additions, 2 deletions, 1 files changed)
Branch: slaclab/ESROGUE-393_ESROGUE-392
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-393_ESROGUE-392

Notes:


Remove epics from mac build

Author: Ryan Herbst [email protected]
Date: Sat Aug 24 09:12:13 2019 -0700
Pull: #462 (4 additions, 7 deletions, 2 files changed)
Branch: slaclab/mac_epics

Notes:


Batcher bug fixes

Author: Ryan Herbst [email protected]
Date: Tue Aug 13 16:39:42 2019 -0700
Pull: #448 (8 additions, 2 deletions, 2 files changed)
Branch: slaclab/tacs-dev

Notes:

Header size was being calculated incorrectly in the 64-bit width case.

copyFrame() was being called with source and dest params switched.

(Don't delete this branch after merging.)


Pass varValue list to test function

Author: Ryan Herbst [email protected]
Date: Wed Sep 4 13:00:05 2019 -0700
Pull: #479 (5 additions, 4 deletions, 1 files changed)
Branch: slaclab/wait_list

Notes:

Example Usage:

pyrogue.VariableWait([client.dummyTree.AxiVersion.ScratchPad,client.dummyTree.AxiVersion.AlarmTest],
      lambda vv: vv[0].value > 10 and vv[1].value > 110)  

Fix corner case where block and device have the same offset

Author: Ryan Herbst [email protected]
Date: Wed Sep 18 16:14:24 2019 -0700
Pull: #505 (5 additions, 2 deletions, 1 files changed)
Branch: slaclab/ESROGUE-394
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-394

Notes:


Adding twosComplement() function to _Model.py

Author: Larry Ruckman [email protected]
Date: Wed Sep 11 17:20:51 2019 -0700
Pull: #492 (6 additions, 0 deletions, 1 files changed)
Branch: slaclab/twosComplement

Notes:

Description

  • Adding twosComplement() function to _Model.py

Hidden fix

Author: Ryan Herbst [email protected]
Date: Fri Aug 23 17:28:39 2019 -0700
Pull: #460 (1 additions, 4 deletions, 2 files changed)
Branch: slaclab/hidden_fix

Notes:


Fix out of bounds error in configuration file

Author: Jesus Vasquez [email protected]
Date: Wed Jul 24 10:08:58 2019 -0700
Pull: #430 (4 additions, 1 deletions, 1 files changed)
Branch: slaclab/ESCRYODET-210
Jira: https://jira.slac.stanford.edu/issues/ESCRYODET-210

Notes:

https://jira.slac.stanford.edu/browse/ESCRYODET-210


Adding checkPayload argument to PrbsRx

Author: Ryan Herbst [email protected]
Date: Mon Sep 9 13:14:55 2019 -0700
Pull: #488 (2 additions, 2 deletions, 1 files changed)
Branch: slaclab/PrbsRx-checkPayload

Notes:

Description

  • Adding checkPayload argument to PrbsRx

Avoid sending empty streams

Author: Ryan Herbst [email protected]
Date: Fri Sep 6 14:43:21 2019 -0700
Pull: #486 (3 additions, 1 deletions, 1 files changed)
Branch: slaclab/no_empty_stream

Notes:


Allow user to update a command's function

Author: Ryan Herbst [email protected]
Date: Thu Sep 12 18:18:51 2019 -0400
Pull: #495 (3 additions, 0 deletions, 1 files changed)
Branch: slaclab/update_command

Notes:

This can be used to update the default settings for built in commands. As an example:

root.SaveConfig.replaceFunction(lambda arg: self.saveYaml(name=arg,
                                        readFirst=False,
                                        modes=['RW','WO'],
                                        incGroups='MyConfigGroup',
                                         excGroups='NoConfig',
                                         autoPrefix='config')

Add deprecation warning to background commands

Author: Ryan Herbst [email protected]
Date: Thu Aug 29 14:08:20 2019 -0700
Pull: #454 (3 additions, 0 deletions, 1 files changed)
Branch: slaclab/deprecate

Notes:


Fix config load issue

Author: Ryan Herbst [email protected]
Date: Thu Aug 1 16:53:35 2019 -0700
Pull: #435 (2 additions, 1 deletions, 2 files changed)
Branch: slaclab/cfg_load_smurf

Notes:

This fixes an issue where a memory block bit is first set to 1 using a configuration file wildcard and then later set to zero. The current code would not clear the bit.


Fixed typo in _gui.py

Author: Ryan Herbst [email protected]
Date: Wed Sep 25 17:22:54 2019 -0700
Pull: #523 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/gui-typo-fix

Notes:

Description

  • Fixed typo in _gui.py

Exclude hidden in gui by default

Author: Ryan Herbst [email protected]
Date: Tue Sep 10 14:46:18 2019 -0400
Pull: #490 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/hidden_fix2

Notes:


Increase max byte size for PRBS

Author: Ryan Herbst [email protected]
Date: Thu Sep 5 20:28:17 2019 -0700
Pull: #483 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ESROGUE-390
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-390

Notes:


Update package requirements in documentation

Author: Ryan Herbst [email protected]
Date: Fri Aug 23 15:17:31 2019 -0700
Pull: #457 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ESROGUE-441
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-441

Notes:


Remove debug message

Author: Ryan Herbst [email protected]
Date: Wed Aug 21 09:32:49 2019 -0700
Pull: #453 (0 additions, 2 deletions, 1 files changed)
Branch: slaclab/bug_fixes

Notes: