EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  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  <20182019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: Stream device does not recognize a custom record type
From: "Abdalla Ahmad" <[email protected]>
To: Dirk Zimoch <[email protected]>, "[email protected]" <[email protected]>
Date: Mon, 1 Oct 2018 09:55:53 +0000
Hi Dirk

I tried the attached header file but I still get the same stack trace.

Best Regards,
Abdalla.

-----Original Message-----
From: Abdalla Ahmad 
Sent: Monday, October 01, 2018 12:08 PM
To: 'Dirk Zimoch' <[email protected]>; [email protected]
Subject: RE: Stream device does not recognize a custom record type

Hello Dirk

Thank you for your suggestions.

I do have some questions. Can you please explain more on how do I re-build the header file? You mean re-compile it with the new base version? Because the file is already in the source code I did not notice if it is automatically generated. 

I am already looking in the standard mbbiDirectRecord.h and see how it is implemented if that's what you mean. 

Best Regards,
Abdalla.

-----Original Message-----
From: Dirk Zimoch [mailto:[email protected]]
Sent: Monday, October 01, 2018 11:59 AM
To: Abdalla Ahmad <[email protected]>; [email protected]
Subject: Re: Stream device does not recognize a custom record type

Hi Abdalla,

I think I found your problem. You cannot use the mbbi2Record.h file generated with EPICS 3.14.12. You need to re-build it with the new EPICS base version. The reason is that this file is generated from your mbbi2.dbd file which includes dbCommon.dbd which may change from one EPICS version to another. That makes all the offsets of the fields wrong and accessing them using db functions like dbLoadLink results in wrong data being used. NULL pointer in your case.

Dirk

