BTool.AttrDataItemForm.btnWriteValue_Click C# (CSharp) Method

btnWriteValue_Click() private method

private btnWriteValue_Click ( object sender, EventArgs e ) : void
sender object
e System.EventArgs
return void
        private void btnWriteValue_Click(object sender, EventArgs e)
        {
            formDataAccess.WaitOne();
            if (tbValue.Text == null || tbValue.Text == string.Empty)
            {
                msgBox.UserMsgBox(SharedObjects.MainWin, MsgBox.MsgTypes.Warning, "A Value Must Be Entered To Perform A Write\n");
            }
            else
            {
                string outStr = string.Empty;
                ValueDisplay inValueDisplay = dataAttr.ValueDisplay;
                ValueDisplay outValueDisplay = ValueDisplay.Hex;
                if (lastValueDisplaySet)
                    inValueDisplay = lastValueDisplay;
                if (devUtils.ConvertDisplayTypes(inValueDisplay, tbValue.Text, ref outValueDisplay, ref outStr, true))
                {
                    string str = devUtils.HexStr2UserDefinedStr(outStr, SharedAppObjs.StringType.HEX);
                    if (str == null || str == string.Empty)
                    {
                        string msg = "Value Data Cannot Be Converted To Hex For Write Command\n";
                        msgBox.UserMsgBox(SharedObjects.MainWin, MsgBox.MsgTypes.Warning, msg);
                    }
                    else
                    {
                        devForm.threadMgr.rspDataIn.ExtCmdStatus.ExtCmdStatusCallback = new ExtCmdStatus.ExtCmdStatusDelegate(ExtCmdStatus);
                        devForm.threadMgr.rspDataIn.AttErrorRsp.AttErrorRspCallback = new AttErrorRsp.AttErrorRspDelegate(AttErrorRsp);
                        devForm.threadMgr.rspDataIn.AttPrepareWriteRsp.AttPrepareWriteRspCallback = new AttPrepareWriteRsp.AttPrepareWriteRspDelegate(AttPrepareWriteRsp);
                        devForm.threadMgr.rspDataIn.AttExecuteWriteRsp.AttExecuteWriteRspCallback = new AttExecuteWriteRsp.AttExecuteWriteRspDelegate(AttExecuteWriteRsp);
                        HCICmds.GATTCmds.GATT_WriteLongCharValue writeLongCharValue = new HCICmds.GATTCmds.GATT_WriteLongCharValue();
                        writeLongCharValue.connHandle = dataAttr.ConnHandle;
                        writeLongCharValue.handle = dataAttr.Handle;
                        writeLongCharValue.value = str;
                        gattWriteDataAttr = dataAttr;
                        gattWriteDataAttr.Value = str;
                        int length1 = AttrData.writeLimits.MaxPacketSize >= AttrData.writeLimits.MaxNumPreparedWrites * 18 ? AttrData.writeLimits.MaxNumPreparedWrites * 18 : AttrData.writeLimits.MaxPacketSize;
                        byte[] numArray = devUtils.String2Bytes_LSBMSB(str, (byte)16);
                        if (numArray == null)
                        {
                            sendCmds.DisplayInvalidValue(writeLongCharValue.value);
                        }
                        else
                        {
                            int length2 = numArray.Length;
                            int sourceIndex = 0;
                            while (sourceIndex < numArray.Length)
                            {
                                byte[] valueData;
                                if (length2 > length1)
                                {
                                    valueData = new byte[length1];
                                    Array.Copy((Array)numArray, sourceIndex, (Array)valueData, 0, length1);
                                }
                                else
                                {
                                    valueData = new byte[length2];
                                    Array.Copy((Array)numArray, sourceIndex, (Array)valueData, 0, length2);
                                }
                                writeLongCharValue.value = string.Empty;
                                writeLongCharValue.offset = (ushort)sourceIndex;
                                if (sendCmds.SendGATT(writeLongCharValue, valueData, new SendCmds.SendCmdResult(SendCmdResult)))
                                {
                                    Enabled = false;
                                    int length3 = valueData.Length;
                                    length2 -= valueData.Length;
                                    sourceIndex += length3;
                                }
                                else
                                {
                                    string msg = "GATT_WriteLongCharValue Command Failed\n";
                                    if (sourceIndex > 0)
                                        msg = msg + "Multi-Part Write Sequenece Error\n" + "All Requested Data May Not Have Been Written To The Device\n";
                                    if (DisplayMsgCallback != null)
                                        DisplayMsgCallback(SharedAppObjs.MsgType.Error, msg);
                                    msgBox.UserMsgBox(SharedObjects.MainWin, MsgBox.MsgTypes.Error, msg);
                                    ClearRspDelegates();
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            formDataAccess.ReleaseMutex();
        }