public bool GetATT_HandleValueNotification(HCIReplies hciReplies, ref bool dataFound)
{
dataFound = false;
bool success;
if (success = rspHdlrsUtils.CheckValidResponse(hciReplies))
{
HCIReplies.HCI_LE_ExtEvent hciLeExtEvent = hciReplies.HciLeExtEvent;
HCIReplies.HCI_LE_ExtEvent.ATT_HandleValueNotification valueNotification = hciLeExtEvent.AttHandleValueNotification;
HCIReplies.LE_ExtEventHeader leExtEventHeader = hciLeExtEvent.Header;
if (valueNotification != null)
{
dataFound = true;
switch (leExtEventHeader.EventStatus)
{
case (byte)0:
if (valueNotification.Value != null)
{
Dictionary <string, DataAttr> tmpAttrDict = new Dictionary <string, DataAttr>();
string attrKey = attrUuidUtils.GetAttrKey(valueNotification.AttMsgHdr.ConnHandle, valueNotification.Handle);
DataAttr dataAttr = new DataAttr();
bool dataChanged = false;
if (!attrDataUtils.GetDataAttr(ref dataAttr, ref dataChanged, attrKey, "AttHandleValueNotification"))
{
success = false;
break;
}
else
{
dataAttr.Key = attrKey;
dataAttr.ConnHandle = valueNotification.AttMsgHdr.ConnHandle;
dataAttr.Handle = valueNotification.Handle;
dataAttr.Value = valueNotification.Value;
if (!attrDataUtils.UpdateTmpAttrDict(ref tmpAttrDict, dataAttr, dataChanged, attrKey))
{
success = false;
break;
}
else if (!attrDataUtils.UpdateAttrDict(tmpAttrDict))
{
success = false;
break;
}
else
{
SendRspCallback(hciReplies, true);
break;
}
}
}
else
{
break;
}
default:
success = rspHdlrsUtils.UnexpectedRspEventStatus(hciReplies, "AttHandleValueNotification");
break;
}
}
}
if (!success && dataFound)
{
SendRspCallback(hciReplies, false);
}
return(success);
}