Example #1
0
        //---------------------------------------------------------------------------------------//

        protected bool AddPacket(byte[] buffer, int startIndex)
        {
            LCDPacket packet        = CreatePacket(buffer, startIndex);
            ushort    calculatedCRC = CRCGenerator.GenerateCRC(buffer, startIndex, packet.DataLength + 2, CRCGenerator.CRC_SEED);

            Trace.WriteLine("AddPacket(): " + packet.PacketType.ToString());

            switch (packet.PacketType)
            {
            case LCDPacket.LCDPacketType.NORMAL_RESPONSE:
                AddResponsePacket(packet);
                break;

            case LCDPacket.LCDPacketType.NORMAL_REPORT:
                AddReportPacket(packet);
                break;

            case LCDPacket.LCDPacketType.ERROR_RESPONSE:
                AddResponsePacket(packet);
                break;
            }

            if (calculatedCRC != packet.CRC)
            {
                Trace.WriteLine("CRC ERROR!:" +
                                " Calculated CRC = 0x" + Convert.ToString(calculatedCRC, 16) +
                                " Packet CRC = 0x" + Convert.ToString(packet.CRC, 16)
                                );

                return(false);
            }

            return(true);
        }
Example #2
0
        //---------------------------------------------------------------------------------------//

        private void AddReportPacket(LCDPacket packet)
        {
            lock (reportSignal)
            {
                reportQueue.Enqueue(packet);
                Monitor.Pulse(reportSignal);
            }
        }
Example #3
0
        //---------------------------------------------------------------------------------------//

        private void AddResponsePacket(LCDPacket packet)
        {
            lock (responseSignal)
            {
                responsePacket = packet;
                Monitor.Pulse(responseSignal);
            }
        }
Example #4
0
        //-------------------------------------------------------------------------------------------------//

        private byte[] SendReturnData(byte type, byte[] data, int dataLength)
        {
            LCDPacket packet = Send(type, data, dataLength);

            if (packet != null)
            {
                return(packet.Data);
            }
            else
            {
                return(null);
            }
        }
Example #5
0
        //-------------------------------------------------------------------------------------------------//

        private LCDPacket Send(byte packetType, byte[] data, int dataLength)
        {
            ushort crc;

            if ((data == null && dataLength != 0) ||
                (data != null && dataLength > data.Length))
            {
                throw new ArgumentException("bad data sent to Send");
            }

            //
            // Create packet buffer and enter header information
            //
            byte[] packetBuffer = new byte[dataLength + 4];
            packetBuffer[0] = packetType;
            packetBuffer[1] = (byte)dataLength;

            //
            // Enter data if there is any
            //
            if (dataLength != 0)
            {
                Array.Copy(data, 0, packetBuffer, 2, dataLength);
            }

            //
            // Calculate and enter the checksum into the last two bytes of the packet
            //
            crc = CRCGenerator.GenerateCRC(packetBuffer, dataLength + 2, CRCGenerator.CRC_SEED);
            packetBuffer[2 + dataLength + 1] = (byte)(crc >> 8);
            packetBuffer[2 + dataLength]     = (byte)crc;

            //
            // Send the request and return the response
            //
            lock (responseSignal)
            {
                responsePacket = null;

                // Write the packet to the serial LCD
                this.SendData(packetBuffer, packetBuffer.Length);

                // Wait for the response packet
                if (Monitor.Wait(responseSignal, MAX_RESPONSE_TIME))
                {
                    return(responsePacket);
                }
            }

            return(null);
        }
Example #6
0
        //-------------------------------------------------------------------------------------------------//

        private bool SendReturnBool(byte type, byte[] data, int dataLength)
        {
            LCDPacket packet = Send(type, data, dataLength);

            if (packet != null)
            {
                return(type == (packet.Type & ~0xC0) &&
                       responsePacket.PacketType == LCDPacket.LCDPacketType.NORMAL_RESPONSE);
            }
            else
            {
                return(false);
            }
        }
        //-------------------------------------------------------------------------------------------------//
        private LCDPacket Send(byte packetType, byte[] data, int dataLength)
        {
            ushort crc;

            if ((data == null && dataLength != 0) ||
                (data != null && dataLength > data.Length))
            {
                throw new ArgumentException("bad data sent to Send");
            }

            //
            // Create packet buffer and enter header information
            //
            byte[] packetBuffer = new byte[dataLength + 4];
            packetBuffer[0] = packetType;
            packetBuffer[1] = (byte)dataLength;

            //
            // Enter data if there is any
            //
            if (dataLength != 0)
            {
                Array.Copy(data, 0, packetBuffer, 2, dataLength);
            }

            //
            // Calculate and enter the checksum into the last two bytes of the packet
            //
            crc = CRCGenerator.GenerateCRC(packetBuffer, dataLength + 2, CRCGenerator.CRC_SEED);
            packetBuffer[2 + dataLength + 1] = (byte)(crc >> 8);
            packetBuffer[2 + dataLength] = (byte)crc;

            //
            // Send the request and return the response
            //
            lock (responseSignal)
            {
                responsePacket = null;

                // Write the packet to the serial LCD
                this.SendData(packetBuffer, packetBuffer.Length);

                // Wait for the response packet
                if (Monitor.Wait(responseSignal, MAX_RESPONSE_TIME))
                {
                    return responsePacket;
                }
            }

            return null;
        }
 //---------------------------------------------------------------------------------------//
 private void AddResponsePacket(LCDPacket packet)
 {
     lock (responseSignal)
     {
         responsePacket = packet;
         Monitor.Pulse(responseSignal);
     }
 }
 //---------------------------------------------------------------------------------------//
 private void AddReportPacket(LCDPacket packet)
 {
     lock (reportSignal)
     {
         reportQueue.Enqueue(packet);
         Monitor.Pulse(reportSignal);
     }
 }
Example #10
0
        //---------------------------------------------------------------------------------------//

        private void ReportHandler()
        {
            const string STRLOG_MethodName = "ReportHandler";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            try
            {
                this.reportRunning = true;
                while (this.reportRunning == true)
                {
                    lock (this.reportSignal)
                    {
                        if (Monitor.Wait(this.reportSignal, 1000) == false)
                        {
                            // Signal not received before timout
                            continue;
                        }

                        Trace.WriteLine("ReportHandler: reportSignal received - reportQueue.Count=" + reportQueue.Count.ToString());
                    }

                    //
                    // Get packets from the queue and process
                    //
                    while (reportQueue.Count > 0)
                    {
                        LCDPacket packet = reportQueue.Dequeue();

                        switch (packet.Type)
                        {
                        case PKTRPT_CAPTURE_DATA:

                            int value = packet.Data[1];
                            value       = (value << 8) + packet.Data[0];
                            CaptureData = value;

                            Trace.WriteLine("CaptureData=" + value.ToString());
                            break;

                        case PKTRPT_KEY_ACTIVITY:

                            if (packet.DataLength == 1)
                            {
                                switch (packet.Data[0])
                                {
                                case 5:
                                    Key = LCDKey.Enter;
                                    break;

                                case 6:
                                    Key = LCDKey.Exit;
                                    break;
                                }
                            }
                            break;

                        case PKTRPT_TEMP_SENSOR:
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logfile.WriteError(ex.Message);
            }

            Trace.WriteLine(STRLOG_MethodName + ": Exiting");

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName);
        }