예제 #1
0
        private void ReceiveGain(byte[] b)
        {
            ChecksumClass cs = new ChecksumClass();

            if (cs.VerifyChecksumFromReceivedMessage(b))
            {
                Console.WriteLine("CHECKSUM MATCH");
            }
            else
            {
                Console.WriteLine("CHECKSUM DONT MATCH");
                return;
            }

            var newArr = UARTHelperClass.RemoveChecksumFromMessage(b);

            ByteArrayDecoderClass dec = new ByteArrayDecoderClass(newArr);

            //int size = dec.Get2BytesAsInt() / 2;
            dec.Get2BytesAsInt(); // Just remove 2 bytes i know length for this message

            float temp = dec.Get4BytesAsFloat();

            this.Invoke(new Action(() =>
            {
                textBoxGain.Text = temp.ToString();
            }));
        }
예제 #2
0
        private void buttonRead_Click(object sender, EventArgs e)
        {
#warning Update to use CommandFormerClass
            uartReceiver.Reset();
            processFunction = DebugRead;

            List <byte> sb = new List <byte>();

            sb.Add(startSeq);
            sb.Add(deviceAddr);
            // Append message length, include shecksum
            sb.Add(0);
            sb.Add(9);
            // Append command
            sb.Add(commandRead); // 1B

            // Get and append address
            int    temp     = Convert.ToInt32(this.textBoxAddress.Text);
            byte[] bAddress = CustomConvertorClass.ConvertIntTo4Bytes(temp);
            sb.AddRange(bAddress); // 4B
            // Get and append length
            temp = Convert.ToInt32(this.textBoxLen.Text);
            byte[] bLen = CustomConvertorClass.ConvertIntTo2Bytes(temp);
            sb.AddRange(bLen); // 2B

            // Now calculate and append checksum
            UInt16 csum  = ChecksumClass.CalculateChecksum(sb.ToArray());
            byte[] bcsum = CustomConvertorClass.ConvertIntTo2BytesBE(csum);
            sb.AddRange(bcsum); // 2B

            serial.Write(sb.ToArray(), 0, sb.Count);
        }
예제 #3
0
        private void DebugRead(byte[] b)
        {
            uartReceiver.Reset();
            // Check checksum and remove from message
            ChecksumClass cs = new ChecksumClass();

            if (cs.VerifyChecksumFromReceivedMessage(b))
            {
                Console.WriteLine("CHECKSUM MATCH");
            }
            else
            {
                Console.WriteLine("CHECKSUM DONT MATCH");
                return;
            }

            var newArr = UARTHelperClass.RemoveChecksumFromMessage(b);

            Console.WriteLine("in debug, read bytes: " + b.Length);
            this.Invoke(new Action(() =>
            {
                //FormDataPresenter fdp = new FormDataPresenter(newArr);
                FormDataPresenter2 fdp = new FormDataPresenter2(newArr);
                fdp.Show();
            }));
        }
예제 #4
0
        private void buttonGetMeasurements_Click(object sender, EventArgs e)
        {
#warning Update to use CommandFormerClass
            uartReceiver.Reset();
            processFunction = ProcessGetMeasurementInfo;
            // Send command to get measurement header
            List <byte> sb = new List <byte>();

            sb.Add(startSeq);
            sb.Add(deviceAddr);
            // Append message length
            sb.Add(0);
            sb.Add(9);
            // Append command
            sb.Add(commandRead);

            // Get and append address
            byte[] bAddress = CustomConvertorClass.ConvertIntTo4Bytes(MEASURE_INFO_BASE);
            sb.AddRange(bAddress);
            // Get and append length
            byte[] bLen = CustomConvertorClass.ConvertIntTo2Bytes(MEASURE_INFO_LEN);
            sb.AddRange(bLen);

            // Debug checksum test
            //sb.Add(0x1);
            //sb.Add(0x2);

            // Now calculate and append checksum
            UInt16 csum  = ChecksumClass.CalculateChecksum(sb.ToArray());
            byte[] bcsum = CustomConvertorClass.ConvertIntTo2BytesBE(csum);
            sb.AddRange(bcsum); // 2B


            serial.Write(sb.ToArray(), 0, sb.Count);
        }
