예제 #1
0
 private void OnTransmitting(object sender, UartDataEventArgs e)
 {
     if (transport != null)
     {
         transport.Send(e.Data);
     }
 }
예제 #2
0
 protected virtual void OnTransmit(UartDataEventArgs args)
 {
     args.ParityBit = Uart.ComputeParityBit(args.Data, controlRegister);
     if (DataTransmitting != null)
     {
         DataTransmitting(this, args);
     }
 }
예제 #3
0
 protected virtual void OnReceived(UartDataEventArgs args)
 {
     args.ParityBit = Uart.ComputeParityBit(args.Data, controlRegister);
     if (DataReceived != null)
     {
         DataReceived(this, args);
     }
 }
예제 #4
0
 public void HandleDataTransmitting(object sender, UartDataEventArgs e)
 {
     // When there is no physical or emulated transport, force a software loopback
     if (transport == null)
     {
         // TODO: Check for break signal
         AcceptData(e.Data);
     }
 }
예제 #5
0
        public void TransmitBreak()
        {
            // Complete sending current shift register contents
            UartDataEventArgs args = new UartDataEventArgs()
            {
                Break          = true,
                Data           = 0x00,
                StopBitPresent = false
            };

            OnTransmit(args);
        }
예제 #6
0
        public void TransmitData(byte data)
        {
            // Complete sending current shift register contents
            UartDataEventArgs args = new UartDataEventArgs()
            {
                Break          = false,
                Data           = data,
                StopBitPresent = true
            };

            OnTransmit(args);
        }
예제 #7
0
        public void ReceiveData(byte data)
        {
            // Data is ready to receive
            SerialData = data;

            // Remove data currently received from holding register
            receiveRegister       = null;
            receivePulseCountdown = 0;

            // Check for overrun
            if (controlRegister.ReceiveReady)
            {
                // Previous data has not been read yet, so overrun
                controlRegister.OverrunError = true;
            }

            // Mark receive ready
            controlRegister.ReceiveReady = true;

            if (pendingFrameError)
            {
                // Report framing error that occurred during receive
                controlRegister.FrameError = true;

                // TODO (UART): Check whether a second byte needs to be send because of the overlap in data
                // Second frame with bogus data
                // AcceptData(0x23);
                // This is an instant framing error, as it is the result of a previous overlap
                //pendingFrameError = true;
            }

            // Complete sending current shift register contents
            UartDataEventArgs args = new UartDataEventArgs()
            {
                Break          = false,
                Data           = data,
                StopBitPresent = false
            };

            OnReceived(args);
        }