From 631db837a011bd08f741584e4a789d3a527bc558 Mon Sep 17 00:00:00 2001 From: Adrian Weber Date: Thu, 19 Apr 2018 16:42:54 +0200 Subject: [PATCH] new Version of devTrbNet --- .../Documentation_TrbNet_SlowControl.pdf | Bin 0 -> 140540 bytes .../TrbnetApp/Db/trbADC.substitutions | 36 + Trbnet/devTrbnet/TrbnetApp/Db/trbADC.template | 91 ++ .../TrbnetApp/Db/trbExample.substitutions | 8 +- .../TrbnetApp/Db/trbExample.template | 64 +- Trbnet/devTrbnet/TrbnetApp/src/devTrbnet.c | 1187 ++++++++++++----- Trbnet/devTrbnet/TrbnetApp/src/trberror.h | 80 ++ Trbnet/devTrbnet/TrbnetApp/src/trbnet.h | 287 ++++ Trbnet/devTrbnet/configure/CONFIG_SITE | 2 +- Trbnet/devTrbnet/configure/RELEASE | 7 +- Trbnet/devTrbnet/iocBoot/iocTrbnet/st.cmd | 10 +- 11 files changed, 1451 insertions(+), 321 deletions(-) create mode 100644 Trbnet/devTrbnet/Documentation_TrbNet_SlowControl.pdf create mode 100644 Trbnet/devTrbnet/TrbnetApp/Db/trbADC.substitutions create mode 100644 Trbnet/devTrbnet/TrbnetApp/Db/trbADC.template create mode 100644 Trbnet/devTrbnet/TrbnetApp/src/trberror.h create mode 100644 Trbnet/devTrbnet/TrbnetApp/src/trbnet.h diff --git a/Trbnet/devTrbnet/Documentation_TrbNet_SlowControl.pdf b/Trbnet/devTrbnet/Documentation_TrbNet_SlowControl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8714b86c29b2085b44c7a5302fbcab84da28ee77 GIT binary patch literal 140540 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%0D4i5O3k=%|Z7CPDc8oM82$0pxuU}Y(eAf{_-Ao7u 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 literal 0 HcmV?d00001 diff --git a/Trbnet/devTrbnet/TrbnetApp/Db/trbADC.substitutions b/Trbnet/devTrbnet/TrbnetApp/Db/trbADC.substitutions new file mode 100644 index 0000000..8ae8fed --- /dev/null +++ b/Trbnet/devTrbnet/TrbnetApp/Db/trbADC.substitutions @@ -0,0 +1,36 @@ +file $(TOP)/TrbnetApp/Db/trbADC.template { +#TrbSc:0 | DiRICH:1 | Combiner:2 | PowerVoltage:3 | PowerCurrent: 4 + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1218} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1214} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1240} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1223} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1226} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1232} +# {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x} +# {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1237} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1215} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1229} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1241} + + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1225} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1234} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1235} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1231} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1213} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1239} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1227} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1217} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1236} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1228} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1238} + {TRBADDR=0x8300, REGADDR=ADC_1, TRBADDRWave=0x1233} + + {TRBADDR=0x8300, REGADDR=ADC_2, TRBADDRWave=0x8300} + {TRBADDR=0x8300, REGADDR=ADC_3, TRBADDRWave=0x8300} + {TRBADDR=0x8300, REGADDR=ADC_4, TRBADDRWave=0x8300} + + {TRBADDR=0x8300, REGADDR=ADC_2, TRBADDRWave=0x8301} + {TRBADDR=0x8300, REGADDR=ADC_3, TRBADDRWave=0x8301} + {TRBADDR=0x8300, REGADDR=ADC_4, TRBADDRWave=0x8301} +} diff --git a/Trbnet/devTrbnet/TrbnetApp/Db/trbADC.template b/Trbnet/devTrbnet/TrbnetApp/Db/trbADC.template new file mode 100644 index 0000000..2980084 --- /dev/null +++ b/Trbnet/devTrbnet/TrbnetApp/Db/trbADC.template @@ -0,0 +1,91 @@ +record (waveform,"HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR)") +{ + field( DESC, "Waveform of ADCs.") + field( SCAN , "5 second") + field( DTYP, "devTrbnet" ) + field( INP, "@TrbNet $(TRBADDRWave) $(REGADDR)" ) + field( NELM, "10") + field( FTVL, "DOUBLE") + field( FLNK, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):Testfan_") +} + +record(dfanout, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):Testfan_") +{ + field(OUTA, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_0.PROC") + field(OUTB, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_1.PROC") + field(OUTC, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_2 PP") + field(OUTD, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_3 PP") + field(OUTE, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_4 PP") + #field(FLNK, "HADES:RICH:DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray.PROC") +} + +record(subArray, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_0") +{ + field(DESC, "lower half") + field(DTYP, "Soft Channel") + field(MALM, "10") + field(INDX, "0") +# field(EGU, "mV ") + field(FTVL, "DOUBLE") + field(NELM, "1") + field(INP, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR).VAL") +} + +record(subArray, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_1") +{ + field(DESC, "lower half") + field(DTYP, "Soft Channel") + field(MALM, "10") + field(INDX, "1") +# field(EGU, "mV ") + field(FTVL, "DOUBLE") + field(NELM, "1") + field(INP, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR).VAL") +} + + +record(subArray, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_2") +{ + field(DESC, "lower half") + field(DTYP, "Soft Channel") + field(MALM, "10") + field(INDX, "2") +# field(EGU, "mV ") + field(FTVL, "DOUBLE") + field(NELM, "1") + field(INP, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR).VAL") +} + +record(subArray, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_3") +{ + field(DESC, "lower half") + field(DTYP, "Soft Channel") + field(MALM, "10") + field(INDX, "3") +# field(EGU, "mV ") + field(FTVL, "DOUBLE") + field(NELM, "1") + field(INP, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR).VAL") +} + +record(subArray, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray_4") +{ + field(DESC, "lower half") + field(DTYP, "Soft Channel") + field(MALM, "10") + field(INDX, "4") +# field(EGU, "mV ") + field(FTVL, "DOUBLE") + field(NELM, "1") + field(INP, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR).VAL") +} + +#record(subArray, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR):SubArray2") +#{ +# field(DESC, "Upper half") +# field(DTYP, "Soft Channel") +# field(INP, "HADES:RICH:DiRICH:$(TRBADDRWave):$(REGADDR)") +# field(FTVL, "DOUBLE") +# field(MALM, "1024") +#} + diff --git a/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.substitutions b/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.substitutions index 8d80e32..216963d 100644 --- a/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.substitutions +++ b/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.substitutions @@ -1,7 +1,3 @@ -file trbExample.template { -{TRBADDR=0x0200, REGADDR=0xc804} -{TRBADDR=0x0201, REGADDR=0xc804} -{TRBADDR=0x0202, REGADDR=0xc804} -{TRBADDR=0x0203, REGADDR=0xc804} +file TrbnetApp/Db/trbExample.template { + {P=HAD:RICH:, TRBADDR=0x2220, REGADDR="3V8", TRBADDRWave=0x2220} } - diff --git a/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.template b/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.template index 16d6e0e..bc57368 100644 --- a/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.template +++ b/Trbnet/devTrbnet/TrbnetApp/Db/trbExample.template @@ -1,10 +1,62 @@ -record( longin, "TRB:$(TRBADDR):READREGISTER:$(REGADDR)" ) { +#record( longin, "Adrian:Test:TRB:$(TRBADDR):READREGISTER:$(REGADDR)" ) { +# field( SCAN , "5 second") +# field( DTYP, "devTrbnet" ) +# field( INP, "@TrbNet $(TRBADDR) $(REGADDR)" ) +# field( FTVL, "FLOAT") +# #field( FLNK, "TRB:$(TRBADDR):Get_Temperature") +#} + +#record( calc, "TRB:$(TRBADDR):Get_Temperature" ) { +# field( DESC , "Get Bits 31 to 20" ) +# field( INPA , "TRB:$(TRBADDR):READREGISTER:0x00" ) +# field(CALC, "floor(A/1048576)") #roundoff e.g. 5/2=2 ; 2^20 is 1048576 +#} + + +#record (waveform,"$(P)DiRICH:$(TRBADDRWave):READREGISTER:$(REGADDR)") +record (waveform,"$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR)") +{ + field( DESC, "Waveform of DiRich Temperatures.") + field( SCAN , "5 second") field( DTYP, "devTrbnet" ) - field( INP, "@$(TRBADDR) $(REGADDR)" ) + field( INP, "@TrbNet $(TRBADDRWave) $(REGADDR)" ) + field( NELM, "200") + field( FTVL, "DOUBLE") + field( FLNK, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):Calc_") } -record( longout, "TRB:$(TRBADDR):WRITEREGISTER:$(REGADDR)" ) { - field( DTYP, "devTrbnet" ) - field( OUT, "@$(TRBADDR) $(REGADDR)" ) +record(calcout, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):Calc_") +{ + field(INPA, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR).NELM") + field(CALC, "A/2") + field(OUT, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):Testfan_.VAL PP") + #field(FLNK, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):Testfan_.PROC") + +} + +record(dfanout, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):Testfan_") +{ + field(OUTA, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray.NELM PP") + field(OUTB, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray2.INDX") + field(OUTC, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray2.NELM PP") + #field(FLNK, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray.PROC") +} + +record(subArray, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray") +{ + field(DESC, "lower half") + field(DTYP, "Soft Channel") + field(MALM, "1024") + field(INDX, "0") + field(FTVL, "DOUBLE") + field(INP, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR).VAL") +} + +record(subArray, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR):SubArray2") +{ + field(DESC, "Upper half") + field(DTYP, "Soft Channel") + field(INP, "$(P)DiRICH:$(TRBADDRWave):RREG:$(REGADDR)") + field(FTVL, "DOUBLE") + field(MALM, "1024") } - \ No newline at end of file diff --git a/Trbnet/devTrbnet/TrbnetApp/src/devTrbnet.c b/Trbnet/devTrbnet/TrbnetApp/src/devTrbnet.c index a287d8b..9609ddd 100644 --- a/Trbnet/devTrbnet/TrbnetApp/src/devTrbnet.c +++ b/Trbnet/devTrbnet/TrbnetApp/src/devTrbnet.c @@ -1,302 +1,885 @@ -/******************************************************************************* - * Copyright (C) 2013 Florian Feldbauer - * - Helmholtz-Institut Mainz - * - * This file is part of devTrbnet - * - * devTrbnet is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * devTrbnet is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - ******************************************************************************/ - -/****** I N C L U D E S *******************************************************/ - -/* ANSI C includes */ -#include -#include -#include - -/* EPICS includes */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* local includes */ -#include "trberror.h" -#include "trbnet.h" - -/****** D E F I N I T I O N S **************************************************/ -static long initLi( longinRecord* prec ); -static long initLo( longoutRecord* prec ); -static long initWaveform( waveformRecord* prec ); -static long processLi( longinRecord* prec ); -static long processLo( longoutRecord* prec ); -static long processWaveform( waveformRecord* prec ); - -typedef struct { - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN process; -} dev_dset_trbnet_t; - -typedef struct { - epicsUInt16 trb_addr; - epicsUInt16 reg_addr; -} trbnet_info_t; - -/****** G L O B A L S **********************************************************/ -dev_dset_trbnet_t dev_trbnet_li = { 6, NULL, NULL, initLi, NULL, processLi }; -dev_dset_trbnet_t dev_trbnet_lo = { 6, NULL, NULL, initLo, NULL, processLo }; -dev_dset_trbnet_t dev_trbnet_waveform = { 6, NULL, NULL, initWaveform, NULL, processWaveform }; - -/****** L O C A L S ************************************************************/ -static bool _trb_connected = false; - -/****** F U N C T I O N S ******************************************************/ - -epicsExportAddress( dset, dev_trbnet_li ); -epicsExportAddress( dset, dev_trbnet_lo ); -epicsExportAddress( dset, dev_trbnet_waveform ); - -/*----- Common initialization for all records ---------------------------------*/ -static long initCommon( dbCommon* prec, DBLINK* plink ) { - - trbnet_info_t *pinfo; - epicsUInt32 trb_addr_buf = 0; - epicsUInt32 reg_addr_buf = 0; - - if ( sscanf( plink->value.instio.string, "%x %x", &trb_addr_buf, ®_addr_buf ) != 2 ) { - fprintf( stderr, "\033[31;1m%s: Invalid value of INP/OUT field '%s'\033[0m\n", - prec->name, plink->value.instio.string ); - return -1; - } - if ( 0xffff < trb_addr_buf ) { - fprintf( stderr, "\033[31;1m%s: Invalid trb address '%x'\033[0m\n", - prec->name, trb_addr_buf ); - return -1; - } - if ( 0xffff < reg_addr_buf ) { - fprintf( stderr, "\033[31;1m%s: Invalid register address '%x'\033[0m\n", - prec->name, reg_addr_buf ); - return -1; - } - - pinfo = callocMustSucceed( 1, sizeof(*pinfo), "devTrbnet::initCommon" ); - pinfo->trb_addr = (epicsUInt16)( trb_addr_buf & 0xffff ); - pinfo->reg_addr = (epicsUInt16)( reg_addr_buf & 0xffff ); - - prec->dpvt = pinfo; - prec->udf = FALSE; - - return 0; -} - -/*----- initialization of longin records --------------------------------------*/ -static long initLi( longinRecord* prec ) { - long status = 0; - prec->pact = (epicsUInt8)true; /* disable record */ - - status = initCommon( (dbCommon *)prec, &prec->inp ); - prec->pact = (epicsUInt8)false; /* enable record */ - - return status; -} - -/*----- initialization of longout records -------------------------------------*/ -static long initLo( longoutRecord* prec ) { - long status = 0; - prec->pact = (epicsUInt8)true; /* disable record */ - - status = initCommon( (dbCommon *)prec, &prec->out ); - prec->pact = (epicsUInt8)false; /* enable record */ - - return status; -} - -/*----- initialization of waveform records ------------------------------------*/ -static long initWaveform( waveformRecord* prec ) { - long status = 0; - prec->pact = (epicsUInt8)true; /* disable record */ - - if ( DBF_ULONG != prec->ftvl ) { - fprintf( stderr, "\033[31;1m%s: Invalid field type of value\033[0m\n", prec->name ); - return -1; - } - - status = initCommon( (dbCommon *)prec, &prec->inp ); - prec->pact = (epicsUInt8)false; /* enable record */ - - return status; -} - -/*----- process routine of longin records -------------------------------------*/ -static long processLi( longinRecord* prec ) { - trbnet_info_t* pinfo = (trbnet_info_t*)prec->dpvt; - epicsUInt32 data[2] = { 0 }; - int trb_stat = 0; - - if( !_trb_connected ){ - if( init_ports() == -1 ) { - fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); - return -1; - } - _trb_connected = true; - } - - trb_stat = trb_register_read( pinfo->trb_addr, pinfo->reg_addr, data, 2 ); - if ( -1 == trb_stat ) { - /* first try failed, do it again */ - if( init_ports() == -1 ) { - fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); - return -1; - } - trb_stat = trb_register_read( pinfo->trb_addr, pinfo->reg_addr, data, 2 ); - if ( -1 == trb_stat ) { - /* second try failed, return error */ - fprintf( stderr, "\033[31;1m%s: read_register failed: %d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, READ_ALARM, INVALID_ALARM ); - _trb_connected = false; - return -1; - } - } - /* Check Status-Bits */ - if ( TRB_STATUS_WARNING == trb_errno ) { - fprintf( stderr, "%s: Warning: Status-Bit(s) have been set:\n%s\n", - prec->name, trb_termstr( trb_term ) ); - return -1; - } - - prec->val = data[1]; - return 0; -} - -/*----- process routine of longout records ------------------------------------*/ -static long processLo( longoutRecord* prec ) { - trbnet_info_t* pinfo = (trbnet_info_t*)prec->dpvt; - epicsUInt32 value = prec->val; - int trb_stat = 0; - - if( !_trb_connected ) { - if( init_ports() == -1 ) { - fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); - return -1; - } - _trb_connected = true; - } - - trb_stat = trb_register_write( pinfo->trb_addr, pinfo->reg_addr, value ); - if ( -1 == trb_stat ) { - /* first try failed, do it again */ - if( init_ports() == -1 ) { - fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); - return -1; - } - trb_stat = trb_register_write( pinfo->trb_addr, pinfo->reg_addr, value ); - if ( -1 == trb_stat ) { - /* second try failed, return error */ - fprintf( stderr, "\033[31;1m%s: write_register failed: %d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, WRITE_ALARM, INVALID_ALARM ); - _trb_connected = false; - return -1; - } - } - if ( TRB_STATUS_WARNING == trb_errno ) { - fprintf( stderr, "%s: Warning: Status-Bit(s) have been set:\n%s\n", - prec->name, trb_termstr( trb_term ) ); - return -1; - } - - return 0; -} - -/*----- process routine of waveform records -----------------------------------*/ -static long processWaveform( waveformRecord* prec ) { - trbnet_info_t *pinfo = (trbnet_info_t*)prec->dpvt; - epicsUInt32 *pvalue = (epicsUInt32*)prec->bptr; - epicsUInt32 *pdata_buf; - epicsUInt32 count = prec->nelm; - int trb_stat = 0; - int i = 0; - - if( !_trb_connected ) { - if( init_ports() == -1 ) { - fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); - return -1; - } - _trb_connected = true; - } - - pdata_buf = callocMustSucceed( count, sizeof(epicsUInt32), "devTrbnet::processWaveform" ); - - trb_stat = trb_register_read( pinfo->trb_addr, pinfo->reg_addr, pdata_buf, count ); - if ( -1 == trb_stat ) { - /* first try failed, do it again */ - if( init_ports() == -1 ) { - fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); - return -1; - } - trb_stat = trb_register_read( pinfo->trb_addr, pinfo->reg_addr, pdata_buf, count ); - if ( -1 == trb_stat ) { - fprintf( stderr, "\033[31;1m%s: read_register failed: %d %s\033[0m\n", - prec->name, trb_errno, trb_strerror() ); - free( pdata_buf ); - recGblSetSevr( prec, READ_ALARM, INVALID_ALARM ); - _trb_connected = false; - return -1; - } - } - if ( TRB_STATUS_WARNING == trb_errno ) { - fprintf( stderr, "%s: Warning: Status-Bit(s) have been set:\n%s\n", - prec->name, trb_termstr( trb_term ) ); - return -1; - } - - if ( trb_stat > prec->nelm ) trb_stat = prec->nelm; - for( ; i < trb_stat; i++ ) pvalue[i] = pdata_buf[i]; - - prec->nord = trb_stat; - - free( pdata_buf ); - return 0; -} - +/****** I N C L U D E S *******************************************************/ + +/* ANSI C includes */ +#include +#include +#include +#include +#include + +/* EPICS includes */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* local includes */ +#include "trberror.h" +#include "trbnet.h" + + +#define LINELENGTH 250 + +#define NumberOfBoards 1 + +#define __Name 0 +#define __Scale 1 +#define __Unit 2 +#define __Format 3 +#define __Start 4 +#define __Bits 5 +#define __Rate 6 +#define __ErrorFlag 7 +#define __InvertFlag 8 +#define __Value 9 + +/****** D E F I N I T I O N S **************************************************/ +static long initLi( longinRecord* prec ); +static long initLo( longoutRecord* prec ); +static long initWaveform( waveformRecord* prec ); +static long processLi( longinRecord* prec ); +static long processLo( longoutRecord* prec ); +static long processWaveform( waveformRecord* prec ); + +typedef struct { + long number; + DEVSUPFUN dev_report; + DEVSUPFUN init; + DEVSUPFUN init_record; + DEVSUPFUN get_ioint_info; + DEVSUPFUN process; +} dev_dset_trbnet_t; + +typedef struct { + epicsUInt16 trb_addr; + char* reg_name_buf; + char* reg_name_buf_nbr; + epicsUInt16 reg_addr; + //char entity_name[20]; +} trbnet_info_t; + +typedef struct{ + epicsUInt16 regAddr; + char *name; + float scale; + char *unit; + char *format; + int start; + int bits; + int rate; + char *errorflag; + char *invertflag; + int value; +}field_struct; + +typedef struct{ + epicsUInt16 regAddr; + char *name; + char *purpose; + field_struct *field; + int size; + int used; + int value; +}reg_struct; + +typedef struct{ + epicsUInt16 address; + char *name; + reg_struct *Reg; + size_t size; + size_t used; +}trb_struct; + +/****** G L O B A L S **********************************************************/ +dev_dset_trbnet_t dev_trbnet_li = { 6, NULL, NULL, initLi, NULL, processLi }; +dev_dset_trbnet_t dev_trbnet_lo = { 6, NULL, NULL, initLo, NULL, processLo }; +dev_dset_trbnet_t dev_trbnet_waveform = { 6, NULL, NULL, initWaveform, NULL, processWaveform }; +trb_struct *trb; +int databaseSet = 0; + +/****** L O C A L S ************************************************************/ +static bool _trb_connected = false; + +/****** F U N C T I O N S ******************************************************/ + +epicsExportAddress( dset, dev_trbnet_li ); +epicsExportAddress( dset, dev_trbnet_lo ); +epicsExportAddress( dset, dev_trbnet_waveform ); + +/*----- TEST FUNKTION ---------------------------------------------------------*/ +int trb_register_readTESTFUNKTION( uint16_t trb_addr, + uint16_t addr, + uint32_t *data, + unsigned int dsize) +{ + int status = 0; + if (trb_addr== 0) { + if (addr== 0) { + data[0] = 0; + //data[1]=21400000; + data[1] = 557842432; + } + return 2; + } + else if(trb_addr == 1) { + data[0] = 0; + data[1] = 557842432; + data[2] = 1; + data[3] = 557845532; + data[4] = 2; + data[5] = 557823451; + data[6] = 3; + data[7] = 557733332; + data[8] = 4; + data[9] = 667823451; + data[10] = 5; + data[11] = 598733332; + return 12; + } else { + return -1; + } +} + +int PadiwaSendCmd(uint32_t cmd, uint32_t board, uint32_t chain) { + + uint32_t c[] = { cmd,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1<Reg[RegNumb].field = (field_struct *)malloc(sizeof(field_struct)); // 1 field + trb->Reg[RegNumb].used = 0; + trb->Reg[RegNumb].size = 1; + //Init with start values + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].regAddr = trb->Reg[RegNumb].regAddr; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].name = NULL; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].scale = 1; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].unit = NULL; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].format = NULL; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].start = 0; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].bits = 32; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].rate = -1; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].errorflag = NULL; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].invertflag = NULL; + trb->Reg[RegNumb].field[trb->Reg[RegNumb].used].value = -1; +} + +void initReg(trb_struct *trb, size_t initialSize) { + trb->Reg = (reg_struct *)malloc(initialSize * sizeof(reg_struct)); + trb->used = 0; + trb->size = initialSize; + int i=0; + for ( i; i < initialSize; i++) { + initField(trb, i); // trb_struct; i01= Element of Register + } +} + +// Insert a new field. Only RegAddress is Set from default +void insertField(reg_struct *reg) { + if (reg->used == reg->size) { + reg->size++; + reg->field = (field_struct *)realloc(reg->field, reg->size * sizeof(field_struct)); + } + //Init with start values + reg->field[reg->used].regAddr = reg->regAddr; //set register Address + reg->field[reg->used].name = NULL; + reg->field[reg->used].scale = 1; + reg->field[reg->used].unit = NULL; + reg->field[reg->used].format = NULL; + reg->field[reg->used].start = 0; + reg->field[reg->used].bits = 32; + reg->field[reg->used].rate = -1; + reg->field[reg->used].errorflag = NULL; + reg->field[reg->used].invertflag = NULL; + reg->field[reg->used].value = -1; + reg->used++; +} + +int setFieldPropertyInt(reg_struct *reg,int fieldNmb, int element, int data) { + if (fieldNmb < reg->used) { + if (element == __Start){ //field start + reg->field[fieldNmb].start = data; + } else if (element == __Bits){ //field bits + reg->field[fieldNmb].bits = data; + } else if (element == __Rate){ //field rate + reg->field[fieldNmb].rate = data; + } else if (element == __Value){ //field ratevalue + reg->field[fieldNmb].value = data; + } else { + printf("Element does not Fit to a INT Type property.\n"); + } + return 0; + } else { + return 1; //Error + } +} + +int setFieldPropertyStr(reg_struct *reg,int fieldNmb, int element, char *data) { + if (fieldNmb < reg->used) { + if(element == __Name){ //field NAME + reg->field[fieldNmb].name =strdup(data); + } else if (element == __Unit){ //field UNIT + reg->field[fieldNmb].unit = strdup(data); + } else if (element == __Format){ //field format + reg->field[fieldNmb].format = strdup(data); + } else if (element == __ErrorFlag){ //field errorflag + reg->field[fieldNmb].errorflag = strdup(data); + } else if (element == __InvertFlag){//field invertflag + reg->field[fieldNmb].invertflag = strdup(data); + } else { + printf("Element does not Fit to a STRING Type property.\n"); + } + return 0; + } else { + return 1; //Error; Field does not exist + } +} + +int setFieldPropertyFloat(reg_struct *reg, int fieldNmb, int element, float data) { + if (fieldNmb < reg->used) { + if (element == __Scale){ //field SCALE + reg->field[fieldNmb].scale = data; + } else { + printf("Element does not Fit to a FLOAT Type property.\n"); + } + return 0; + } else { + return 1; //Error; Field does not exist + } +} + +void insertReg(trb_struct *trb, int element) { + if (trb->used == trb->size) { + trb->size++; + trb->Reg = (reg_struct *)realloc(trb->Reg, trb->size * sizeof(reg_struct)); + } + trb->Reg[trb->used].regAddr = element; + initField(trb, trb->used); + trb->used++; +} + +// free the allocated memory of the fields of each Register +void freeField(trb_struct *trb) { + int i=0; + for (i;iused;i++){ + free(trb->Reg[i].field); + trb->Reg[i].field = NULL; + trb->Reg[i].used = trb->Reg[i].size = 0; + } +} + +// free the allocated memory of each register +void freeReg(trb_struct *trb) { + freeField(trb); + free(trb->Reg); + trb->Reg = NULL; + trb->used = trb->size = 0; +} + +/*----- Common initialization for all records ---------------------------------*/ + +static long initCommon( dbCommon* prec, DBLINK* plink ) { + + trbnet_info_t *pinfo; + char entity_name_buf[20] = ""; + char Reg_name_buf[20] = ""; + epicsUInt32 trb_addr_buf = 0; + epicsUInt32 reg_addr_buf = 0; + + char linebuffer[LINELENGTH]; + + if ( sscanf( plink->value.instio.string, "%s %x %s", entity_name_buf, &trb_addr_buf, Reg_name_buf ) != 3 ) { + fprintf( stderr, "\033[31;1m%s: Invalid value of INP/OUT field '%s'\033[0m\n", + prec->name, plink->value.instio.string ); + return -1; + } + if ( 0xffff < trb_addr_buf ) { + fprintf( stderr, "\033[31;1m%s: Invalid trb address '%x'\033[0m\n", + prec->name, trb_addr_buf ); + return -1; + } + + pinfo = callocMustSucceed( 1, sizeof(*pinfo), "devTrbnet::initCommon" ); + pinfo->trb_addr = (epicsUInt16)( trb_addr_buf & 0xffff ); +// pinfo->reg_name_buf = strdup(Reg_name_buf); + prec->dpvt = pinfo; + prec->udf = FALSE; + int i=0; + + // check special cases that are not inb XMLS Database + char * pname; +// char reg_name_buf[30]; +// strcpy(reg_name_buf, pinfo->reg_name_buf); + pname = strtok(Reg_name_buf,"_"); + pinfo->reg_name_buf = strdup(pname); + + while (pname != NULL){ +// printf("Ausgabe: %s\n",pname); + pinfo->reg_name_buf_nbr = strdup(pname); + pname = strtok(NULL," "); + + } +//printf("test: %s\n",pinfo->reg_name_buf); +//printf("test2: %s\n",pinfo->reg_name_buf_nbr); +//----------------------------------------------------------------// + + + +// create Memory for each TrbBoard + if (databaseSet==0) + { + trb = (trb_struct *) malloc(NumberOfBoards * sizeof(trb_struct)); + + for(i=0;i") == 0){ + group_open = false; + } + if (strcmp(node,"") == 0){ + register_open = false; + } + if (strcmp(node,"") == 0){ + field_open = false; + } + + // analyse each part of one line of .xml document + while(ptr != NULL) { + + if (group_open==true && register_open==false && field_open==false) { + sscanf(ptr, "address=\"%x\"", &gaddress); + sscanf(ptr, "name=\"%[A-z,_0-9]\"", gname); + sscanf(ptr, "mode=\"%[A-z,_,0-9]\"", gmode); + } + if (register_open==true && group_open==true && field_open==false){ + if(sscanf(ptr, "address=\"%x\"", ®_addr_buf)==1){ + pinfo->reg_addr = (epicsUInt16)( (reg_addr_buf + gaddress) & 0xffff ); + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].regAddr = pinfo->reg_addr; + } + } + if(sscanf(ptr, "name=\"%[A-z,_0-9]\"", rname)==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].name = strdup(rname); + printf("RNAME: %s\n", rname); + } + } + + if(sscanf(ptr, "purpose=\"%[A-z,_0-9]\"", purpose)==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].purpose = strdup(purpose); + } + } + } + + if (field_open==true && group_open==true && register_open==true){ + if (strcmp(ptr,"/>\n") == 0){ + field_open=false; + } + if (sscanf(ptr, "name=\"%[A-z,_0-9]\"", fname)==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].name = strdup(fname); + printf(" FNAME: %s %i\n", rname,NumberOfBoards); + + } + } + if (sscanf(ptr, "format=\"%[A-z,_0-9]\"", fformat)==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].format = strdup(fformat); + } + } + if (sscanf(ptr, "bits=%*c%i%*c", &bits)==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].bits = bits; + } + } + if (sscanf(ptr, "start=%*c%i%*c", &start)==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].start = start; + } + } + if (sscanf(ptr, "rate=%*c%i%*c", &rate )==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].rate = rate; + } + } + if (sscanf(ptr, "unit=%*c%x%*c", &unit )==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].unit = unit; + } + } + if (sscanf(ptr, "scale=%*c%f%*c", &scale )==1){ + for (i=0; i < NumberOfBoards; i++){ + trb[i].Reg[trb[i].used-1].field[trb[i].Reg[trb[i].used-1].used-1].scale = scale; + } + } + } + + + ptr = strtok(NULL, delimiter); + }//end while2 + }//end while1 + + + fclose(fp); + databaseSet = 1; + } + if ( 0xffff < reg_addr_buf ) { + fprintf( stderr, "\033[31;1m%s: Invalid register address '%x'\033[0m\n",prec->name, reg_addr_buf ); + return -1; + } +printf("%i\n",__LINE__); +//----------------------------------------------------------------------// + + // Test the fields + printf("Register Addres: %i\n", trb[0].Reg[2].regAddr); // getAddr of Register[0] + printf("Number of registers: %i\n", trb[0].size); // print number of fields in Register + printf("Number of fields:%i\n", trb[0].Reg[1].size); // print name of field 1 in Register 0 + printf("Number of fields:%s\n", trb[0].Reg[2].field[0].name); // print name of field 1 in Register 0 + printf("%i\n", trb[0].used); // getAddr of Register[0] + +//---------------------------------------------------------------------------------------------// + /*free memory + for(i=0;ipact = (epicsUInt8)true; /* disable record */ + + status = initCommon( (dbCommon *)prec, &prec->inp ); + prec->pact = (epicsUInt8)false; /* enable record */ + + return status; +} + +/*----- initialization of longout records -------------------------------------*/ +static long initLo( longoutRecord* prec ) { + long status = 0; + prec->pact = (epicsUInt8)true; /* disable record */ + + status = initCommon( (dbCommon *)prec, &prec->out ); + prec->pact = (epicsUInt8)false; /* enable record */ + + return status; +} + +/*----- initialization of waveform records ------------------------------------*/ +static long initWaveform( waveformRecord* prec ) { + long status = 0; + prec->pact = (epicsUInt8)true; /* disable record */ + + if ( DBF_DOUBLE != prec->ftvl ) { + fprintf( stderr, "\033[31;1m%s: Invalid field type of value\033[0m\n", prec->name ); + return -1; + } + + status = initCommon( (dbCommon *)prec, &prec->inp ); + + prec->pact = (epicsUInt8)false; /* enable record */ + + return status; +} + +/*----- process routine of longin records -------------------------------------*/ +static long processLi( longinRecord* prec ) { + trbnet_info_t* pinfo = (trbnet_info_t*)prec->dpvt; + epicsUInt32 data[2] = { 0 }; + int trb_stat = 0; + + int j,k,i,address; + int search_stat = 0 ; + int trb_Nmb=0, reg_Nmb=0, field_Nmb=0; + + if( !_trb_connected ){ + if( init_ports() == -1 ) { + fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); // could be a problem (prec->name) + recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); + return -1; + } + _trb_connected = true; + } + + + + // READ Address from Database + for(i=0;ireg_name_buf) == 0){ + search_stat = 0; + } + else { + for(k=0;kreg_name_buf) == 0){ + address = trb[i].Reg[j].field[k].regAddr; + search_stat = 0; + trb_Nmb=i; reg_Nmb=j; field_Nmb=k; + } else { + search_stat = -1; + } + } + } + } + } + + if (search_stat){ + int data_size = 2; + trb_stat = trb_register_read( pinfo->trb_addr, address, data, data_size ); + //trb_stat = trb_register_readTESTFUNKTION( pinfo->trb_addr, address, data, data_size ); + + //--------------------------------------// + if ( -1 == trb_stat ) { + /* first try failed, do it again */ + if( init_ports() == -1 ) { + fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); + return -1; + } + trb_stat = trb_register_read( pinfo->trb_addr, address, data, data_size ); + if ( -1 == trb_stat ) { + /* second try failed, return error */ + fprintf( stderr, "\033[31;1m%s: read_register failed: %d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + recGblSetSevr( prec, READ_ALARM, INVALID_ALARM ); + _trb_connected = false; + return -1; + } + } + /* Check Status-Bits */ + if ( TRB_STATUS_WARNING == trb_errno ) { + fprintf( stderr, "%s: Warning: Status-Bit(s) have been set:\n%s\n", + prec->name, trb_termstr( trb_term ) ); + recGblSetSevr( prec, NULL, NULL); + return -1; + } + //------------------------------// + double output = -1; + epicsUInt32 start = pow(2, trb[trb_Nmb].Reg[reg_Nmb].field[field_Nmb].start); + epicsUInt32 end = pow(2, trb[trb_Nmb].Reg[reg_Nmb].field[field_Nmb].bits); + double scale = trb[trb_Nmb].Reg[reg_Nmb].field[field_Nmb].scale; + + for (i=0; i< data_size;i+=2){ + output = ((data[i+1]/start)%end )*scale; + prec->val = output; + } + //--------------------------------// + + } else { + printf("No Address Name %s found!\n", pinfo->reg_name_buf); + } + + return 0; +} + +//----- LONGOUT IS NOT IN USE!!!-----------------------------------------------// +/*----- process routine of longout records ------------------------------------*/ +static long processLo( longoutRecord* prec ) { + trbnet_info_t* pinfo = (trbnet_info_t*)prec->dpvt; + epicsUInt32 value = prec->val; + int trb_stat = 0; + + if( !_trb_connected ) { + if( init_ports() == -1 ) { + fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); + return -1; + } + _trb_connected = true; + } + + trb_stat = trb_register_write( pinfo->trb_addr, pinfo->reg_addr, value ); + if ( -1 == trb_stat ) { + /* first try failed, do it again */ + if( init_ports() == -1 ) { + fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); + return -1; + } + trb_stat = trb_register_write( pinfo->trb_addr, pinfo->reg_addr, value ); + if ( -1 == trb_stat ) { + /* second try failed, return error */ + fprintf( stderr, "\033[31;1m%s: write_register failed: %d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + recGblSetSevr( prec, WRITE_ALARM, INVALID_ALARM ); + _trb_connected = false; + return -1; + } + } + if ( TRB_STATUS_WARNING == trb_errno ) { + fprintf( stderr, "%s: Warning: Status-Bit(s) have been set:\n%s\n", + prec->name, trb_termstr( trb_term ) ); + return -1; + } + + return 0; +} + +/*----- process routine of waveform records -----------------------------------*/ +static long processWaveform( waveformRecord* prec ) { + printf("%i\n",__LINE__); + trbnet_info_t *pinfo = (trbnet_info_t*)prec->dpvt; + epicsUInt32 *pdata_buf; + epicsUInt32 count = 200;//prec->nelm; // equal to 100 boards + int trb_stat = 0; + int i = 0; +printf("%i\n",__LINE__); + + if( !_trb_connected ) { + if( init_ports() == -1 ) { + fprintf( stderr, "\033[31;1m%s: init_ports failed TEST:\n%d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); // same as above + recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); + return -1; + } + _trb_connected = true; + } + printf("%i\n",__LINE__); + pdata_buf = callocMustSucceed( count, sizeof(epicsUInt32), "devTrbnet::processWaveform" ); + printf("%i\n",__LINE__); + int j,k,address; + int search_stat = -1 ; + int trb_Nmb=0, reg_Nmb=0, field_Nmb=0; + + if (strcmp(pinfo->reg_name_buf, "ADC") == 0){ + search_stat = 1; +} else { +printf("%i\n",__LINE__); + for(i=0;i= 0){ printf("%i\n",__LINE__); + //run without doing smtng + } else { + printf("%i %i %i\n",i,j,__LINE__); + printf("trb %s \n",trb[i].Reg[j].name); + printf("pinfo %s \n",pinfo->reg_name_buf); + printf("comp %i \n",strcmp(trb[i].Reg[j].name,pinfo->reg_name_buf)); + if (strcmp(trb[i].Reg[j].name,pinfo->reg_name_buf) == 0){ + search_stat = 0; printf("%i %i %i\n",i,j,__LINE__); + } + else { + printf("%i\n",__LINE__); + for(k=0;kreg_name_buf)); + + if (strcmp(trb[i].Reg[j].field[k].name, pinfo->reg_name_buf) == 0){ + address = trb[i].Reg[j].field[k].regAddr; + search_stat = 0; + trb_Nmb=i; reg_Nmb=j; field_Nmb=k; + } else { + search_stat = -1; + } + } + } + }//search_stat end if + } + } + +} +printf("%i\n",__LINE__); + int data_size = 2; + unsigned int mode = 0; + + if (search_stat == 1){ + int channel[5] = {7,7,7,6,5}; + int resolution[5][4] = {{2,1,2,1},{2,2,2,1},{2,2,2,4},{2,2,2,2},{3,3,2,2}}; + double multiplier[5][4] = {{1.,1.,0.5,2.},{1.,1.,0.5,0.},{1.,1.,0.5,3.125},{1.,1.,0.5,0.5},{2.5,1.25,1.,0.5}}; + int cmd = 0; + + if (atoi(pinfo->reg_name_buf_nbr)>=0 && atoi(pinfo->reg_name_buf_nbr)<5) { + mode = atoi(pinfo->reg_name_buf_nbr); + } else { + mode = 0; + } + + //prec->nelm = 10; + //prec->bptr = realloc(prec->bptr, prec->nelm * dbValueSize(prec->ftvl)); + + double *pvalue = (epicsUInt32*)prec->bptr; + + + cmd = 0xc1830000 + ( resolution[mode][0] << 25); + int test = trb_register_write(pinfo->trb_addr,0xd41a,25); +//fprintf(stderr,"Test: %d %x\n", test,pinfo->trb_addr); + if (test==0){ // 0x8300 + PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode]); + usleep(5000); + cmd = 0xd1830000 + ( resolution[mode][1] << 25); + pvalue[0]= ((( PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][0]); + // fprintf(stderr," 1: %f \n",(double) ((( PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][0])); + usleep(5000); + cmd = 0xe1830000 + ( resolution[mode][2] << 25); + pvalue[1]= ((( PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][1]); + // fprintf(stderr," 2: %f \n",(double) ((( PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][1]) ); + usleep(1000); + cmd = 0xf1830000 + ( resolution[mode][3] << 25); + pvalue[2]= ((( PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][2]); + // fprintf(stderr," 3: %f \n",(double) ((( PadiwaSendCmd(cmd,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][2]) ); + usleep(5000); + pvalue[3]= ((( PadiwaSendCmd(0xf3930000,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][3]); + // fprintf(stderr," 4: %f \n",(double) (((PadiwaSendCmd(0xf3930000,pinfo->trb_addr,channel[mode])>>19)&0xfff)*multiplier[mode][3]) ); + usleep(5000); + pvalue[4]= ((( PadiwaSendCmd(0,pinfo->trb_addr,channel[mode])>>19)&0xfff)/16.); + // fprintf(stderr," 5: %3.2f \n", (double) (((PadiwaSendCmd(0,pinfo->trb_addr,channel[mode])>>19)&0xfff)/16.)); + + trb_register_write(pinfo->trb_addr,0xd41a,7); + } else {fprintf(stderr,"ERR in TEST");recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM );} + + } else if (search_stat == 0) { + trb_stat = trb_register_read( pinfo->trb_addr, address, pdata_buf, count ); // + if ( -1 == trb_stat ) { + /* first try failed, do it again */ + if( init_ports() == -1 ) { + fprintf( stderr, "\033[31;1m%s: init_ports failed:\n%d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + recGblSetSevr( prec, COMM_ALARM, INVALID_ALARM ); + return -1; + } + trb_stat = trb_register_read( pinfo->trb_addr, address, pdata_buf, count ); + if ( -1 == trb_stat ) { + fprintf( stderr, "\033[31;1m%s: read_register failed: %d %s\033[0m\n", + prec->name, trb_errno, trb_strerror() ); + free( pdata_buf ); + if (trb_errno == 12){ + prec->nelm = prec->nelm * 2; + } + recGblSetSevr( prec, READ_ALARM, INVALID_ALARM ); + _trb_connected = false; + return -1; + } + } + if ( TRB_STATUS_WARNING == trb_errno ) { + fprintf( stderr, "%s: Warning: Status-Bit(s) have been set:\n%s\n", + prec->name, trb_termstr( trb_term ) ); + recGblSetSevr( prec, READ_ALARM, INVALID_ALARM ); + return -1; + } + + if ( trb_stat != prec->nelm ) { + prec->nelm = trb_stat; + prec->bptr = realloc(prec->bptr, prec->nelm * dbValueSize(prec->ftvl)); + } + + + double *pvalue = (epicsUInt32*)prec->bptr; + + + //---------------------------------------------------// + double output = -1; + epicsUInt32 start = pow(2, trb[trb_Nmb].Reg[reg_Nmb].field[field_Nmb].start); + epicsUInt32 end = pow(2, trb[trb_Nmb].Reg[reg_Nmb].field[field_Nmb].bits); + double scale = trb[trb_Nmb].Reg[reg_Nmb].field[field_Nmb].scale; + +/* for( i=0; i < trb_stat; i+=2 ) { + output = ((pdata_buf[i+1]/start)%end )*scale; + pvalue[i] = pdata_buf[i]; + pvalue[i+1] = output; + } +*/ + for( i=0; i<( prec->nelm/2); i+=1 ){ + output = ((pdata_buf[(i*2)+1]/start)%end ) * scale; + pvalue[i] = pdata_buf[i*2]; +// pvalue[i+(trb_stat/2)] = output; + pvalue[i+(prec->nelm/2)] = output; + } + + //---------------------------------------------------// + + } else { + printf("No Address Name %s found!\n", pinfo->reg_name_buf); + } + + +//--------------------------------// + prec->nord = prec->nelm; + + free( pdata_buf ); + + return 0; +} + diff --git a/Trbnet/devTrbnet/TrbnetApp/src/trberror.h b/Trbnet/devTrbnet/TrbnetApp/src/trberror.h new file mode 100644 index 0000000..e551116 --- /dev/null +++ b/Trbnet/devTrbnet/TrbnetApp/src/trberror.h @@ -0,0 +1,80 @@ +#ifndef TRBERROR_H +#define TRBERROR_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + TRB_NONE = 0, + TRB_TX_BUSY = 1, + TRB_FIFO_NOT_EMPTY = 2, + TRB_FIFO_TIMEOUT = 3, + TRB_FIFO_HEADERS = 4, + TRB_FIFO_SEQUENZ = 5, + TRB_FIFO_INVALID_MODE = 6, + TRB_FIFO_INCOMPLETE_PACKAGE = 7, + TRB_FIFO_INVALID_HEADER = 8, + TRB_FIFO_MISSING_TERM_HEADER = 9, + TRB_FAILED_WAIT_IS_VALID = 10, + TRB_FAILED_WAIT_IS_NOT_VALID = 11, + TRB_USER_BUFFER_OVF = 12, + TRB_INVALID_CHANNEL = 13, + TRB_INVALID_PKG_NUMBER = 14, + TRB_STATUS_ERROR = 15, + TRB_INVALID_ADDRESS = 16, + TRB_INVALID_LENGTH = 17, + TRB_ENDPOINT_NOT_REACHED = 18, + TRB_DMA_UNAVAILABLE = 19, + TRB_DMA_TIMEOUT = 20, + TRB_READMEM_INVALID_SIZE = 21, + TRB_HDR_DLEN = 22, + TRB_PEXOR_OPEN = 23, + TRB_SEMAPHORE = 24, + TRB_FIFO_SHARED_MEM = 25, + TRB_STATUS_WARNING = 26, + TRB_RPC_ERROR = 27, + TRB_PEXOR_DATA_ERROR = 28, + TRB_PEXOR_DEVICE_ERROR = 29, + TRB_PEXOR_DEVICE_TRB_TIMEOUT = 30, + TRB_PEXOR_DEVICE_POLLING_TIMEOUT = 31, + TRB_PEXOR_DEVICE_DMA_EMPTY = 32, + TRB_PEXOR_DEVICE_INVALID_DMA_SIZE = 33, + TRB_PEXOR_DEVICE_LOST_CREDENTIAL = 34, + TRB_PEXOR_DEVICE_FIFO_TRANSFER = 35, + TRB_TRB3_CMD_NOT_SUPPORTED = 36, + TRB_TRB3_SOCKET_ERROR = 37, + TRB_TRB3_SOCKET_TIMEOUT = 38, + TRB_TRB3_INCOMPLETE_UDP = 39, + TRB_TRB3_DATA_ERROR = 40, + TRB_TRB3_INVALID_UDP_HEADER = 41 +} TRB_ERROR; + +/* last TRBNet-TermPackage */ +typedef struct { + uint16_t status_common; + uint16_t status_channel; + uint16_t sequence; + uint8_t channel; +} TRB_TERM; + +extern int trb_errno; + +extern TRB_TERM trb_term; + +void trb_error(const char *s); + +const char* trb_strerror(); + + +const char* trb_errorstr(int trberrno); + +const char* trb_termstr(TRB_TERM term); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Trbnet/devTrbnet/TrbnetApp/src/trbnet.h b/Trbnet/devTrbnet/TrbnetApp/src/trbnet.h new file mode 100644 index 0000000..f0478ee --- /dev/null +++ b/Trbnet/devTrbnet/TrbnetApp/src/trbnet.h @@ -0,0 +1,287 @@ +#ifndef TRBNET_H +#define TRBNET_H + +extern const char trbnet_version[]; + +#include +#include + +extern unsigned int trb_debug; + +#ifdef PEXOR +extern char pexor_deviceName[256]; +extern int pexor_dma; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* ---------------------------------------------------------------------- */ + +int init_ports(); + +int trb_register_read(uint16_t trb_address, + uint16_t reg_address, + uint32_t* data, + unsigned int dsize); + +int trb_registertime_read(uint16_t trb_address, + uint16_t reg_address, + uint32_t* data, + unsigned int dsize); + +int trb_register_read_mem(uint16_t trb_address, + uint16_t reg_address, + uint8_t option, + uint16_t size, + uint32_t* data, + unsigned int dsize); + +int trb_registertime_read_mem(uint16_t trb_address, + uint16_t reg_address, + uint8_t option, + uint16_t size, + uint32_t* data, + unsigned int dsize); + +int trb_register_write(uint16_t trb_address, + uint16_t reg_address, + uint32_t value); + +int trb_register_write_mem(uint16_t trb_address, + uint16_t reg_address, + uint8_t option, + const uint32_t* data, + uint16_t size); + +int trb_read_uid(uint16_t trb_address, + uint32_t* data, + unsigned int dsize); + +int trb_set_address(uint64_t uid, + uint8_t endpoint, + uint16_t trb_address); + + +int trb_ipu_data_read(uint8_t type, + uint8_t trg_info, + uint8_t trg_random, + uint16_t trg_number, + uint32_t* data, + unsigned int dsize); + +int trb_send_trigger(uint8_t type, + uint32_t info, + uint8_t random, + uint16_t number); + +int trb_send_trigger_rich(uint8_t input, + uint8_t type, + uint32_t info, + uint8_t random, + uint16_t number); + +int fpga_register_read(uint32_t reg_address, + uint32_t* value); + +int fpga_register_write(uint32_t reg_address, + uint32_t value); + +int trb_nettrace(uint16_t trb_address, + uint32_t *data, + unsigned int dsize); + +int trb_register_setbit(uint16_t trb_address, + uint16_t reg_address, + uint32_t bitMask); + +int trb_register_clearbit(uint16_t trb_address, + uint16_t reg_address, + uint32_t bitMask); + +int trb_register_loadbit(uint16_t trb_address, + uint16_t reg_address, + uint32_t bitMask, + uint32_t bitValue); + +#ifdef PEXOR +int fpga_register_read_mem(uint32_t reg_address, + uint32_t* data, + unsigned int size); + +int fpga_register_write_mem(uint32_t reg_address, + const uint32_t* data, + unsigned int size); +#endif + +int trb_fifo_flush(uint8_t channel); + +int network_reset(); + +int com_reset(); + +/* ---------------------------------------------------------------------- */ + +/* This library provides several function to access the trbnet on a + Etrax-Board. + +*/ + +/************************************************************************/ +/* In case of any error the gloabl varianble 'trb_errno' will be set, */ +/* see trberror.h for details. */ +/************************************************************************/ + + +/************************************************************************/ +/* int trb_register_read(uint16_t trb_address, + uint16_t reg_address, + uint32_t* data, + unsigned int dsize); + + trb_address: TRB-Address of the TRB-Endpoint + reg_address: Register-Address to be read from, broadcasts are supported + data: Pointer to a uint32_t Data-Buffer + dsize: Size of the Data-Buffer in units of 32bit-words + + ReturnValue: == -1 on error, trberrno will be set + >= 0 number of 32bit-words which were stored in Data-Buffer + + TRB-Channel used: slow control (3) + + reads the register reg_address of a TRB-Endpoint with address + trb_address. The received data is stored in the Data-Buffer data. + + The format of the Data-Buffer is: + first word: TRB-Address of the sender + second word: register value + + --> The size of the Data-Buffer must be at least >= 2 + +*/ + + +/************************************************************************/ +/* int trb_register_read_mem(uint16_t trb_address, + uint16_t reg_address, + uint8_t option, + uint16_t size, + uint32_t* data, + unsigned int dsize); + + trb_address: TRB-Address of the TRB-Endpoint + reg_address: Register-Address to be read from, broadcasts are supported + uint8_t option: + uint16_t size: Number of 32Bit-words to be read + data: Pointer to a uint32_t Data-Buffer + dsize: Size of the Data-Buffer in units of 32bit-words + + ReturnValue: == -1 on error, trberrno will be set + >= 0 number of 32bit-words which were stored in Data-Buffer + + TRB-Channel used: slow control (3) + + reads the register reg_address of a TRB-Endpoint with address + trb_address. The received data is stored in the Data-Buffer data. + + The format of the Data-Buffer is: + first word: TRB-Address of the sender (Lower 2Bytes), len (Upper 2bytes) + second word: register value + + --> The size of the Data-Buffer must be at least >= 2 + +*/ + + +/************************************************************************/ +/* int trb_register_write(uint16_t trb_address, + uint16_t reg_address, + uint32_t value); + + trb_address: TRB-Address of the TRB-Endpoint, broadcasts are supported + reg_address: Register-Address to be written to + value: 32bit-word to be writen to the register + + ReturnValue: == -1 on error, trberrno will be set + + TRB-Channel used: slow control (3) + + writes the value to the register reg_address of a TRB-Endpoint with address + trb_address. +*/ + +/************************************************************************/ +/* int trb_read_uid(uint16_t trb_address, + uint32_t* data, + unsigned int dsize); + + trb_address: TRB-Address of the TRB-Endpoint, broadcasts are supported + data: Pointer to a uint32_t Data-Buffer + dsize: Size of the Data-Buffer in units of 32bit-words + + ReturnValue: == -1 on error, trberrno will be set + >= 0 number of 32bit-words which were stored in Data-Buffer + + TRB-Channel used: slow control (3) + + reads the Unique-Id of a TRB-Endpoint with address trb_address. The + received data is stored in the Data-Buffer data. + + The format of the Data-Buffer is: + first word: UID High-32Bit Word + second word: UID Low-32Bit Word + third word: Endpoint Number + fourth word: TRB-Address of the sender + + --> The size of the Data-Buffer must be at least >= 4 + +*/ + +/************************************************************************/ +/* int trb_set_address(uint64_t uid, + uint8_t endpoint, + uint16_t trb_address); + + uint64_t uid: the UID of the Endpoint + uint8_t endpoint: Number of the TRBNet-Endpoint + uint16_t trb_address: the new TRB-Netaddress, broadcasts are not supported + + ReturnValue: == -1 on error, trberrno will be set + == 0 on success + + TRB-Channel used: slow control (3) + + sets a new TRB-Address trb_address of the give TRFNet-endpoint. +*/ + +/************************************************************************/ +/* int trb_ipu_data_read(uint8_t type, + uint8_t trg_info, + uint8_t trg_random, + uint16_t trg_number, + uint32_t* data, + unsigned int dsize); + + data: Pointer to a uint32_t Data-Buffer + dsize: Size of the Data-Buffer in units of 32bit-words + + ReturnValue: == -1 on error, trberrno will be set + >= 0 0 number of 32bit-words which were stored in Data-Buffer + + send a request to all TRBNet-Endpoints to readout the IPU-Data. The IPU + Datastream will be stored in the user DataBufer. +*/ + +/************************************************************************/ +/* int trb_send_trigger(uint8_t type, + uint32_t info, + uint8_t random, + uint16_t number); +*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Trbnet/devTrbnet/configure/CONFIG_SITE b/Trbnet/devTrbnet/configure/CONFIG_SITE index 72b399d..e9e295e 100644 --- a/Trbnet/devTrbnet/configure/CONFIG_SITE +++ b/Trbnet/devTrbnet/configure/CONFIG_SITE @@ -19,7 +19,7 @@ CHECK_RELEASE = YES # Set this when you only want to compile this application # for a subset of the cross-compiled target architectures # that Base is built for. -#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 +CROSS_COMPILER_TARGET_ARCHS = # To install files into a location other than $(TOP) define # INSTALL_LOCATION here. diff --git a/Trbnet/devTrbnet/configure/RELEASE b/Trbnet/devTrbnet/configure/RELEASE index 7c64f0e..943bc18 100644 --- a/Trbnet/devTrbnet/configure/RELEASE +++ b/Trbnet/devTrbnet/configure/RELEASE @@ -25,11 +25,14 @@ TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top #SNCSEQ=$(EPICS_BASE)/../modules/soft/seq # Trbnet -TRBNET = /home/florian/trbsoft/trbnettools +TRBNET = /home/adrian/trb/trbnettools/libtrbnet/ # EPICS_BASE usually appears last so other apps can override stuff: -EPICS_BASE=/usr/Epics/base +EPICS_BASE=/home/epics/EPICS/EPICS-3.14.12.4/base # Set RULES here if you want to take build rules from somewhere # other than EPICS_BASE: #RULES=/path/to/epics/support/module/rules/x-y + +#EPICS_TRBNET_XML_PATH=/home/adrian/trb/daqtools/xml-db/database/ +#EPICS_TRBNET_XML_NAME=TrbNet diff --git a/Trbnet/devTrbnet/iocBoot/iocTrbnet/st.cmd b/Trbnet/devTrbnet/iocBoot/iocTrbnet/st.cmd index 29ca7fc..1f33260 100644 --- a/Trbnet/devTrbnet/iocBoot/iocTrbnet/st.cmd +++ b/Trbnet/devTrbnet/iocBoot/iocTrbnet/st.cmd @@ -1,6 +1,8 @@ -#!../../bin/linux-x86_64/Trbnet +#!../../bin/linux-arm/Trbnet < envPaths +epicsEnvSet("EPICS_TRBNET_XML_PATH","/home/adrian/trb/daqtools/xml-db/database/") +epicsEnvSet("EPICS_TRBNET_XML_NAME","MDC") cd ${TOP} @@ -9,10 +11,10 @@ dbLoadDatabase "dbd/Trbnet.dbd" Trbnet_registerRecordDeviceDriver pdbbase ## Load record instances -dbLoadRecords("db/trbExample.db") - +#dbLoadRecords("db/trbADC.db") +#dbLoadTemplate("TrbnetApp/Db/trbADC.substitutions") +dbLoadTemplate("TrbnetApp/Db/trbExample.substitutions") cd ${TOP}/iocBoot/${IOC} iocInit ## Start any sequence programs -#seq sncxxx,"user=florianHost" -- 2.43.0