private void SuccessCallback(byte[] obj)
        {
            FormCustomConsole.WriteLineWithConsole("COMMANDS SENT SUCCESSFULLY TO DEVICE:" + ConfigClass.deviceAddr + "!!!");
            this.Invoke((MethodInvoker) delegate
            {
                //ChangeColorOnDatagrid(ConfigClass.deviceAddr, System.Drawing.Color.Green);
                // Calculate result
                ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(obj);

                decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
                                          // Get raw value and convert to human readable values, with and without gain
                var rawValue     = decoder.Get2BytesAsInt16();
                float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue, ConfigClass.deviceGainCH1);

                if (index < deviceList.Count) // Prevent stupid things
                {
                    dataGridView1.Rows[index - 1].Cells[dataGridView1.Columns.Count - 1].Value = fValueGain;
                    GetVoltage(deviceList[index++], 10);
                }
                else
                {
                    busy = false;
                    dataGridView1.Rows[index - 1].Cells[dataGridView1.Columns.Count - 1].Value = fValueGain;
                    labelStatus.Text      = "Ready";
                    labelStatus.ForeColor = Color.Green;
                    FormCustomConsole.WriteLineWithConsole("\r\n------------------All commands sent!!! ---------------\r\n");
                    //NotifyEnd();
                }
            }
                        );
        }
        private void SuccessCallback(byte[] b)
        {
            Invoke((MethodInvoker) delegate
            {
                ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(b);

                decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
                                          // Get raw value and convert to human readable values, with and without gain
                var rawValue = decoder.Get2BytesAsInt16();
                float fValue = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue);
                float givenValue;
                if (!float.TryParse(textBoxFixedVoltage.Text, out givenValue))
                {
                    FormCustomConsole.WriteLineWithConsole("Wrong float value for calibration!");
                    return;
                }
                // Add to list
                var calPt = new CalibratePoint(rawValue, fValue, givenValue);
                calibValues.Add(calPt);
                numberOfSamples++;
                // Append to display
                AppendToDisplay(calPt);
                // Calculate average
                CalculateAverage();
            }
                   );
        }
示例#3
0
        /// <summary>
        /// Message which contains header is received, extract header from it, populate DataGridView and isue a new header request if needed
        /// </summary>
        /// <param name="b"> Message which contains header </param>
        private void FetchHeaders(byte[] b)
        {
            ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(b);

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

            // Fill header with remaining data
            headers[currentHeader].timestamp     = decoder.Get6BytesAsTimestamp();
            headers[currentHeader].prescaler     = decoder.Get4BytesAsInt();
            headers[currentHeader].numOfPoints   = decoder.Get2BytesAsInt();
            headers[currentHeader].operatingMode = decoder.Get1ByteAsInt();
            headers[currentHeader].channel       = decoder.Get1ByteAsInt();

            PopulateDataGridWithHeader(headers[currentHeader], currentHeader);

            currentHeader++;
            if (currentHeader == headers.Count) // Last time in here, reset everything
            {
                //Console.WriteLine("Done fetching headers");
                return;
            }

            // Send command to get measurement header
            CommandFormerClass cm = new CommandFormerClass(ConfigClass.startSeq, ConfigClass.deviceAddr);

            cm.AppendReadFromAddress(headers[currentHeader].headerAddress, ConfigClass.HEADER_LENGTH);
            var data = cm.GetFinalCommandList();

            //Console.WriteLine("Fetching headers from Fetching");
            Thread.Sleep(10); // MCU cant handle very fast UART tasks
            SerialDriver.Send(data, FetchHeaders, FailCallback);
        }
