public int AddBytes(byte[] rBytes) { int tmpError; accessControl.WaitOne(); for (int i = 0; i < rBytes.Length; i++) // Der reihe nach hinzufügen { tmpError = addByteInternal(rBytes[i]); if (tmpError != 0) // sollte beispielsweise der Buffer überlaufen, Exception raus { EDOLLHandler.Error(tmpError); // Buffer overflow... BufferOverflow ex = new BufferOverflow(EDOLLHandler.GetLastError() + "Datapointer: " + this.dptr.ToString()); accessControl.Release(); throw ex; } } // wenn ich bis hierher gekommen bin, gabs keinen Fehler... availableSema = accessControl.Release(); if (ByteAdded != null) { ByteAdded(this, EventArgs.Empty); // Fire Events (if there are any) } return(0); }
///<summary> /// Fügt ein Byte hinten an den Buffer an (an die Stelle, auf die der Datenpointer vorher zeigte) /// </summary> /// <param name="pByte">Anzuhängendes Byte</param> /// <returns> /// <list type="bullet"> /// <item>0 bei Erfolg (<see cref="EDOLLHandler">EDOLL-Code</see>)</item> /// <item>-201 wenn Buffer voll (Byte wurde nicht geschrieben) (<see cref="EDOLLHandler">EDOLL-Code</see>)</item> /// </list> /// </returns> /// <example> /// Beispieloperationen mit dem Buffer /// <para><img src="tbl_img/receiveBufferExample.jpg" /></para> /// <code> /// public static void receiveBufferExample() /// { /// receiveBuffer testBuffer = new receiveBuffer(); /// /// testBuffer.AddByte((byte)'a'); /// testBuffer.AddByte((byte)'b'); /// testBuffer.AddByte((byte)'c'); /// /// stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString()); // printet 3 /// stdOut.Debug("Buffer content: " + testBuffer.ToString());// Zeigt Hexwerte im Buffer an /// /// testBuffer.FreeBytes(0,1); // markiert 'a' und 'b' zum Löschen /// /// stdOut.Info("a und b marked for erasing"); /// stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString()); // liefert 3, wurde ja erst markiert /// /// testBuffer.Flush(); /// /// stdOut.Info("buffer flushed..."); /// stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString()); // liefert 1, 'c' wurde ganz nach vorne gerutscht /// stdOut.Debug("Buffer content: " + testBuffer.ToString());// Zeigt Hexwerte im Buffer an /// /// testBuffer.Clear(); // Buffer wieder ausleeren /// /// stdOut.Info("buffer cleared"); /// stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString()); // liefert 0 /// } /// </code> /// </example>> // TODO: EXCEPTION dokumentieren public int AddByte(byte pByte) { int tmpError; accessControl.WaitOne(); tmpError = addByteInternal(pByte); if (tmpError == 0) { accessControl.Release(); if (ByteAdded != null) { ByteAdded(this, EventArgs.Empty); // Call Events (if there are any) } return(0); // EDOLL no Error } else { EDOLLHandler.Error(tmpError); // Buffer overflow... BufferOverflow ex = new BufferOverflow(EDOLLHandler.GetLastError() + "Datapointer: " + this.dptr.ToString()); accessControl.Release(); throw ex; } }
void Mnu_startClick(object sender, EventArgs e) { string readPort; // TODO: Auswahl TCP-Client oder USB form_cps selector = new form_cps(); if (selector.ShowDialog() == DialogResult.OK) { readPort = selector.SelectedPort; } else { return; } string readBaudrate = TBL.Routines.InputBox("Specify Baudrate (bps): ", "Baudrate", devComSerialInterface.DefaultBaudrate.ToString()); if (readBaudrate == string.Empty) { return; } int baudrate; if (!int.TryParse(readBaudrate, out baudrate)) { stdOut.Error("Could not parse Baudrate. Only integer values allowed. Please try again"); return; } devComSerialInterface client = new devComSerialInterface(readPort, 38400); busListener = new DevComMaster(client); if (busListener.ConnectWithoutReset()) { this.Controls.Add(log.Visualisation); log.VisualizationFitWindowSize(this); log.Location = frameLogTopLeft; busListener.ByteReceived += new ByteReceivedEventHandler(bufferAdded); mnu_start.Enabled = false; mnu_stop.Enabled = true; } else { stdOut.Error(EDOLLHandler.GetLastError(), busListener.InfoString); } }
public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); searching = new System.Threading.Semaphore(1, 1); stdOut.DeactivateDebug(); stdOut.SetInterface(StdOutInterfaces.WindowsForm); EDOLLHandler.Start(false); log = new M3SFrameLog(); // // TODO: Add constructor code after the InitializeComponent() call. // }