public void GetData(object sender, EventArgs e) { _emitData = _serialPort.EmitDataMtrResponse; if (_emitData.EmitCardNumber.Equals(_lastReadEmitCardNumber)) { return; } BeginInvoke(new MethodInvoker(delegate { //TODO check here that all check point found //CheckCourses(_emitData); var time = GetTime(_emitData.CheckPoints); time = _emitData.FinalResult; var ranking = GetRanking(time); var name = ""; using (var form = new NewResult(time, ranking)) { var result = form.ShowDialog(); if (result == DialogResult.OK) { name = form.returnName; } } if (name != null) { WriteToFile(time, name, _emitData.EmitCardNumber); } ReadResultsToDataGridView(); })); _lastReadEmitCardNumber = _emitData.EmitCardNumber; }
private void HandleMTRResponseMessage(List <int> rxByteList) { SaveToFile(); var emit = rxByteList[4].ToString("X") + rxByteList[3].ToString("X") + rxByteList[2].ToString("X"); MTRResponse mtrResponse = new MTRResponse { EmitCardNumber = int.Parse(emit, NumberStyles.HexNumber), NotInUse1 = rxByteList[5], EmitCardProdWeek = rxByteList[6], EmitCardProdYear = rxByteList[7], NotInUse2 = rxByteList[8] }; var cardCheckByte = rxByteList[9]; if (!CheckModulo(rxByteList.GetRange(2, 8))) { IncreaseCommunicationErrorsCount(); throw new Exception("Emit card checksum failed"); } List <MTRDataCheckPoint> checkPoints = new List <MTRDataCheckPoint>(); // Try to find starting zeros // ie. three zeros in a row var moveBitsFromStart = 10; if (rxByteList[10] == 0 && rxByteList[11] == 0 && rxByteList[12] == 0) { moveBitsFromStart = 10; } else if (rxByteList[11] == 0 && rxByteList[12] == 0 && rxByteList[13] == 0) { moveBitsFromStart = 11; } else if (rxByteList[12] == 0 && rxByteList[13] == 0 && rxByteList[14] == 0) { moveBitsFromStart = 12; } for (int checkPointNo = 0; checkPointNo < 50; checkPointNo++) { Console.WriteLine("Move bits = " + moveBitsFromStart); var checkPointDataPosition = 3 * checkPointNo + moveBitsFromStart; var codeN = rxByteList[checkPointDataPosition]; var timeN = int.Parse(rxByteList[checkPointDataPosition + 2].ToString("X") + rxByteList[checkPointDataPosition + 1].ToString("X"), NumberStyles.HexNumber); Console.WriteLine(">>" + codeN); if (codeN == 100) { mtrResponse.FinalResult = timeN; } checkPoints.Add(new MTRDataCheckPoint { CodeN = codeN, TimeN_s = timeN }); } if (_lastEmitRead != mtrResponse.EmitCardNumber) { mtrResponse.CheckPoints = checkPoints; EmitDataMtrResponse = mtrResponse; OnEmitDataChanged(); } else { _lastEmitRead = mtrResponse.EmitCardNumber; } }
public static void CheckCourses(MTRResponse emitData) { }