コード例 #1
0
        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);
        }
コード例 #2
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;
            }
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: tbergmueller/tblcsharp
        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);
            }
        }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: tbergmueller/tblcsharp
        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.
            //
        }