예제 #5
0
        public byte[] GetFinalCommandList()
        {
            var num = bl.Count;

            // First 2 bytes are skipped but checksum should be counted, +2 - 2 = 0
            bl.InsertRange(2, CustomConvertorClass.ConvertIntTo2Bytes(num));

            UInt16 csum = ChecksumClass.CalculateChecksum(bl.ToArray());

            bl.AddRange(CustomConvertorClass.ConvertIntTo2BytesBE(csum));

            return(bl.ToArray());
        }
예제 #6
0
        private void ReadAndDisplayData(int index)
        {
            MeasurementHeaderClass header;

            try
            {
                header = headers[index];
            }
            catch (Exception)
            {
                MessageBox.Show("Header not present");
                return;
            }


            uartReceiver.Reset();
            processFunction = DebugRead;
#warning Update to use CommandFormerClass
            List <byte> sb = new List <byte>();

            sb.Add(startSeq);
            sb.Add(deviceAddr);
            // Append message length, include checksum
            sb.Add(0);
            sb.Add(9);
            // Append command
            sb.Add(commandRead); //1

            // Append address
            byte[] bAddress = CustomConvertorClass.ConvertIntTo4Bytes(header.dataAddress); //5
            sb.AddRange(bAddress);
            // Get and append length
            byte[] bLen = CustomConvertorClass.ConvertIntTo2Bytes(header.numOfPoints * 2); //7      1 measure is 2 bytes
            sb.AddRange(bLen);

            // Now calculate and append checksum
            UInt16 csum  = ChecksumClass.CalculateChecksum(sb.ToArray());
            byte[] bcsum = CustomConvertorClass.ConvertIntTo2BytesBE(csum);
            sb.AddRange(bcsum); // 2B

            serial.Write(sb.ToArray(), 0, sb.Count);
        }
예제 #7
0
        private void buttonErase_Click(object sender, EventArgs e)
        {
            // Send command to erase measurement header
            List <byte> sb = new List <byte>();

            sb.Add(startSeq);
            sb.Add(deviceAddr);
            // Append message length, and include checksum
            sb.Add(0);
            sb.Add(3);
            // Append command
            sb.Add(commandErase);

            // Now calculate and append checksum
            UInt16 csum = ChecksumClass.CalculateChecksum(sb.ToArray());

            byte[] bcsum = CustomConvertorClass.ConvertIntTo2BytesBE(csum);
            sb.AddRange(bcsum); // 2B

            serial.Write(sb.ToArray(), 0, sb.Count);
        }
