public int[] GetItemDeadbands(int[] serverHandles, float[] deadbands)
{
TraceState("GetItemDeadbands", serverHandles.Length);
ThrowIfDisposed();
int[] errors = new int[serverHandles.Length];
ComDaGroupItem[] items = new ComDaGroupItem[serverHandles.Length];
int count = 0;
lock (m_lock)
{
for (int ii = 0; ii < serverHandles.Length; ii++)
{
ComDaGroupItem item = null;
if (!m_itemsByHandle.TryGetValue(serverHandles[ii], out item))
{
errors[ii] = ResultIds.E_INVALIDHANDLE;
continue;
}
if (item.EuType >= 0 && item.EuType != (int)OpcRcw.Da.OPCEUTYPE.OPC_ANALOG)
{
errors[ii] = ResultIds.E_DEADBANDNOTSUPPORTED;
continue;
}
if (item.Deadband == -1)
{
errors[ii] = ResultIds.E_DEADBANDNOTSET;
continue;
}
deadbands[ii] = item.Deadband;
item.Deadband = deadbands[ii];
items[ii] = item;
count++;
}
}
if (count == 0)
{
return errors;
}
// need the EU Info if the deadband is specified.
m_manager.UpdateItemEuInfo(this, items);
lock (m_lock)
{
for (int ii = 0; ii < serverHandles.Length; ii++)
{
ComDaGroupItem item = items[ii];
if (item != null)
{
if (item.EuType != (int)OpcRcw.Da.OPCEUTYPE.OPC_ANALOG)
{
errors[ii] = ResultIds.E_DEADBANDNOTSUPPORTED;
continue;
}
deadbands[ii] = item.Deadband;
}
}
}
return errors;
}