On 01.10.2018 09:44, Abdalla  Ahmad wrote:
> Hello Dirk,
> 
> I think somehow stream device is involved, not that the problem is in it but how it interacts with this new record type. In the example PV I showed I changed the record type from mbbi2 to mbbiDirect and it works fine.
> 
> Regarding the stack trace there is something interesting. I looked up the mbbiDirect record source in base 3.15.5, specifically the file src/std/rec/mbbiDirectRecord.c and in the init_record routine (line 97), it first checks for a null device support entry table (struct mbbidset) before calling the function "recGblInitConstantLink". In the mbbi2 record this is inverted, it calls this function then checks for null pointer DSET. I re-arranged these two section to be the same as in the mbbi2Direct record and I got this on the IOC shell:
> 
> Missing device support entry table PV: BO-RF-SGN1:getStatusWord mbbi2: 
> init_record
> 
> dbGetLinkValue: Illegal link type 1
> Thread _main_ (0x8eb40e0) can't proceed, suspending.
> Dumping a stack trace of thread '_main_':
> [0x260bc4]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libCom.so.3.15.5(epicsBa
> ckTrace+0x24)
> [0x260a0e]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libCom.so.3.15.5(epicsSt
> ackTrace+0x4e)
> [0x24f420]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libCom.so.3.15.5(cantPro
> ceed+0x50)
> [0x17c532]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libdbCore.so.3.15.5(dbGe
> tLink+0xb2)
> [0x16e61f]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libdbCore.so.3.15.5(dbPr
> ocess+0x1af)
> [0x1a4b5b]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libdbCore.so.3.15.5(iocB
> uild_2+0x49b)
> [0x1a4c0a]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libdbCore.so.3.15.5(iocB
> uild+0x3a)
> [0x1a4c77]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libdbCore.so.3.15.5(iocI
> nit+0x17)
> [0x1a53f7]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libdbCore.so.3.15.5(iocI
> nitCallFunc+0x17)
> [0x24a271]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libCom.so.3.15.5(iocshBo
> dy+0xb41)
> [0x24aa25]: 
> /home/control/epics/base-3.15.5/lib/linux-x86/libCom.so.3.15.5(iocsh+0
> x25)
> [0x804c54d]: ./bin/linux-x86/ioc(main+0x1d)
> [0x29ace6]: /lib/libc.so.6(__libc_start_main+0xe6)
> [0x804bb61]: ./bin/linux-x86/ioc(_start+0x21)
> 
> The record source code looks very similar to the standard mbbiDirect. I have checked structures' definitions, the EPICS export calls, record support routines, etc. in some other standard records. I'm not sure what I could be missing here.
> 
> Best Regards,
> Abdalla.
> 
> 
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Dirk Zimoch
> Sent: Monday, October 01, 2018 10:10 AM
> To: [email protected]
> Subject: Re: Stream device does not recognize a custom record type
> 
> Hello Abdalla,
> 
> In the stack trace you can see a problem with a NULL pointer access in your record support code. No StreamDevice involved here at all.
> 
> Are you sure you load the correct dbd file? Loading a dbd file of a wrong EPICS base version is a common cause for crashes.
> 
> I will try your code. Maybe I find something....
> 
> Dirk
> 
> On 30.09.2018 14:41, Abdalla  Ahmad wrote:
>> Hi
>>
>> One of our IOC servers currently has the following setup:
>>
>> OS: SL 6.4 32-bit
>>
>> EPICS: 3.15.5 (previously 3.14.12.3)
>>
>> synApps built from assemble_synApps script (previously 5.6)
>>
>> Stream device R2-7-7a (Previously 2-5-1)
>>
>> This IOC has some records that use a custom record called "mbbi2"
>> which was created here at SESAME by an engineer used to work here. 
>> The purpose of this record is to provide alarm severity for each bit 
>> of the standard mbbiDirect, otherwise they are the same.
>>
>> The problem is integrating this record with the stream device driver.
>> What we found after searching the synApps 5.6 setup:
>>
>> 1.Adding MBBI2 definition to the stream device configure/RELEASE.
>>
>> 2.Including mbbi2.dbd and mbbi library in streamApp/Makefile.
>>
>> 3.Having mbbi2Record.h and devmbbiStream.c sources in the 
>> StreamDevice/src
>>
>> 4.Adding mbbi2 to RECORDS in StreamDevice/src/CONFIG_STREAM
>>
>> That's all under base 3.14.12.3, we are not sure if something else is 
>> missing under 3.15.5 setup. With all these steps, the new stream 
>> device driver compiles with mbbi2 definitions (dbd file, ldd 
>> command), but when running the IOC it immediately crashes with 
>> segmentation fault. I enabled core dumps, loaded the core dump into 
>> gdb, backtrace it and I got this
>>
>> Core was generated by `./bin/linux-x86/ioc iocBoot/ioc/st.cmd'.
>>
>> Program terminated with signal 11, Segmentation fault.
>>
>> #0  cvt_st_us (from=0xb <Address 0xb out of bounds>, to=0x87f9354,
>> paddr=0x0) at ../../../src/ioc/db/dbFastLinkConv.c:161
>>
>> 161     if (*from == 0) {
>>
>> Missing separate debuginfos, use: debuginfo-install
>> glibc-2.12-1.107.el6_4.5.i686 libgcc-4.4.7-3.el6.i686
>> libstdc++-4.4.7-3.el6.i686 ncurses-libs-5.7-3.20090208.el6.i686
>> net-snmp-libs-5.5-44.el6_4.4.i686 openssl-1.0.0-27.el6_4.2.i686
>> pcre-7.8-6.el6.i686 readline-6.0-4.el6.i686 zlib-1.2.3-29.el6.i686
>>
>> (gdb) backtrace
>>
>> #0  cvt_st_us (from=0xb <Address 0xb out of bounds>, to=0x87f9354,
>> paddr=0x0) at ../../../src/ioc/db/dbFastLinkConv.c:161
>>
>> #1  0x00848d0f in dbConstLoadLink (plink=0x87f9338, dbrType=4,
>> pbuffer=0x87f9354) at ../../../src/ioc/db/dbLink.c:108
>>
>> #2  dbLoadLink (plink=0x87f9338, dbrType=4, pbuffer=0x87f9354) at
>> ../../../src/ioc/db/dbLink.c:475
>>
>> #3  0x008556fc in recGblInitConstantLink (plink=0x87f9338, dbftype=4,
>> pdest=0x87f9354) at ../../../src/ioc/db/recGbl.c:167
>>
>> #4  0x006c14f8 in init_record (prec=0x87f91c0, pass=1) at
>> ../mbbi2Record.c:153
>>
>> #5  0x008719c7 in doInitRecord1 () at
>> ../../../src/ioc/misc/iocInit.c:543
>>
>> #6  iterateRecords () at ../../../src/ioc/misc/iocInit.c:472
>>
>> #7  initDatabase () at ../../../src/ioc/misc/iocInit.c:551
>>
>> #8  iocBuild_2 () at ../../../src/ioc/misc/iocInit.c:148
>>
>> #9  0x00871c0a in iocBuild () at ../../../src/ioc/misc/iocInit.c:187
>>
>> #10 0x00871c77 in iocInit () at ../../../src/ioc/misc/iocInit.c:99
>>
>> #11 0x008723f7 in iocInitCallFunc (args=0x878ba80) at
>> ../../../src/ioc/misc/miscIocRegister.c:25
>>
>> #12 0x00a11271 in iocshBody (pathname=<value optimized out>, 
>> commandLine=0x0, macros=0x0) at
>> ../../../src/libCom/iocsh/iocsh.cpp:815
>>
>> #13 0x00a11a25 in iocsh (pathname=0xbfe125f0 "iocBoot/ioc/st.cmd") at
>> ../../../src/libCom/iocsh/iocsh.cpp:883
>>
>> #14 0x0804c97d in main (argc=2, argv=0xbfe10514) at ../iocMain.cpp:17
>>
>> The IOC was complaining about DTYP and BFST fields which it cannot 
>> set their values, we looked up the mbbi2.dbd and found out deprecated 
>> values for the promotgroup. We are not sure if this is the problem or 
>> not but we changed all promotegroup to the new values found in base
>> 3.15.5 app developer guide, the IOC accepted the DTYP field but still 
>> unable to set . Still facing the same segmentation fault with the same backtrace.
>>
>> Here is an example mbbi2 record:
>>
>> record(mbbi2, "$(SYSTEM):getStatusWord")
>>
>> {
>>
>>       field(DESC, "Reads status word")
>>
>>       field(SCAN, "2 second")
>>
>>       field(DTYP, "stream")
>>
>>       field(INP, "@work-microwave-ssx.proto getStatusWord
>> $(CONTROLLER)")
>>
>>       field(VAL, "0")
>>
>>       field(PINI, "YES")
>>
>>       field(B0ST, "Standby mode")        field(B0ZSV, "NO_ALARM") 
>> field(B0OSV, "NO_ALARM")
>>
>>       field(B1ST, "PLO PLL")             field(B1ZSV, "NO_ALARM") 
>> field(B1OSV, "MINOR")
>>
>>       field(B2ST, "Reference PLL")       field(B2ZSV, "NO_ALARM") 
>> field(B2OSV, "MAJOR")
>>
>>       field(B3ST, "Reference PLL")       field(B3ZSV, "NO_ALARM") 
>> field(B3OSV, "MINOR")
>>
>>       field(B4ST, "Level Control")       field(B4ZSV, "NO_ALARM") 
>> field(B4OSV, "NO_ALARM")
>>
>>       field(B5ST, "MW")                  field(B5ZSV, "NO_ALARM") 
>> field(B5OSV, "MINOR")
>>
>>       field(B6ST, "OCXO/TCXO")           field(B6ZSV, "NO_ALARM") 
>> field(B6OSV, "NO_ALARM")
>>
>>       field(B7ST, "RF OFF")              field(B7ZSV, "NO_ALARM") 
>> field(B7OSV, "NO_ALARM")
>>
>>       field(B8ST, "Oven status (OCXO)")  field(B8ZSV, "NO_ALARM") 
>> field(B8OSV, "NO_ALARM")
>>
>>       field(B9ST, "Main synthesizer")    field(B9ZSV, "NO_ALARM") 
>> field(B9OSV, "MAJOR")
>>
>>       field(BAST, "VHF synthesizer")     field(BAZSV, "NO_ALARM") 
>> field(BAOSV, "MAJOR")
>>
>>       field(BBST, "Fine synthesizer")    field(BBZSV, "NO_ALARM") 
>> field(BBOSV, "MAJOR")
>>
>>       field(BCST, "DBLR-Status (SSX-3)") field(BCZSV, "NO_ALARM") 
>> field(BCOSV, "MAJOR")
>>
>>       field(BDST, "Summarized alarm")    field(BDZSV, "NO_ALARM") 
>> field(BDOSV, "MAJOR")
>>
>>       field(BEST, "Reference-PLL")       field(BEZSV, "NO_ALARM") 
>> field(BEOSV, "MAJOR")
>>
>>       field(BFST, "MW PLL")              field(BFZSV, "NO_ALARM") 
>> field(BFOSV, "MAJOR")
>>
>> }
>>
>> Sorry for any misinformation, all our findings were the result of 
>> comparing between the two EPICS bases and the two synApps collections.
>> Attached is the record's source code stream device interface files.
>>
>> Best Regards,
>>
>> Abdalla Ahmad
>>
>> Control Engineer
>>
>> SESAME
>>
>> Allan, Jordan.
>>
>> Tel: (+962-5) 3511348 , ext. 265
>>
>> Fax: (+962-5) 3511423
>>
>> Mob: (+962-7)88183296
>>
>> www.sesame.org.jo <http://www.sesame.org.jo/>
>>

#ifndef INCmbbi2H
#define INCmbbi2H

#include "epicsTypes.h"
#include "link.h"
#include "epicsMutex.h"
#include "ellLib.h"
#include "epicsTime.h"

typedef struct mbbi2Record {
	char		name[61];	/* Record Name */
	char		desc[41];	/* Descriptor */
	char		asg[29];	/* Access Security Group */
	epicsEnum16	scan;	/* Scan Mechanism */
	epicsEnum16	pini;	/* Process at iocInit */
	epicsInt16	phas;	/* Scan Phase */
	char		evnt[40];	/* Event Number */
	epicsInt16	tse;	/* Time Stamp Event */
	DBLINK		tsel;	/* Time Stamp Link */
	epicsEnum16	dtyp;	/* Device Type */
	epicsInt16	disv;	/* Disable Value */
	epicsInt16	disa;	/* Disable */
	DBLINK		sdis;	/* Scanning Disable */
	epicsMutexId	mlok;	/* Monitor lock */
	ELLLIST		mlis;	/* Monitor List */
	epicsUInt8	disp;	/* Disable putField */
	epicsUInt8	proc;	/* Force Processing */
	epicsEnum16	stat;	/* Alarm Status */
	epicsEnum16	sevr;	/* Alarm Severity */
	epicsEnum16	nsta;	/* New Alarm Status */
	epicsEnum16	nsev;	/* New Alarm Severity */
	epicsEnum16	acks;	/* Alarm Ack Severity */
	epicsEnum16	ackt;	/* Alarm Ack Transient */
	epicsEnum16	diss;	/* Disable Alarm Sevrty */
	epicsUInt8	lcnt;	/* Lock Count */
	epicsUInt8	pact;	/* Record active */
	epicsUInt8	putf;	/* dbPutField process */
	epicsUInt8	rpro;	/* Reprocess  */
	struct asgMember *asp;	/* Access Security Pvt */
	struct processNotify *ppn;	/* addr of PUTNOTIFY */
	struct processNotifyRecord *ppnr;	/* pputNotifyRecord */
	struct scan_element *spvt;	/* Scan Private */
	struct rset	*rset;	/* Address of RSET */
	struct dset	*dset;	/* DSET address */
	void		*dpvt;	/* Device Private */
	struct dbRecordType *rdes;	/* Address of dbRecordType */
	struct lockRecord *lset;	/* Lock Set */
	epicsEnum16	prio;	/* Scheduling Priority */
	epicsUInt8	tpro;	/* Trace Processing */
	char bkpt;	/* Break Point */
	epicsUInt8	udf;	/* Undefined */
	epicsTimeStamp	time;	/* Time */
	DBLINK		flnk;	/* Forward Process Link */
	epicsUInt16	val;	/* Current Value */
	epicsInt16	nobt;	/* Number of Bits */
	DBLINK		inp;	/* Input Specification */
	epicsUInt32	rval;	/* Raw Value */
	epicsUInt32	oraw;	/* Prev Raw Value */
	epicsUInt32	mask;	/* Hardware Mask */
	epicsUInt16	mlst;	/* Last Value Monitored */
	epicsUInt16	lalm;	/* Last Value Alarmed */
	epicsInt16	sdef;	/* States Defined */
	epicsUInt16	shft;	/* Shift */
	DBLINK		siol;	/* Sim Input Specifctn */
	epicsUInt32	sval;	/* Simulation Value */
	DBLINK		siml;	/* Sim Mode Location */
	epicsEnum16	simm;	/* Simulation Mode */
	epicsEnum16	sims;	/* Sim mode Alarm Svrty */
	epicsUInt8	b0;	/* Bit 0 */
	epicsUInt8	b1;	/* Bit 1 */
	epicsUInt8	b2;	/* Bit 2 */
	epicsUInt8	b3;	/* Bit 3 */
	epicsUInt8	b4;	/* Bit 4 */
	epicsUInt8	b5;	/* Bit 5 */
	epicsUInt8	b6;	/* Bit 6 */
	epicsUInt8	b7;	/* Bit 7 */
	epicsUInt8	b8;	/* Bit 8 */
	epicsUInt8	b9;	/* Bit 9 */
	epicsUInt8	ba;	/* Bit A */
	epicsUInt8	bb;	/* Bit B */
	epicsUInt8	bc;	/* Bit C */
	epicsUInt8	bd;	/* Bit D */
	epicsUInt8	be;	/* Bit E */
	epicsUInt8	bf;	/* Bit F */
  char  b0st[26]; /* Bit 0 description */
  char  b1st[26]; /* Bit 1 description */
  char  b2st[26]; /* Bit 2 description */
  char  b3st[26]; /* Bit 3 description */
  char  b4st[26]; /* Bit 4 description */
  char  b5st[26]; /* Bit 5 description */
  char  b6st[26]; /* Bit 6 description */
  char  b7st[26]; /* Bit 7 description */
  char  b8st[26]; /* Bit 8 description */
  char  b9st[26]; /* Bit 9 description */
  char  bast[26]; /* Bit A description */
  char  bbst[26]; /* Bit B description */
  char  bcst[26]; /* Bit C description */
  char  bdst[26]; /* Bit D description */
  char  best[26]; /* Bit E description */
  char  bfst[26]; /* Bit F description */
  epicsEnum16 b0zsv; /* Bit 0 zero severity */
  epicsEnum16 b1zsv; /* Bit 1 zero severity */
  epicsEnum16 b2zsv; /* Bit 2 zero severity */
  epicsEnum16 b3zsv; /* Bit 3 zero severity */
  epicsEnum16 b4zsv; /* Bit 4 zero severity */
  epicsEnum16 b5zsv; /* Bit 5 zero severity */
  epicsEnum16 b6zsv; /* Bit 6 zero severity */
  epicsEnum16 b7zsv; /* Bit 7 zero severity */
  epicsEnum16 b8zsv; /* Bit 8 zero severity */
  epicsEnum16 b9zsv; /* Bit 9 zero severity */
  epicsEnum16 bazsv; /* Bit A zero severity */
  epicsEnum16 bbzsv; /* Bit B zero severity */
  epicsEnum16 bczsv; /* Bit C zero severity */
  epicsEnum16 bdzsv; /* Bit D zero severity */
  epicsEnum16 bezsv; /* Bit E zero severity */
  epicsEnum16 bfzsv; /* Bit F zero severity */
  epicsEnum16 b0osv; /* Bit 0 one severity */
  epicsEnum16 b1osv; /* Bit 1 one severity */
  epicsEnum16 b2osv; /* Bit 2 one severity */
  epicsEnum16 b3osv; /* Bit 3 one severity */
  epicsEnum16 b4osv; /* Bit 4 one severity */
  epicsEnum16 b5osv; /* Bit 5 one severity */
  epicsEnum16 b6osv; /* Bit 6 one severity */
  epicsEnum16 b7osv; /* Bit 7 one severity */
  epicsEnum16 b8osv; /* Bit 8 one severity */
  epicsEnum16 b9osv; /* Bit 9 one severity */
  epicsEnum16 baosv; /* Bit A one severity */
  epicsEnum16 bbosv; /* Bit B one severity */
  epicsEnum16 bcosv; /* Bit C one severity */
  epicsEnum16 bdosv; /* Bit D one severity */
  epicsEnum16 beosv; /* Bit E one severity */
  epicsEnum16 bfosv; /* Bit F one severity */
  epicsUInt16 bas;   /* Bits alarm source */
} mbbi2Record;
#define mbbi2RecordNAME	0
#define mbbi2RecordDESC	1
#define mbbi2RecordASG	2
#define mbbi2RecordSCAN	3
#define mbbi2RecordPINI	4
#define mbbi2RecordPHAS	5
#define mbbi2RecordEVNT	6
#define mbbi2RecordTSE	7
#define mbbi2RecordTSEL	8
#define mbbi2RecordDTYP	9
#define mbbi2RecordDISV	10
#define mbbi2RecordDISA	11
#define mbbi2RecordSDIS	12
#define mbbi2RecordMLOK	13
#define mbbi2RecordMLIS	14
#define mbbi2RecordDISP	15
#define mbbi2RecordPROC	16
#define mbbi2RecordSTAT	17
#define mbbi2RecordSEVR	18
#define mbbi2RecordNSTA	19
#define mbbi2RecordNSEV	20
#define mbbi2RecordACKS	21
#define mbbi2RecordACKT	22
#define mbbi2RecordDISS	23
#define mbbi2RecordLCNT	24
#define mbbi2RecordPACT	25
#define mbbi2RecordPUTF	26
#define mbbi2RecordRPRO	27
#define mbbi2RecordASP	28
#define mbbi2RecordPPN	29
#define mbbi2RecordPPNR	30
#define mbbi2RecordSPVT	31
#define mbbi2RecordRSET	32
#define mbbi2RecordDSET	33
#define mbbi2RecordDPVT	34
#define mbbi2RecordRDES	35
#define mbbi2RecordLSET	36
#define mbbi2RecordPRIO	37
#define mbbi2RecordTPRO	38
#define mbbi2RecordBKPT	39
#define mbbi2RecordUDF	40
#define mbbi2RecordTIME	41
#define mbbi2RecordFLNK	42
#define mbbi2RecordVAL	43
#define mbbi2RecordNOBT	44
#define mbbi2RecordINP	45
#define mbbi2RecordRVAL	46
#define mbbi2RecordORAW	47
#define mbbi2RecordMASK	48
#define mbbi2RecordMLST	49
#define mbbi2RecordLALM	50
#define mbbi2RecordSDEF	51
#define mbbi2RecordSHFT	52
#define mbbi2RecordSIOL	53
#define mbbi2RecordSVAL	54
#define mbbi2RecordSIML	55
#define mbbi2RecordSIMM	56
#define mbbi2RecordSIMS	57
#define mbbi2RecordB0	58
#define mbbi2RecordB1	59
#define mbbi2RecordB2	60
#define mbbi2RecordB3	61
#define mbbi2RecordB4	62
#define mbbi2RecordB5	63
#define mbbi2RecordB6	64
#define mbbi2RecordB7	65
#define mbbi2RecordB8	66
#define mbbi2RecordB9	67
#define mbbi2RecordBA	68
#define mbbi2RecordBB	69
#define mbbi2RecordBC	70
#define mbbi2RecordBD	71
#define mbbi2RecordBE	72
#define mbbi2RecordBF	73
#define mbbi2RecordB0ST 74
#define mbbi2RecordB1ST 75
#define mbbi2RecordB2ST 76
#define mbbi2RecordB3ST 77
#define mbbi2RecordB4ST 78
#define mbbi2RecordB5ST 79
#define mbbi2RecordB6ST 80
#define mbbi2RecordB7ST 81
#define mbbi2RecordB8ST 82
#define mbbi2RecordB9ST 83
#define mbbi2RecordBAST 84
#define mbbi2RecordBBST 85
#define mbbi2RecordBCST 86
#define mbbi2RecordBDST 87
#define mbbi2RecordBEST 88
#define mbbi2RecordBFST 89
#define mbbi2RecordB0ZSV 90
#define mbbi2RecordB1ZSV 91
#define mbbi2RecordB2ZSV 92
#define mbbi2RecordB3ZSV 93
#define mbbi2RecordB4ZSV 94
#define mbbi2RecordB5ZSV 95
#define mbbi2RecordB6ZSV 96
#define mbbi2RecordB7ZSV 97
#define mbbi2RecordB8ZSV 98
#define mbbi2RecordB9ZSV 99
#define mbbi2RecordBAZSV 100
#define mbbi2RecordBBZSV 101
#define mbbi2RecordBCZSV 102
#define mbbi2RecordBDZSV 103
#define mbbi2RecordBEZSV 104
#define mbbi2RecordBFZSV 105
#define mbbi2RecordB0OSV 106
#define mbbi2RecordB1OSV 107
#define mbbi2RecordB2OSV 108
#define mbbi2RecordB3OSV 109
#define mbbi2RecordB4OSV 110
#define mbbi2RecordB5OSV 111
#define mbbi2RecordB6OSV 112
#define mbbi2RecordB7OSV 113
#define mbbi2RecordB8OSV 114
#define mbbi2RecordB9OSV 115
#define mbbi2RecordBAOSV 116
#define mbbi2RecordBBOSV 117
#define mbbi2RecordBCOSV 118
#define mbbi2RecordBDOSV 119
#define mbbi2RecordBEOSV 120
#define mbbi2RecordBFOSV 121
#define mbbi2RecordBAS 122
#endif /*INCmbbi2H*/
#ifdef GEN_SIZE_OFFSET
#ifdef __cplusplus
extern "C" {
#endif
#include <epicsExport.h>
static int mbbi2RecordSizeOffset(dbRecordType *pdbRecordType)
{
  mbbi2Record *prec = 0;
  pdbRecordType->papFldDes[0]->size=sizeof(prec->name);
  pdbRecordType->papFldDes[0]->offset=(unsigned short)((char *)&prec->name - (char *)prec);
  pdbRecordType->papFldDes[1]->size=sizeof(prec->desc);
  pdbRecordType->papFldDes[1]->offset=(unsigned short)((char *)&prec->desc - (char *)prec);
  pdbRecordType->papFldDes[2]->size=sizeof(prec->asg);
  pdbRecordType->papFldDes[2]->offset=(unsigned short)((char *)&prec->asg - (char *)prec);
  pdbRecordType->papFldDes[3]->size=sizeof(prec->scan);
  pdbRecordType->papFldDes[3]->offset=(unsigned short)((char *)&prec->scan - (char *)prec);
  pdbRecordType->papFldDes[4]->size=sizeof(prec->pini);
  pdbRecordType->papFldDes[4]->offset=(unsigned short)((char *)&prec->pini - (char *)prec);
  pdbRecordType->papFldDes[5]->size=sizeof(prec->phas);
  pdbRecordType->papFldDes[5]->offset=(unsigned short)((char *)&prec->phas - (char *)prec);
  pdbRecordType->papFldDes[6]->size=sizeof(prec->evnt);
  pdbRecordType->papFldDes[6]->offset=(unsigned short)((char *)&prec->evnt - (char *)prec);
  pdbRecordType->papFldDes[7]->size=sizeof(prec->tse);
  pdbRecordType->papFldDes[7]->offset=(unsigned short)((char *)&prec->tse - (char *)prec);
  pdbRecordType->papFldDes[8]->size=sizeof(prec->tsel);
  pdbRecordType->papFldDes[8]->offset=(unsigned short)((char *)&prec->tsel - (char *)prec);
  pdbRecordType->papFldDes[9]->size=sizeof(prec->dtyp);
  pdbRecordType->papFldDes[9]->offset=(unsigned short)((char *)&prec->dtyp - (char *)prec);
  pdbRecordType->papFldDes[10]->size=sizeof(prec->disv);
  pdbRecordType->papFldDes[10]->offset=(unsigned short)((char *)&prec->disv - (char *)prec);
  pdbRecordType->papFldDes[11]->size=sizeof(prec->disa);
  pdbRecordType->papFldDes[11]->offset=(unsigned short)((char *)&prec->disa - (char *)prec);
  pdbRecordType->papFldDes[12]->size=sizeof(prec->sdis);
  pdbRecordType->papFldDes[12]->offset=(unsigned short)((char *)&prec->sdis - (char *)prec);
  pdbRecordType->papFldDes[13]->size=sizeof(prec->mlok);
  pdbRecordType->papFldDes[13]->offset=(unsigned short)((char *)&prec->mlok - (char *)prec);
  pdbRecordType->papFldDes[14]->size=sizeof(prec->mlis);
  pdbRecordType->papFldDes[14]->offset=(unsigned short)((char *)&prec->mlis - (char *)prec);
  pdbRecordType->papFldDes[15]->size=sizeof(prec->disp);
  pdbRecordType->papFldDes[15]->offset=(unsigned short)((char *)&prec->disp - (char *)prec);
  pdbRecordType->papFldDes[16]->size=sizeof(prec->proc);
  pdbRecordType->papFldDes[16]->offset=(unsigned short)((char *)&prec->proc - (char *)prec);
  pdbRecordType->papFldDes[17]->size=sizeof(prec->stat);
  pdbRecordType->papFldDes[17]->offset=(unsigned short)((char *)&prec->stat - (char *)prec);
  pdbRecordType->papFldDes[18]->size=sizeof(prec->sevr);
  pdbRecordType->papFldDes[18]->offset=(unsigned short)((char *)&prec->sevr - (char *)prec);
  pdbRecordType->papFldDes[19]->size=sizeof(prec->nsta);
  pdbRecordType->papFldDes[19]->offset=(unsigned short)((char *)&prec->nsta - (char *)prec);
  pdbRecordType->papFldDes[20]->size=sizeof(prec->nsev);
  pdbRecordType->papFldDes[20]->offset=(unsigned short)((char *)&prec->nsev - (char *)prec);
  pdbRecordType->papFldDes[21]->size=sizeof(prec->acks);
  pdbRecordType->papFldDes[21]->offset=(unsigned short)((char *)&prec->acks - (char *)prec);
  pdbRecordType->papFldDes[22]->size=sizeof(prec->ackt);
  pdbRecordType->papFldDes[22]->offset=(unsigned short)((char *)&prec->ackt - (char *)prec);
  pdbRecordType->papFldDes[23]->size=sizeof(prec->diss);
  pdbRecordType->papFldDes[23]->offset=(unsigned short)((char *)&prec->diss - (char *)prec);
  pdbRecordType->papFldDes[24]->size=sizeof(prec->lcnt);
  pdbRecordType->papFldDes[24]->offset=(unsigned short)((char *)&prec->lcnt - (char *)prec);
  pdbRecordType->papFldDes[25]->size=sizeof(prec->pact);
  pdbRecordType->papFldDes[25]->offset=(unsigned short)((char *)&prec->pact - (char *)prec);
  pdbRecordType->papFldDes[26]->size=sizeof(prec->putf);
  pdbRecordType->papFldDes[26]->offset=(unsigned short)((char *)&prec->putf - (char *)prec);
  pdbRecordType->papFldDes[27]->size=sizeof(prec->rpro);
  pdbRecordType->papFldDes[27]->offset=(unsigned short)((char *)&prec->rpro - (char *)prec);
  pdbRecordType->papFldDes[28]->size=sizeof(prec->asp);
  pdbRecordType->papFldDes[28]->offset=(unsigned short)((char *)&prec->asp - (char *)prec);
  pdbRecordType->papFldDes[29]->size=sizeof(prec->ppn);
  pdbRecordType->papFldDes[29]->offset=(unsigned short)((char *)&prec->ppn - (char *)prec);
  pdbRecordType->papFldDes[30]->size=sizeof(prec->ppnr);
  pdbRecordType->papFldDes[30]->offset=(unsigned short)((char *)&prec->ppnr - (char *)prec);
  pdbRecordType->papFldDes[31]->size=sizeof(prec->spvt);
  pdbRecordType->papFldDes[31]->offset=(unsigned short)((char *)&prec->spvt - (char *)prec);
  pdbRecordType->papFldDes[32]->size=sizeof(prec->rset);
  pdbRecordType->papFldDes[32]->offset=(unsigned short)((char *)&prec->rset - (char *)prec);
  pdbRecordType->papFldDes[33]->size=sizeof(prec->dset);
  pdbRecordType->papFldDes[33]->offset=(unsigned short)((char *)&prec->dset - (char *)prec);
  pdbRecordType->papFldDes[34]->size=sizeof(prec->dpvt);
  pdbRecordType->papFldDes[34]->offset=(unsigned short)((char *)&prec->dpvt - (char *)prec);
  pdbRecordType->papFldDes[35]->size=sizeof(prec->rdes);
  pdbRecordType->papFldDes[35]->offset=(unsigned short)((char *)&prec->rdes - (char *)prec);
  pdbRecordType->papFldDes[36]->size=sizeof(prec->lset);
  pdbRecordType->papFldDes[36]->offset=(unsigned short)((char *)&prec->lset - (char *)prec);
  pdbRecordType->papFldDes[37]->size=sizeof(prec->prio);
  pdbRecordType->papFldDes[37]->offset=(unsigned short)((char *)&prec->prio - (char *)prec);
  pdbRecordType->papFldDes[38]->size=sizeof(prec->tpro);
  pdbRecordType->papFldDes[38]->offset=(unsigned short)((char *)&prec->tpro - (char *)prec);
  pdbRecordType->papFldDes[39]->size=sizeof(prec->bkpt);
  pdbRecordType->papFldDes[39]->offset=(unsigned short)((char *)&prec->bkpt - (char *)prec);
  pdbRecordType->papFldDes[40]->size=sizeof(prec->udf);
  pdbRecordType->papFldDes[40]->offset=(unsigned short)((char *)&prec->udf - (char *)prec);
  pdbRecordType->papFldDes[41]->size=sizeof(prec->time);
  pdbRecordType->papFldDes[41]->offset=(unsigned short)((char *)&prec->time - (char *)prec);
  pdbRecordType->papFldDes[42]->size=sizeof(prec->flnk);
  pdbRecordType->papFldDes[42]->offset=(unsigned short)((char *)&prec->flnk - (char *)prec);
  pdbRecordType->papFldDes[43]->size=sizeof(prec->val);
  pdbRecordType->papFldDes[43]->offset=(unsigned short)((char *)&prec->val - (char *)prec);
  pdbRecordType->papFldDes[44]->size=sizeof(prec->nobt);
  pdbRecordType->papFldDes[44]->offset=(unsigned short)((char *)&prec->nobt - (char *)prec);
  pdbRecordType->papFldDes[45]->size=sizeof(prec->inp);
  pdbRecordType->papFldDes[45]->offset=(unsigned short)((char *)&prec->inp - (char *)prec);
  pdbRecordType->papFldDes[46]->size=sizeof(prec->rval);
  pdbRecordType->papFldDes[46]->offset=(unsigned short)((char *)&prec->rval - (char *)prec);
  pdbRecordType->papFldDes[47]->size=sizeof(prec->oraw);
  pdbRecordType->papFldDes[47]->offset=(unsigned short)((char *)&prec->oraw - (char *)prec);
  pdbRecordType->papFldDes[48]->size=sizeof(prec->mask);
  pdbRecordType->papFldDes[48]->offset=(unsigned short)((char *)&prec->mask - (char *)prec);
  pdbRecordType->papFldDes[49]->size=sizeof(prec->mlst);
  pdbRecordType->papFldDes[49]->offset=(unsigned short)((char *)&prec->mlst - (char *)prec);
  pdbRecordType->papFldDes[50]->size=sizeof(prec->lalm);
  pdbRecordType->papFldDes[50]->offset=(unsigned short)((char *)&prec->lalm - (char *)prec);
  pdbRecordType->papFldDes[51]->size=sizeof(prec->sdef);
  pdbRecordType->papFldDes[51]->offset=(unsigned short)((char *)&prec->sdef - (char *)prec);
  pdbRecordType->papFldDes[52]->size=sizeof(prec->shft);
  pdbRecordType->papFldDes[52]->offset=(unsigned short)((char *)&prec->shft - (char *)prec);
  pdbRecordType->papFldDes[53]->size=sizeof(prec->siol);
  pdbRecordType->papFldDes[53]->offset=(unsigned short)((char *)&prec->siol - (char *)prec);
  pdbRecordType->papFldDes[54]->size=sizeof(prec->sval);
  pdbRecordType->papFldDes[54]->offset=(unsigned short)((char *)&prec->sval - (char *)prec);
  pdbRecordType->papFldDes[55]->size=sizeof(prec->siml);
  pdbRecordType->papFldDes[55]->offset=(unsigned short)((char *)&prec->siml - (char *)prec);
  pdbRecordType->papFldDes[56]->size=sizeof(prec->simm);
  pdbRecordType->papFldDes[56]->offset=(unsigned short)((char *)&prec->simm - (char *)prec);
  pdbRecordType->papFldDes[57]->size=sizeof(prec->sims);
  pdbRecordType->papFldDes[57]->offset=(unsigned short)((char *)&prec->sims - (char *)prec);
  pdbRecordType->papFldDes[58]->size=sizeof(prec->b0);
  pdbRecordType->papFldDes[58]->offset=(unsigned short)((char *)&prec->b0 - (char *)prec);
  pdbRecordType->papFldDes[59]->size=sizeof(prec->b1);
  pdbRecordType->papFldDes[59]->offset=(unsigned short)((char *)&prec->b1 - (char *)prec);
  pdbRecordType->papFldDes[60]->size=sizeof(prec->b2);
  pdbRecordType->papFldDes[60]->offset=(unsigned short)((char *)&prec->b2 - (char *)prec);
  pdbRecordType->papFldDes[61]->size=sizeof(prec->b3);
  pdbRecordType->papFldDes[61]->offset=(unsigned short)((char *)&prec->b3 - (char *)prec);
  pdbRecordType->papFldDes[62]->size=sizeof(prec->b4);
  pdbRecordType->papFldDes[62]->offset=(unsigned short)((char *)&prec->b4 - (char *)prec);
  pdbRecordType->papFldDes[63]->size=sizeof(prec->b5);
  pdbRecordType->papFldDes[63]->offset=(unsigned short)((char *)&prec->b5 - (char *)prec);
  pdbRecordType->papFldDes[64]->size=sizeof(prec->b6);
  pdbRecordType->papFldDes[64]->offset=(unsigned short)((char *)&prec->b6 - (char *)prec);
  pdbRecordType->papFldDes[65]->size=sizeof(prec->b7);
  pdbRecordType->papFldDes[65]->offset=(unsigned short)((char *)&prec->b7 - (char *)prec);
  pdbRecordType->papFldDes[66]->size=sizeof(prec->b8);
  pdbRecordType->papFldDes[66]->offset=(unsigned short)((char *)&prec->b8 - (char *)prec);
  pdbRecordType->papFldDes[67]->size=sizeof(prec->b9);
  pdbRecordType->papFldDes[67]->offset=(unsigned short)((char *)&prec->b9 - (char *)prec);
  pdbRecordType->papFldDes[68]->size=sizeof(prec->ba);
  pdbRecordType->papFldDes[68]->offset=(unsigned short)((char *)&prec->ba - (char *)prec);
  pdbRecordType->papFldDes[69]->size=sizeof(prec->bb);
  pdbRecordType->papFldDes[69]->offset=(unsigned short)((char *)&prec->bb - (char *)prec);
  pdbRecordType->papFldDes[70]->size=sizeof(prec->bc);
  pdbRecordType->papFldDes[70]->offset=(unsigned short)((char *)&prec->bc - (char *)prec);
  pdbRecordType->papFldDes[71]->size=sizeof(prec->bd);
  pdbRecordType->papFldDes[71]->offset=(unsigned short)((char *)&prec->bd - (char *)prec);
  pdbRecordType->papFldDes[72]->size=sizeof(prec->be);
  pdbRecordType->papFldDes[72]->offset=(unsigned short)((char *)&prec->be - (char *)prec);
  pdbRecordType->papFldDes[73]->size=sizeof(prec->bf);
  pdbRecordType->papFldDes[73]->offset=(unsigned short)((char *)&prec->bf - (char *)prec);
  pdbRecordType->papFldDes[74]->size=sizeof(prec->b0st);
  pdbRecordType->papFldDes[74]->offset=(unsigned short)((char *)&prec->b0st - (char *)prec);
  pdbRecordType->papFldDes[75]->size=sizeof(prec->b1st);
  pdbRecordType->papFldDes[75]->offset=(unsigned short)((char *)&prec->b1st - (char *)prec);
  pdbRecordType->papFldDes[76]->size=sizeof(prec->b2st);
  pdbRecordType->papFldDes[76]->offset=(unsigned short)((char *)&prec->b2st - (char *)prec);
  pdbRecordType->papFldDes[77]->size=sizeof(prec->b3st);
  pdbRecordType->papFldDes[77]->offset=(unsigned short)((char *)&prec->b3st - (char *)prec);
  pdbRecordType->papFldDes[78]->size=sizeof(prec->b4st);
  pdbRecordType->papFldDes[78]->offset=(unsigned short)((char *)&prec->b4st - (char *)prec);
  pdbRecordType->papFldDes[79]->size=sizeof(prec->b5st);
  pdbRecordType->papFldDes[79]->offset=(unsigned short)((char *)&prec->b5st - (char *)prec);
  pdbRecordType->papFldDes[80]->size=sizeof(prec->b6st);
  pdbRecordType->papFldDes[80]->offset=(unsigned short)((char *)&prec->b6st - (char *)prec);
  pdbRecordType->papFldDes[81]->size=sizeof(prec->b7st);
  pdbRecordType->papFldDes[81]->offset=(unsigned short)((char *)&prec->b7st - (char *)prec);
  pdbRecordType->papFldDes[82]->size=sizeof(prec->b8st);
  pdbRecordType->papFldDes[82]->offset=(unsigned short)((char *)&prec->b8st - (char *)prec);
  pdbRecordType->papFldDes[83]->size=sizeof(prec->b9st);
  pdbRecordType->papFldDes[83]->offset=(unsigned short)((char *)&prec->b9st - (char *)prec);
  pdbRecordType->papFldDes[84]->size=sizeof(prec->bast);
  pdbRecordType->papFldDes[84]->offset=(unsigned short)((char *)&prec->bast - (char *)prec);
  pdbRecordType->papFldDes[85]->size=sizeof(prec->bbst);
  pdbRecordType->papFldDes[85]->offset=(unsigned short)((char *)&prec->bbst - (char *)prec);
  pdbRecordType->papFldDes[86]->size=sizeof(prec->bcst);
  pdbRecordType->papFldDes[86]->offset=(unsigned short)((char *)&prec->bcst - (char *)prec);
  pdbRecordType->papFldDes[87]->size=sizeof(prec->bdst);
  pdbRecordType->papFldDes[87]->offset=(unsigned short)((char *)&prec->bdst - (char *)prec);
  pdbRecordType->papFldDes[88]->size=sizeof(prec->best);
  pdbRecordType->papFldDes[88]->offset=(unsigned short)((char *)&prec->best - (char *)prec);
  pdbRecordType->papFldDes[89]->size=sizeof(prec->bfst);
  pdbRecordType->papFldDes[89]->offset=(unsigned short)((char *)&prec->bfst - (char *)prec);
  pdbRecordType->papFldDes[90]->size=sizeof(prec->b0zsv);
  pdbRecordType->papFldDes[90]->offset=(unsigned short)((char* )&prec->b0zsv - (char *)prec);
  pdbRecordType->papFldDes[91]->size=sizeof(prec->b1zsv);
  pdbRecordType->papFldDes[91]->offset=(unsigned short)((char* )&prec->b1zsv - (char *)prec);
  pdbRecordType->papFldDes[92]->size=sizeof(prec->b2zsv);
  pdbRecordType->papFldDes[92]->offset=(unsigned short)((char* )&prec->b2zsv - (char *)prec);
  pdbRecordType->papFldDes[93]->size=sizeof(prec->b3zsv);
  pdbRecordType->papFldDes[93]->offset=(unsigned short)((char* )&prec->b3zsv - (char *)prec);
  pdbRecordType->papFldDes[94]->size=sizeof(prec->b4zsv);
  pdbRecordType->papFldDes[94]->offset=(unsigned short)((char* )&prec->b4zsv - (char *)prec);
  pdbRecordType->papFldDes[95]->size=sizeof(prec->b5zsv);
  pdbRecordType->papFldDes[95]->offset=(unsigned short)((char* )&prec->b5zsv - (char *)prec);
  pdbRecordType->papFldDes[96]->size=sizeof(prec->b6zsv);
  pdbRecordType->papFldDes[96]->offset=(unsigned short)((char* )&prec->b6zsv - (char *)prec);
  pdbRecordType->papFldDes[97]->size=sizeof(prec->b7zsv);
  pdbRecordType->papFldDes[97]->offset=(unsigned short)((char* )&prec->b7zsv - (char *)prec);
  pdbRecordType->papFldDes[98]->size=sizeof(prec->b8zsv);
  pdbRecordType->papFldDes[98]->offset=(unsigned short)((char* )&prec->b8zsv - (char *)prec);
  pdbRecordType->papFldDes[99]->size=sizeof(prec->b9zsv);
  pdbRecordType->papFldDes[99]->offset=(unsigned short)((char* )&prec->b9zsv - (char *)prec);
  pdbRecordType->papFldDes[100]->size=sizeof(prec->bazsv);
  pdbRecordType->papFldDes[100]->offset=(unsigned short)((char* )&prec->bazsv - (char *)prec);
  pdbRecordType->papFldDes[101]->size=sizeof(prec->bbzsv);
  pdbRecordType->papFldDes[101]->offset=(unsigned short)((char* )&prec->bbzsv - (char *)prec);
  pdbRecordType->papFldDes[102]->size=sizeof(prec->bczsv);
  pdbRecordType->papFldDes[102]->offset=(unsigned short)((char* )&prec->bczsv - (char *)prec);
  pdbRecordType->papFldDes[103]->size=sizeof(prec->bdzsv);
  pdbRecordType->papFldDes[103]->offset=(unsigned short)((char* )&prec->bdzsv - (char *)prec);
  pdbRecordType->papFldDes[104]->size=sizeof(prec->bezsv);
  pdbRecordType->papFldDes[104]->offset=(unsigned short)((char* )&prec->bezsv - (char *)prec);
  pdbRecordType->papFldDes[105]->size=sizeof(prec->bfzsv);
  pdbRecordType->papFldDes[105]->offset=(unsigned short)((char* )&prec->bfzsv - (char *)prec);
  pdbRecordType->papFldDes[106]->size=sizeof(prec->b0osv);
  pdbRecordType->papFldDes[106]->offset=(unsigned short)((char* )&prec->b0osv - (char *)prec);
  pdbRecordType->papFldDes[107]->size=sizeof(prec->b1osv);
  pdbRecordType->papFldDes[107]->offset=(unsigned short)((char* )&prec->b1osv - (char *)prec);
  pdbRecordType->papFldDes[108]->size=sizeof(prec->b2osv);
  pdbRecordType->papFldDes[108]->offset=(unsigned short)((char* )&prec->b2osv - (char *)prec);
  pdbRecordType->papFldDes[109]->size=sizeof(prec->b3osv);
  pdbRecordType->papFldDes[109]->offset=(unsigned short)((char* )&prec->b3osv - (char *)prec);
  pdbRecordType->papFldDes[110]->size=sizeof(prec->b4osv);
  pdbRecordType->papFldDes[110]->offset=(unsigned short)((char* )&prec->b4osv - (char *)prec);
  pdbRecordType->papFldDes[111]->size=sizeof(prec->b5osv);
  pdbRecordType->papFldDes[111]->offset=(unsigned short)((char* )&prec->b5osv - (char *)prec);
  pdbRecordType->papFldDes[112]->size=sizeof(prec->b6osv);
  pdbRecordType->papFldDes[112]->offset=(unsigned short)((char* )&prec->b6osv - (char *)prec);
  pdbRecordType->papFldDes[113]->size=sizeof(prec->b7osv);
  pdbRecordType->papFldDes[113]->offset=(unsigned short)((char* )&prec->b7osv - (char *)prec);
  pdbRecordType->papFldDes[114]->size=sizeof(prec->b8osv);
  pdbRecordType->papFldDes[114]->offset=(unsigned short)((char* )&prec->b8osv - (char *)prec);
  pdbRecordType->papFldDes[115]->size=sizeof(prec->b9osv);
  pdbRecordType->papFldDes[115]->offset=(unsigned short)((char* )&prec->b9osv - (char *)prec);
  pdbRecordType->papFldDes[116]->size=sizeof(prec->baosv);
  pdbRecordType->papFldDes[116]->offset=(unsigned short)((char* )&prec->baosv - (char *)prec);
  pdbRecordType->papFldDes[117]->size=sizeof(prec->bbosv);
  pdbRecordType->papFldDes[117]->offset=(unsigned short)((char* )&prec->bbosv - (char *)prec);
  pdbRecordType->papFldDes[118]->size=sizeof(prec->bcosv);
  pdbRecordType->papFldDes[118]->offset=(unsigned short)((char* )&prec->bcosv - (char *)prec);
  pdbRecordType->papFldDes[119]->size=sizeof(prec->bdosv);
  pdbRecordType->papFldDes[119]->offset=(unsigned short)((char* )&prec->bdosv - (char *)prec);
  pdbRecordType->papFldDes[120]->size=sizeof(prec->beosv);
  pdbRecordType->papFldDes[120]->offset=(unsigned short)((char* )&prec->beosv - (char *)prec);
  pdbRecordType->papFldDes[121]->size=sizeof(prec->bfosv);
  pdbRecordType->papFldDes[121]->offset=(unsigned short)((char* )&prec->bfosv - (char *)prec);
  pdbRecordType->papFldDes[122]->size=sizeof(prec->bas);
  pdbRecordType->papFldDes[122]->offset=(unsigned short)((char* )&prec->bas - (char *)prec);
  pdbRecordType->rec_size = sizeof(*prec);
  return(0);
}
epicsExportRegistrar(mbbi2RecordSizeOffset);
#ifdef __cplusplus
}
#endif
#endif /*GEN_SIZE_OFFSET*/

References:
Stream device does not recognize a custom record type Abdalla Ahmad
Re: Stream device does not recognize a custom record type Dirk Zimoch
RE: Stream device does not recognize a custom record type Abdalla Ahmad
Re: Stream device does not recognize a custom record type Dirk Zimoch

Navigate by Date:
Prev: RE: Stream device does not recognize a custom record type Abdalla Ahmad
Next: Re: Stream device does not recognize a custom record type Dirk Zimoch
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  <20182019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: Stream device does not recognize a custom record type Dirk Zimoch
Next: CSDataQuick 1.1 Release Wang Xiaoqiang (PSI)
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  <20182019  2020  2021  2022  2023  2024 
ANJ, 02 Oct 2018 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·