mrfioc2  2.3.0
devObjMBB.cpp
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2011 Brookhaven Science Associates, as Operator of
3 * Brookhaven National Laboratory.
4 * mrfioc2 is distributed subject to a Software License Agreement found
5 * in file LICENSE that is included with this distribution.
6 \*************************************************************************/
7 /*
8  * Author: Michael Davidsaver <mdavidsaver@gmail.com>
9  */
10 
11 #include <mbbiRecord.h>
12 #include <mbboRecord.h>
13 
14 #include "devObj.h"
15 
16 #include <epicsExport.h>
17 using namespace mrf;
18 
19 /************** mbbi *************/
20 
21 template<typename T>
22 static long read_mbbi_from_integer(mbbiRecord* prec)
23 {
24 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM); return -1; }
25 CurrentRecord cur(prec);
26 try {
27  addr<T> *priv=(addr<T>*)prec->dpvt;
28 
29  {
30  scopedLock<mrf::Object> g(*priv->O);
31  prec->rval = priv->P->get();
32  if(prec->mask) prec->rval &= prec->mask;
33  }
34 
35  return 0;
36 }CATCH(S_dev_badArgument)
37 }
38 
39 // mbbi uint32
40 
41 OBJECT_DSET(MBBIFromUINT32,
42  (&add_record_inp<mbbiRecord,epicsUInt32>),
43  &del_record_property,
44  &init_record_empty,
45  &read_mbbi_from_integer<epicsUInt32>,
46  NULL);
47 
48 // mbbi uint16
49 
50 OBJECT_DSET(MBBIFromUINT16,
51  (&add_record_inp<mbbiRecord,epicsUInt16>),
52  &del_record_property,
53  &init_record_empty,
54  &read_mbbi_from_integer<epicsUInt16>,
55  NULL);
56 
57 
58 // mbbo uint32
59 
60 template<typename I>
61 static long write_mbbo_from_integer(mbboRecord* prec)
62 {
63 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM); return -1; }
64 CurrentRecord cur(prec);
65 try {
66  addr<I> *priv=(addr<I>*)prec->dpvt;
67 
68  {
69  scopedLock<mrf::Object> g(*priv->O);
70  priv->P->set(prec->rval);
71 
72  prec->rbv = priv->P->get();
73  }
74 
75  return 0;
76 }CATCH(S_dev_badArgument)
77 }
78 
79 
80 OBJECT_DSET(MBBOFromUINT32,
81  (&add_record_out<mbboRecord,epicsUInt32>),
82  &del_record_property,
83  &init_record_return2,
84  &write_mbbo_from_integer<epicsUInt32>,
85  NULL);
86 
87 // mbbo uint16
88 
89 
90 OBJECT_DSET(MBBOFromUINT16,
91  (&add_record_out<mbboRecord,epicsUInt16>),
92  &del_record_property,
93  &init_record_return2,
94  &write_mbbo_from_integer<epicsUInt16>,
95  NULL);
96 
97 #include <epicsExport.h>
98 extern "C" {
99  OBJECT_DSET_EXPORT(MBBIFromUINT32);
100  OBJECT_DSET_EXPORT(MBBIFromUINT16);
101  OBJECT_DSET_EXPORT(MBBOFromUINT32);
102  OBJECT_DSET_EXPORT(MBBOFromUINT16);
103 }
OBJECT_DSET(MBBIFromUINT32,(&add_record_inp< mbbiRecord, epicsUInt32 >), &del_record_property, &init_record_empty, &read_mbbi_from_integer< epicsUInt32 >, NULL)
Definition: devObj.h:97
mrf::Object * O
Definition: devObj.h:90
OBJECT_DSET_EXPORT(MBBIFromUINT32)
mrf::auto_ptr< mrf::property< T > > P
Definition: devObj.h:98
#define CATCH(RET)
Definition: devObj.h:31
Definition: flash.cpp:23