1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 <2017> 2018 2019 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 <2017> 2018 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: Asyn and devices with changing register map |
From: | Dirk Zimoch <[email protected]> |
To: | "Konrad, Martin" <[email protected]> |
Cc: | EPICS <[email protected]> |
Date: | Mon, 16 Jan 2017 13:59:40 +0100 |
Hello Konrad, I have written regDev to solve this type of problems. It does not use asyn.You simply specify address and data type in the INP/OUT link. Our FPGA developers use it a lot, because they can easily generate new template or substitution files that match their code without the help of anyone from Controls. It can also be used for quickly prototyping access to a new VME or PCI board or to extend functionality of existing drivers by giving direct access to registers unsupported by the driver. Exchanging data with another program using shared memory is also possible.
RegDev is a device support front end without any driver knowledge (like asyn). I have driver back ends for VME access and memory mapped files (e.g. /sys/bus/pci/devices/*resource*, /dev/mem, /dev/shm/*).
Git repositories: A helper function: https://github.com/paulscherrerinstitute/memDisplay regDev device support: https://github.com/paulscherrerinstitute/regdev mmap driver: https://github.com/paulscherrerinstitute/mmap Dirk On 06.01.2017 23:30, Konrad, Martin wrote:
Hi Mark, I am intending to implement a driver for an FPGA-based device based on asynPortDriver. I am wondering how to deal with devices which are under heavy development resulting in frequent changes to their register map. In this context I am looking for a simple and clean way to tie records to a certain address. In a world without Asyn I would implement a driver that simply reads the address and the type of a register from the INP/OUT fields of my records. This could be changed easily (even by an FPGA engineer) without recompiling the driver and all configuration data is in the record definition. Note that I'm fine with this slightly harder to read data in the INP/OUT field. Usually the record's name, the description field, and if necessary additional comments provide sufficient information about what the address stands for. Using Asyn it seems like I need to populate Asyn's paramList which in the case of most drivers seems to be a hard-coded mapping between names and addresses. Are there any drivers that populate this dynamically on IOC start from a configuration file or even from the EPICS database file? Thanks a lot, Martin