예제 #8
0
        private void FetchHeaders(byte[] b)
        {
            // Check checksum and remove from message
            ChecksumClass cs = new ChecksumClass();

            if (cs.VerifyChecksumFromReceivedMessage(b))
            {
                Console.WriteLine("CHECKSUM MATCH");
            }
            else
            {
                Console.WriteLine("CHECKSUM DONT MATCH");
                return;
            }

            var newArr = UARTHelperClass.RemoveChecksumFromMessage(b);


            ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(newArr);

            decoder.Get2BytesAsInt(); // Remove first 2 values (number of data transmited)

            int[] timestamp     = decoder.Get6BytesAsTimestamp();
            int   prescaler     = decoder.Get4BytesAsInt();
            int   numOfPoints   = decoder.Get2BytesAsInt();
            int   operatingMode = decoder.Get1ByteAsInt();
            int   channelMode   = decoder.Get1ByteAsInt();

            // Fill header with remaining data
            headers[currentHeader].timestamp     = timestamp;
            headers[currentHeader].prescaler     = prescaler;
            headers[currentHeader].numOfPoints   = numOfPoints;
            headers[currentHeader].operatingMode = operatingMode;
            headers[currentHeader].channel       = channelMode;
            headers[currentHeader].ready         = true;
            // Fill labels
            FillLabelGroup(currentHeader, headers[currentHeader].headerAddress, timestamp, prescaler, numOfPoints, operatingMode, channelMode);

            uartReceiver.Reset();

            currentHeader++;
            if (currentHeader == headers.Count) // Last time in here, reset everything
            {
                processFunction = Dummy;
                return;
            }
#warning Update to use CommandFormerClass
            // Send command to get measurement header
            List <byte> sb = new List <byte>();

            sb.Add(startSeq);
            sb.Add(deviceAddr);
            // Append message length and include checksum
            sb.Add(0);
            sb.Add(9);
            // Append command
            sb.Add(commandRead);

            // Get and append address
            byte[] bAddress = CustomConvertorClass.ConvertIntTo4Bytes(headers[currentHeader].headerAddress);
            sb.AddRange(bAddress);
            // Get and append length
            byte[] bLen = CustomConvertorClass.ConvertIntTo2Bytes(HEADER_LENGTH);
            sb.AddRange(bLen);
            Thread.Sleep(50);
            //Console.WriteLine("FetchHeaders -- sending " + sb.Count);

            // Now calculate and append checksum
            UInt16 csum  = ChecksumClass.CalculateChecksum(sb.ToArray());
            byte[] bcsum = CustomConvertorClass.ConvertIntTo2BytesBE(csum);
            sb.AddRange(bcsum); // 2B

            serial.Write(sb.ToArray(), 0, sb.Count);
        }
예제 #9
0
        /// <summary>
        /// Measurement info is received, decode data and send requests to read measurement headers
        /// </summary>
        /// <param name="b"></param>
        private void ProcessGetMeasurementInfo(byte[] b)
        {
            // Check checksum and remove from message
            ChecksumClass cs = new ChecksumClass();

            if (cs.VerifyChecksumFromReceivedMessage(b))
            {
                Console.WriteLine("CHECKSUM MATCH");
            }
            else
            {
                Console.WriteLine("CHECKSUM DONT MATCH");
                return;
            }

            var newArr = UARTHelperClass.RemoveChecksumFromMessage(b);


            ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(newArr);

            decoder.Get2BytesAsInt(); // Remove first 2 values (number of data transmited)
            EraseLabels();
            // Get number of measurements and their header starting addresses
            int numOfMeasurements = decoder.Get2BytesAsInt();

            Console.WriteLine("Number of measurements: " + numOfMeasurements);
            if (numOfMeasurements == 0)
            {
                // if no measurements leave it as it is
                processFunction = Dummy;
                return;
            }
            headers = new List <MeasurementHeaderClass>(); // Reset headers list
            for (int i = 0; i < numOfMeasurements; i++)
            {
                headers.Add(new MeasurementHeaderClass(decoder.Get4BytesAsInt()));
            }

            // Reset UART receiver and set new method for data processing
            uartReceiver.Reset();
            processFunction = FetchHeaders;
            currentHeader   = 0; // Reset header index


            // Bootstrap
#warning Update to use CommandFormerClass
            // Send command to get measurement header
            List <byte> sb = new List <byte>();

            sb.Add(startSeq);
            sb.Add(deviceAddr);
            // Append message length
            sb.Add(0);
            sb.Add(9);
            // Append command
            sb.Add(commandRead);

            // Get and append address
            byte[] bAddress = CustomConvertorClass.ConvertIntTo4Bytes(headers[0].headerAddress);
            sb.AddRange(bAddress);
            // Get and append length
            byte[] bLen = CustomConvertorClass.ConvertIntTo2Bytes(HEADER_LENGTH);
            sb.AddRange(bLen);
            //Thread.Sleep(200);
            //Console.WriteLine("ProcessGetMeasurementInfo --sending " + sb.Count);

            // Now calculate and append checksum
            UInt16 csum  = ChecksumClass.CalculateChecksum(sb.ToArray());
            byte[] bcsum = CustomConvertorClass.ConvertIntTo2BytesBE(csum);
            sb.AddRange(bcsum); // 2B

            serial.Write(sb.ToArray(), 0, sb.Count);
        }