BTool.AttReadBlobRsp.GetATT_ReadBlobRsp C# (CSharp) Method

GetATT_ReadBlobRsp() public method

public GetATT_ReadBlobRsp ( HCIReplies hciReplies, bool &dataFound ) : bool
hciReplies HCIReplies
dataFound bool
return bool
        public bool GetATT_ReadBlobRsp(HCIReplies hciReplies, ref bool dataFound)
        {
            dataFound = false;
            bool flag;
            if (flag = rspHdlrsUtils.CheckValidResponse(hciReplies))
            {
                HCIReplies.HCI_LE_ExtEvent hciLeExtEvent = hciReplies.HciLeExtEvent;
                HCIReplies.HCI_LE_ExtEvent.ATT_ReadBlobRsp attReadBlobRsp = hciLeExtEvent.AttReadBlobRsp;
                HCIReplies.LE_ExtEventHeader leExtEventHeader = hciLeExtEvent.Header;
                if (attReadBlobRsp != null)
                {
                    dataFound = true;
                    switch (leExtEventHeader.EventStatus)
                    {
                        case 0:
                            if (attReadBlobRsp.Data != null)
                            {
                                int length = attReadBlobRsp.Data.Length;
                                byte[] data = attReadBlobRsp.Data;
                                if (length > 0)
                                {
                                    if (readBlobData == null)
                                    {
                                        readBlobData = new byte[length];
                                        readBlobData = data;
                                    }
                                    else
                                    {
                                        byte[] bytes = readBlobData;
                                        readBlobData = new byte[bytes.Length + length];
                                        Array.Copy(bytes, 0, readBlobData, 0, bytes.Length);
                                        Array.Copy(data, 0, readBlobData, bytes.Length, data.Length);
                                    }
                                    if (hciReplies.ObjTag != null)
                                    {
                                        readBlobHandle = (ushort)hciReplies.ObjTag;
                                        readBlobHandleValid = true;
                                        break;
                                    }
                                    else
                                    {
                                        readBlobHandle = 0;
                                        readBlobHandleValid = false;
                                        break;
                                    }
                                }
                                else
                                    break;
                            }
                            else
                                break;
                        case 23:
                            SendRspCallback(hciReplies, true);
                            break;
                        case 26:
                            if (readBlobData != null && readBlobHandleValid)
                            {
                                Dictionary<string, DataAttr> tmpAttrDict = new Dictionary<string, DataAttr>();
                                string attrKey1 = attrUuidUtils.GetAttrKey(attReadBlobRsp.AttMsgHdr.ConnHandle, readBlobHandle);
                                DataAttr dataAttr1 = new DataAttr();
                                bool dataChanged1 = false;
                                if (!attrDataUtils.GetDataAttr(ref dataAttr1, ref dataChanged1, attrKey1, "AttReadBlobRsp"))
                                {
                                    flag = false;
                                    break;
                                }

                                dataAttr1.Key = attrKey1;
                                dataAttr1.ConnHandle = attReadBlobRsp.AttMsgHdr.ConnHandle;
                                dataAttr1.Handle = readBlobHandle;
                                dataAttr1.Value = devUtils.UnloadColonData(readBlobData, false);
                                if (!attrDataUtils.UpdateTmpAttrDict(ref tmpAttrDict, dataAttr1, dataChanged1, attrKey1))
                                {
                                    flag = false;
                                    break;
                                }

                                string[] delimiterStrs = new string[2] { " ", ":" };
                                byte[] uuid = dataUtils.GetHexBytes(dataAttr1.Uuid, delimiterStrs);
                                if (uuid != null
                                && uuid.Length > 1
                                && uuid[0] == 3
                                && uuid[1] == 40
                                && dataAttr1.Value.Length > 0)
                                {
                                    byte[] value = dataUtils.GetHexBytes(dataAttr1.Value, delimiterStrs);
                                    if (value.Length > 0)
                                    {
                                        int index = 0;
                                        bool dataErr = false;
                                        dataAttr1.Properties = dataUtils.Unload8Bits(value, ref index, ref dataErr);
                                        if (dataAttr1.Properties == 0)
                                        {
                                            dataAttr1.PropertiesStr = string.Empty;
                                        }
                                        else
                                        {
                                            dataAttr1.PropertiesStr = devUtils.GetGattCharProperties(dataAttr1.Properties, true) + " 0x" + dataAttr1.Properties.ToString("X2");
                                            if (value.Length >= 5)
                                            {
                                                ushort handle = dataUtils.Unload16Bits(value, ref index, ref dataErr, false);
                                                ushort connHandle = attReadBlobRsp.AttMsgHdr.ConnHandle;
                                                string attrKey2 = attrUuidUtils.GetAttrKey(connHandle, handle);
                                                DataAttr dataAttr2 = new DataAttr();
                                                bool dataChanged2 = false;
                                                if (!attrDataUtils.GetDataAttr(ref dataAttr2, ref dataChanged2, attrKey2, "AttReadBlobRsp"))
                                                {
                                                    flag = false;
                                                    break;
                                                }

                                                dataAttr2.Key = attrKey2;
                                                dataAttr2.ConnHandle = connHandle;
                                                dataAttr2.Handle = handle;
                                                int dataLength = value.Length - index;
                                                byte[] destData = new byte[dataLength];
                                                dataUtils.UnloadDataBytes(value, dataLength, ref index, ref destData, ref dataErr);
                                                dataAttr2.Uuid = devUtils.UnloadColonData(destData, false);
                                                dataAttr2.UuidHex = dataUtils.GetStringFromBytes(destData, true);
                                                dataAttr2.Properties = dataAttr1.Properties;
                                                dataAttr2.PropertiesStr = dataAttr1.PropertiesStr;
                                                dataAttr2.IndentLevel = attrUuidUtils.GetIndentLevel(dataAttr2.UuidHex);
                                                dataAttr2.UuidDesc = attrUuidUtils.GetUuidDesc(dataAttr2.UuidHex);
                                                dataAttr2.ValueDesc = attrUuidUtils.GetUuidValueDesc(dataAttr2.UuidHex);
                                                dataAttr2.ForeColor = attrUuidUtils.GetForegroundColor(dataAttr2.UuidHex);
                                                dataAttr2.BackColor = attrUuidUtils.GetBackgroundColor(dataAttr2.UuidHex);
                                                dataAttr2.ValueDisplay = attrUuidUtils.GetValueDsp(dataAttr2.UuidHex);
                                                dataAttr2.ValueEdit = attrUuidUtils.GetValueEdit(dataAttr2.UuidHex);
                                                if (!attrDataUtils.UpdateTmpAttrDict(ref tmpAttrDict, dataAttr2, dataChanged2, attrKey2))
                                                {
                                                    flag = false;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                                if (!attrDataUtils.UpdateAttrDict(tmpAttrDict))
                                {
                                    flag = false;
                                    break;
                                }
                            }
                            readBlobData = null;
                            readBlobHandle = 0;
                            SendRspCallback(hciReplies, true);
                            break;
                        default:
                            flag = rspHdlrsUtils.UnexpectedRspEventStatus(hciReplies, "AttReadBlobRsp");
                            break;
                    }
                }
            }
            if (!flag && dataFound)
            {
                readBlobData = null;
                readBlobHandle = 0;
                SendRspCallback(hciReplies, false);
            }
            return flag;
        }

Usage Example

Example #1
0
        private bool ProcessQData(HCIReplies hciReplies, ref bool dataFound)
        {
            bool success = true;

            dataFound = false;
            if (hciReplies == null || hciReplies.HciLeExtEvent == null)
            {
                return(false);
            }
            switch (hciReplies.HciLeExtEvent.Header.EventCode)
            {
            case 1281:
                success = AttErrorRsp.GetATT_ErrorRsp(hciReplies, ref dataFound);
                break;

            case 1285:
                success = m_attFindInfoRsp.GetATT_FindInfoRsp(hciReplies, ref dataFound);
                break;

            case 1287:
                success = m_attFindByTypeValueRsp.GetATT_FindByTypeValueRsp(hciReplies, ref dataFound);
                break;

            case 1289:
                success = m_attReadByTypeRsp.GetATT_ReadByTypeRsp(hciReplies, ref dataFound);
                break;

            case 1291:
                success = AttReadRsp.GetATT_ReadRsp(hciReplies, ref dataFound);
                break;

            case 1293:
                success = AttReadBlobRsp.GetATT_ReadBlobRsp(hciReplies, ref dataFound);
                break;

            case 1297:
                success = m_attReadByGrpTypeRsp.GetATT_ReadByGrpTypeRsp(hciReplies, ref dataFound);
                break;

            case 1299:
                success = AttWriteRsp.GetATT_WriteRsp(hciReplies, ref dataFound);
                break;

            case 1303:
                success = AttPrepareWriteRsp.GetATT_PrepareWriteRsp(hciReplies, ref dataFound);
                break;

            case 1305:
                success = AttExecuteWriteRsp.GetATT_ExecuteWriteRsp(hciReplies, ref dataFound);
                break;

            case 1307:
                success = AttHandleValueNotification.GetATT_HandleValueNotification(hciReplies, ref dataFound);
                break;

            case 1309:
                success = AttHandleValueIndication.GetATT_HandleValueIndication(hciReplies, ref dataFound);
                break;

            case 1663:
                success = ExtCmdStatus.GetExtensionCommandStatus(hciReplies, ref dataFound);
                break;
            }
            return(success);
        }