Beispiel #1
0
        public static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage SerialTest.exe <port name> [default]");
                return;
            }

            bool     forceDefault = args.Length < 2;
            string   portName     = args[0];
            IHITTAPI api          = Platform.IsOSX ? ((IHITTAPI) new MacAPI()) : ((IHITTAPI) new DefaultAPI());

            ISerialPort port = null;

            try
            {
                // Open port
                port = new DefaultSerialPort();
                Console.WriteLine("Using Mono serial port");

                port.Open(portName);
                port.ReadTimeout = 100;

                byte[] buffer = new byte[10];
                isConnected = true;

                APIStatus status   = APIStatus.Error;
                uint      remoteId = 0;
                Keys      key      = Keys.None;

                // Start polling
                while (isConnected)
                {
                    ReadBytes(port, 10, ref buffer);

                    if (!isConnected)
                    {
                        break;
                    }

                    Console.WriteLine("Received bytes from serial port: {0}",
                                      BitConverter.ToString(buffer));

                    status = api.inspect(buffer, ref remoteId, ref key);

                    if (status == APIStatus.Error)
                    {
                        var doShift = true;

                        do
                        {
                            if (doShift)
                            {
                                // Shift left by one position
                                for (int i = 0; i < buffer.Length - 1; i++)
                                {
                                    buffer[i] = buffer[i + 1];
                                }

                                doShift = false;
                            }

                            try
                            {
                                // Read new byte into the last position of the array
                                buffer[buffer.Length - 1] = port.ReadByte();

                                // Inspect again
                                status  = api.inspect(buffer, ref remoteId, ref key);
                                doShift = true;
                            }
                            catch (TimeoutException)
                            {
                                // Continue trying to read while connected
                            }
                        } while (isConnected && (status == APIStatus.Error));
                    }
                }

                port.Close();
            }
            catch (ThreadAbortException)
            {
                port.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Serial port thread exception: {0}", ex);
            }
        }