Ø
If I want to mask it with a value 0xC1(b"1100,0001"), how to set NOBT/SHFT field?
My understanding is that you cannot do that. I think the NOBT and SHFT fields are designed to allow you to set a contiguous set of bits to 1 in MASK. It does not allow a mask with arbitrary locations of 1’s and 0’s.
The standard asyn device support does support longin records with an arbitrary mask.
Mark
in the website of streamdevice, it says:
Normal Operation
Depending on the format type, different record fields are used for output and input. The variable x
stands
for the written or read value.
DOUBLE format (e.g. %f
):
Not allowed.
LONG format (e.g. %i
):
If MASK==0
(because NOBT
is
not set):
Output: x
=VAL
Input: VAL=x
If MASK!=0
:
Output: x
=RVAL&MASK
Input: RVAL=x&MASK
MASK
is initialized to NOBT
1-bits
shifted left by SHFT
.
ENUM format (e.g. %{
):
Not allowed.
STRING format (e.g. %s
):
Not allowed.
In my case, I use mbbiDirect and get a value as 0x29 (b"0010,1001") in VAL field. If I want to mask it with a value 0xC1(b"1100,0001"), how to set NOBT/SHFT field?