private bool SendCommandToObject(out UInt16 status, UInt16 adr, PakCommands command, TimeSpan waitTime) { status = default(UInt16); var pakReqCoord = new PakStructRequest(); // Пакет запроса координат const ushort pakNumber = UInt16.MaxValue; pakReqCoord.SetRequestCoordinate(adr, pakNumber, command, 0, 0); pakReqCoord.ActualDateTime(); pakReqCoord.WriteCrc16(); var tpReq = new ModulePak(pakReqCoord, false); //_mreWaitData.Reset(); var queue = (CQueue <ModulePak>)_rModule.InQueue; queue.DequeueAll(); _mreHaveData.Reset(); _rModule.OutQueueEnq(tpReq); bool sign = _mreHaveData.WaitOne(TimeSpan.FromSeconds(10)); //bool sign = _mreHaveData.WaitOne(10););) if (!sign) { return(false); //Не дождались ответа от трекера } ModulePak pak; int i; for (i = 0; i < 2; ++i)//for (int i = 0; i < 2; i++) { while (queue.TryDequeue(out pak)) { var ps = pak.Structure as PakStructAnsw1; if (ps != null) { if (ps.Address == adr && ps.IsCrcOk()) { status = ps.Status; return(true); } } } Thread.Sleep(waitTime); // Ждем, что пройдут тесты //Thread.Sleep(TimeSpan.FromSeconds(1)); } Debug.WriteLine("RetryCount " + i); return(false); }
private PakStruct GetPakFromControls() { PakStruct pakStruct=null; Int32 val; if (!Int32.TryParse(FieldToAdress.Text,out val)) { return pakStruct; } var paktype = (byte)((ComboBoxBindElement)FieldPackType.SelectedItem).Value; switch ((PakTypeStructure)(paktype)) { case PakTypeStructure.Request: { var mCommand = (byte)((ComboBoxBindElement)FieldCommand.SelectedItem).Value; if (!Int32.TryParse(FieldNum.Text, out val)) return pakStruct; if (((PakCommands)(mCommand))==PakCommands.SendDiff) { if (!(Int32.TryParse(FieldLatitude.Text, out val) && Int32.TryParse(FieldLongitude.Text, out val) )) return pakStruct; pakStruct = new PakStructRequest(); ((PakStructRequest)pakStruct).SetField( Convert.ToUInt16(NoZero(FieldToAdress.Text)), paktype, (byte)((ComboBoxBindElement)FieldDesignation.SelectedItem).Value, (byte)((ComboBoxBindElement)FieldCommand.SelectedItem).Value, Convert.ToInt32(NoZero(FieldLatitude.Text)), Convert.ToInt32(NoZero(FieldLongitude.Text)), Convert.ToUInt16(NoZero(FieldNum.Text))); break; } pakStruct = new PakStructRequest(); ((PakStructRequest)pakStruct).SetField( Convert.ToUInt16(NoZero(FieldToAdress.Text)), paktype, (byte)((ComboBoxBindElement)FieldDesignation.SelectedItem).Value, (byte)((ComboBoxBindElement)FieldCommand.SelectedItem).Value, 0, 0, Convert.ToUInt16(NoZero(FieldNum.Text))); break; } case PakTypeStructure.Answer0: { if (!(Int32.TryParse(FieldNumReq.Text, out val) && Int32.TryParse(FieldUTC.Text, out val) && Int32.TryParse(FieldStatus.Text, out val) && Int32.TryParse(FieldLatitude.Text, out val) && Int32.TryParse(FieldLongitude.Text, out val) && Int32.TryParse(FieldAltitude.Text, out val) && Int32.TryParse(FieldCourse.Text, out val) && Int32.TryParse(FieldGyro.Text, out val) && Int32.TryParse(FieldSpeed.Text, out val) && Int32.TryParse(FieldNum.Text, out val) && Int32.TryParse(FieldBsNo.Text, out val) )) return pakStruct; pakStruct = new PakStructAnsw0(); ((PakStructAnsw0)pakStruct).SetField( Convert.ToUInt16(NoZero(FieldToAdress.Text)), paktype, Convert.ToUInt16(NoZero(FieldNumReq.Text)), Convert.ToUInt32(NoZero(FieldUTC.Text)), Convert.ToInt16(NoZero(FieldStatus.Text)), Convert.ToInt32(NoZero(FieldLatitude.Text)), Convert.ToInt32(NoZero(FieldLongitude.Text)), Convert.ToUInt16(NoZero(FieldAltitude.Text)), Convert.ToInt16(NoZero(FieldCourse.Text)), Convert.ToUInt16(NoZero(FieldGyro.Text)), Convert.ToUInt16(NoZero(FieldSpeed.Text)), Convert.ToUInt16(NoZero(FieldNum.Text))); break; } case PakTypeStructure.Answer1: { if (!(Int32.TryParse(FieldNumReq.Text, out val) && Int32.TryParse(FieldUTC.Text, out val) && Int32.TryParse(FieldStatus.Text, out val) && Int32.TryParse(FieldStatusExt.Text, out val) && Int32.TryParse(FieldNum.Text, out val) && Int32.TryParse(FieldBsNo.Text, out val) )) return pakStruct; pakStruct = new PakStructAnsw1(); ((PakStructAnsw1)pakStruct).SetField( Convert.ToUInt16(NoZero(FieldToAdress.Text)), paktype, Convert.ToUInt16(NoZero(FieldNumReq.Text)), Convert.ToUInt32(NoZero(FieldUTC.Text)), Convert.ToInt16(NoZero(FieldStatus.Text)), Convert.ToInt16(NoZero(FieldStatusExt.Text)), Convert.ToUInt16(NoZero(FieldNum.Text))); break; } case PakTypeStructure.Message0: { if (!(Int32.TryParse(FieldNumReq.Text, out val) && Int32.TryParse(FieldUTC.Text, out val) && Int32.TryParse(FieldStatus.Text, out val) && Int32.TryParse(FieldLatitude.Text, out val) && Int32.TryParse(FieldLongitude.Text, out val) && Int32.TryParse(FieldAltitude.Text, out val) && Int32.TryParse(FieldCourse.Text, out val) && Int32.TryParse(FieldGyro.Text, out val) && Int32.TryParse(FieldSpeed.Text, out val) && Int32.TryParse(FieldNum.Text, out val) && Int32.TryParse(FieldBsNo.Text, out val) )) return pakStruct; pakStruct = new PakStructMessage0(); ((PakStructMessage0)pakStruct).SetField( Convert.ToUInt16(NoZero(FieldToAdress.Text)), paktype, Convert.ToUInt16(NoZero(FieldNumReq.Text)), Convert.ToUInt32(NoZero(FieldUTC.Text)), Convert.ToInt16(NoZero(FieldStatus.Text)), Convert.ToInt32(NoZero(FieldLatitude.Text)), Convert.ToInt32(NoZero(FieldLongitude.Text)), Convert.ToUInt16(NoZero(FieldAltitude.Text)), Convert.ToInt16(NoZero(FieldCourse.Text)), Convert.ToUInt16(NoZero(FieldGyro.Text)), Convert.ToUInt16(NoZero(FieldSpeed.Text)), Convert.ToUInt16(NoZero(FieldNum.Text))); break; } case PakTypeStructure.Message1: { if (!(Int32.TryParse(FieldNumReq.Text, out val) && Int32.TryParse(FieldUTC.Text, out val) && Int32.TryParse(FieldStatus.Text, out val) && Int32.TryParse(FieldLatitude.Text, out val) && Int32.TryParse(FieldLongitude.Text, out val) && Int32.TryParse(FieldAltitude.Text, out val) && Int32.TryParse(FieldCourse.Text, out val) && Int32.TryParse(FieldGyro.Text, out val) && Int32.TryParse(FieldSpeed.Text, out val) && Int32.TryParse(FieldNum.Text, out val) && Int32.TryParse(FieldBsNo.Text, out val) )) return pakStruct; pakStruct = new PakStructMessage1(); ((PakStructMessage1)pakStruct).SetField( Convert.ToUInt16(NoZero(FieldToAdress.Text)), paktype, Convert.ToUInt16(NoZero(FieldNumReq.Text)), Convert.ToUInt32(NoZero(FieldUTC.Text)), Convert.ToInt16(NoZero(FieldStatus.Text)), Convert.ToInt32(NoZero(FieldLatitude.Text)), Convert.ToInt32(NoZero(FieldLongitude.Text)), Convert.ToUInt16(NoZero(FieldAltitude.Text)), Convert.ToInt16(NoZero(FieldCourse.Text)), Convert.ToUInt16(NoZero(FieldGyro.Text)), Convert.ToUInt16(NoZero(FieldSpeed.Text)), Convert.ToUInt16(NoZero(FieldNum.Text))); break; } default: { System.Diagnostics.Debug.Fail("No defined structure for this vid pak"); break; } } return pakStruct; }