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();
}