コード例 #1
0
        private void ReadAllFromQueue()
        {
            LinError readResult;

            do
            {
                ReceivedMessage msg;

                readResult = PLinApi.Read(_clientHandle, out msg);
                var(processorResult, processorMessage) = MessageProcessor.Process(readResult, msg);

                switch (processorResult)
                {
                case MessageProcessorResult.EmptyQueue:
                    break;

                case MessageProcessorResult.Error:
                case MessageProcessorResult.Info:
                    OnError?.Invoke(this, processorMessage);
                    break;

                case MessageProcessorResult.Regular:
                    OnData?.Invoke(this, msg.Data);
                    break;

                default:
                    throw new NotImplementedException();
                }
            } while (readResult == LinError.Ok);
        }
コード例 #2
0
        private void SetClientFilter()
        {
            var result = PLinApi.RegisterFrameId(linClientHandle, linHardwareHandle, 0x01, 0x3D);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while setting client filter: {result.ToString().ToSentence()}");
            }
        }
コード例 #3
0
        private void Initialize(BaudRate baudRate, HardwareMode hardwareMode)
        {
            var result = PLinApi.InitializeHardware(linClientHandle, linHardwareHandle, hardwareMode, (ushort)baudRate);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while initializing hardware: {result.ToString().ToSentence()}");
            }
        }
コード例 #4
0
        private void Connect()
        {
            var result = PLinApi.ConnectClient(linClientHandle, linHardwareHandle);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while connecting a client: {result.ToString().ToSentence()}");
            }
        }
コード例 #5
0
        private void Register()
        {
            var result = PLinApi.RegisterClient("Master", 0, out linClientHandle);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while registering a client: {result.ToString().ToSentence()}");
            }
        }
コード例 #6
0
        private void Disconnect()
        {
            var result = PLinApi.RemoveClient(linClientHandle);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while removing a client: {result.ToString()}");
            }
        }
コード例 #7
0
        protected void KeepAlive()
        {
            var result = PLinApi.StartKeepAlive(linClientHandle, linHardwareHandle, 0x00, 1000);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while starting a keep alive session: {result.ToString().ToSentence()}");
            }
        }
コード例 #8
0
        public void Send(Message message)
        {
            PLinApi.CalculateChecksum(ref message);
            PLinApi.GetPID(ref message.FrameId);

            var result = PLinApi.Write(_clientHandle, _hardwareHandle, ref message);

            if (result != LinError.Ok)
            {
                throw new CommunicationError($"Error while sending a message: {result.ToString().ToSentence()}");
            }
        }
コード例 #9
0
        protected void DetermineHardware()
        {
            var    hardwareHandles = new HardwareHandle[5];
            ushort hardwareHandlesCount;

            var result = PLinApi.GetAvailableHardware(hardwareHandles,
                                                      (ushort)(hardwareHandles.Length * sizeof(HardwareHandle)), out hardwareHandlesCount);

            if (result != LinError.Ok)
            {
                throw new ConnectionError($"Error while getting available hardware: {result.ToString().ToSentence()}");
            }

            linHardwareHandle = hardwareHandles.First();
        }
コード例 #10
0
 public void GetPIDFor(ref byte frameId) => PLinApi.GetPID(ref frameId);