示例#4
0
        /// <summary>
        /// Data is downloaded, extract raw values from data packet
        /// </summary>
        /// <param name="raw"></param>
        public FormMeasurementSingleChannelPresenter(byte[] raw)
        {
            InitializeComponent();



            ByteArrayDecoderClass dec = new ByteArrayDecoderClass(raw);
            // Extract data len without header
            int dataLen = (dec.Get2BytesAsInt() - ConfigClass.HEADER_LENGTH) / 2;

            // Remove header from data packet
            selectedHeader               = new MeasurementHeaderClass(0); // Dummy address
            selectedHeader.timestamp     = dec.Get6BytesAsTimestamp();
            selectedHeader.prescaler     = dec.Get4BytesAsInt();
            selectedHeader.numOfPoints   = dec.Get2BytesAsInt();
            selectedHeader.operatingMode = dec.Get1ByteAsInt();
            selectedHeader.channel       = dec.Get1ByteAsInt();

            // Set default gain in textbox from configuration
            if (selectedHeader.channel == 0)
            {
                textBoxGain.Text = ConfigClass.deviceGainCH0.ToString();
            }
            else if (selectedHeader.channel == 1)
            {
                textBoxGain.Text = ConfigClass.deviceGainCH1.ToString();
            }
            else
            {
                throw new Exception("Invalid channel value in FormMeasurementSingleChannelPresenter");
            }



            // Form timestamp string
            string time = (selectedHeader.timestamp[0] + 2000).ToString() + "/" + selectedHeader.timestamp[1].ToString() + "/" +
                          selectedHeader.timestamp[2].ToString() + " " +
                          selectedHeader.timestamp[3].ToString() + ":" + selectedHeader.timestamp[4].ToString() + ":" + selectedHeader.timestamp[5].ToString();
            string channel = SupercapHelperClass.ConvertChannelToSymbolicString(selectedHeader.channel);

            // Change name of this form
            this.Text = channel + "  " + time;


            values = new int[dataLen];
            //int value = dec.Get2BytesAsInt16();

            for (int i = 0; i < dataLen; i++)
            {
                values[i] = dec.Get2BytesAsInt16();
            }
        }
示例#5
0
        void GetADCResultCallbackCH1(byte[] b)
        {
            ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(b);

            decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
            // Get raw value and convert to human readable values, with and without gain
            var   rawValue   = decoder.Get2BytesAsInt16();
            float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue, ConfigClass.deviceGainCH1);
            float fValue     = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue);
            // Show them in separate thread so you dont block current
            Thread t = new Thread(() =>
            {
                string s = "Raw ADC: " + rawValue + "\r\nValue in mV: " + fValue + "\r\nValue in mV with gain: " + fValueGain;
                MessageBox.Show(s, DateTime.Now.ToString());
            });

            t.IsBackground = true;
            t.Start();
        }
示例#6
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)
        {
            ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(b);

            decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
            this.Invoke(new Action(() =>
            {
                dataGridViewDataDownloadMesHeaders.DataSource = null;
                dataGridViewDataDownloadMesHeaders.Rows.Clear();
                dataGridViewDataDownloadMesHeaders.Refresh();
            }));

            // Get number of measurements and their header starting addresses
            int numOfMeasurements = decoder.Get2BytesAsInt();

            FormCustomConsole.WriteLine("Number of measurements: " + numOfMeasurements);
            Console.WriteLine("Number of measurements: " + numOfMeasurements);
            if (numOfMeasurements == 0)
            {
                // if no measurements leave it as it is
                MessageBox.Show("No saved measurements in device");
                return;
            }
            headers = new List <MeasurementHeaderClass>(); // Reset headers list
            // For now only header addresses are received, which can be used to fetch headers
            for (int i = 0; i < numOfMeasurements; i++)
            {
                headers.Add(new MeasurementHeaderClass(decoder.Get4BytesAsInt()));
            }
            currentHeader = 0; // Reset header index

            // Bootstrap
            // Send command to get measurement header
            CommandFormerClass cm = new CommandFormerClass(ConfigClass.startSeq, ConfigClass.deviceAddr);

            cm.AppendReadFromAddress(headers[0].headerAddress, ConfigClass.HEADER_LENGTH);
            var data = cm.GetFinalCommandList();

            //Console.WriteLine("Fetching headers from ProcessGetMeasurementInfo");
            SerialDriver.Send(data, FetchHeaders, FailCallback);
        }
        public FormMeasurementDualChannelPresenter(byte[] raw)
        {
            InitializeComponent();
            ByteArrayDecoderClass dec = new ByteArrayDecoderClass(raw);
            // Extract data len without header (2 measurements are stored in raw thats why / 4)
            int dataLen = (dec.Get2BytesAsInt() - ConfigClass.HEADER_LENGTH) / 4;

            // Remove header from data packet
            selectedHeader               = new MeasurementHeaderClass(0); // Dummy address
            selectedHeader.timestamp     = dec.Get6BytesAsTimestamp();
            selectedHeader.prescaler     = dec.Get4BytesAsInt();
            selectedHeader.numOfPoints   = dec.Get2BytesAsInt();
            selectedHeader.operatingMode = dec.Get1ByteAsInt();
            selectedHeader.channel       = dec.Get1ByteAsInt();

            // Set gain textboxes default values from config class
            textBoxGainCH0.Text = ConfigClass.deviceGainCH0.ToString();
            textBoxGainCH1.Text = ConfigClass.deviceGainCH1.ToString();

            // Form timestamp string
            string time = (selectedHeader.timestamp[0] + 2000).ToString() + "/" + selectedHeader.timestamp[1].ToString() + "/" +
                          selectedHeader.timestamp[2].ToString() + " " + selectedHeader.timestamp[3].ToString() + ":" +
                          selectedHeader.timestamp[4].ToString() + ":" + selectedHeader.timestamp[5].ToString();
            string channel = SupercapHelperClass.ConvertChannelToSymbolicString(selectedHeader.channel);

            // Change name of this form
            this.Text = channel + "  " + time;


            valuesCH0 = new int[dataLen];
            valuesCH1 = new int[dataLen];

            for (int i = 0; i < dataLen; i++)
            {
                valuesCH0[i] = dec.Get2BytesAsInt16();
                valuesCH1[i] = dec.Get2BytesAsInt16();
            }
        }
示例#8
0
        private void MultiSuccess35A(List <byte[]> list)
        {
            Invoke((MethodInvoker) delegate
            {
                labelMultiDownload.Text      = "Success!";
                labelMultiDownload.ForeColor = System.Drawing.Color.Green;
                const string delimiter       = "\r\n";
                Console.WriteLine("Success from MULTI");
                //string path = AppDomain.CurrentDomain.BaseDirectory;
                string filenameCH0;
                string filenameCH1;
                string midleFix = textBoxDataDownloadCapacitorDescription35A.Text;
                int[] valuesCH0, valuesCH1;
                MeasurementHeaderClass selectedHeader;
                string[] postFixes = { "_R", "_C" };
                int postFixIndex   = 0;


                FolderBrowserDialog dialog = new FolderBrowserDialog();
                dialog.SelectedPath        = defaultPath;
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    defaultPath = dialog.SelectedPath + "\\";
                }
                else
                {
                    // If no folder is selected just abort everything :(
                    labelMultiDownload.Text      = "Canceled!";
                    labelMultiDownload.ForeColor = System.Drawing.Color.Black;
                    return;
                }


                foreach (var item in list)
                {
                    ByteArrayDecoderClass dec = new ByteArrayDecoderClass(item);
                    // Extract data len without header (2 measurements are stored in raw thats why / 4)
                    int dataLen = (dec.Get2BytesAsInt() - ConfigClass.HEADER_LENGTH) / 4;

                    // Remove header from data packet
                    selectedHeader               = new MeasurementHeaderClass(0); // Dummy address
                    selectedHeader.timestamp     = dec.Get6BytesAsTimestamp();
                    selectedHeader.prescaler     = dec.Get4BytesAsInt();
                    selectedHeader.numOfPoints   = dec.Get2BytesAsInt();
                    selectedHeader.operatingMode = dec.Get1ByteAsInt();
                    selectedHeader.channel       = dec.Get1ByteAsInt();

                    valuesCH0 = new int[dataLen];
                    valuesCH1 = new int[dataLen];

                    for (int i = 0; i < dataLen; i++)
                    {
                        valuesCH0[i] = dec.Get2BytesAsInt16();
                        valuesCH1[i] = dec.Get2BytesAsInt16();
                    }
                    // Values are extracted so far, now form filename

                    // Form timestamp string
                    string time = (selectedHeader.timestamp[0] + 2000).ToString() + "_" + selectedHeader.timestamp[1].ToString() + "_" +
                                  selectedHeader.timestamp[2].ToString() + "__" + selectedHeader.timestamp[3].ToString() + "-" +
                                  selectedHeader.timestamp[4].ToString() + "-" + selectedHeader.timestamp[5].ToString();
                    //string channel = SupercapHelperClass.ConvertChannelToSymbolicString(selectedHeader.channel);

                    filenameCH0 = "dev" + ConfigClass.deviceAddr + "_" + midleFix + "_" + time + "_" + "CH0" + postFixes[postFixIndex];
                    filenameCH1 = "dev" + ConfigClass.deviceAddr + "_" + midleFix + "_" + time + "_" + "CH1" + postFixes[postFixIndex];
                    SaveMeasurementsToCSVClass.Save(valuesCH0, 0, defaultPath + filenameCH0 + ".csv", delimiter);
                    SaveMeasurementsToCSVClass.Save(valuesCH1, 1, defaultPath + filenameCH1 + ".csv", delimiter);
                    postFixIndex++;
                }
            }
                   );

            Console.WriteLine("All Done!!!!");
        }