Exemplo n.º 1
0
        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            if (USBDevDetected)
            {
                byte[] USBPacket = new byte[USB_CMD_PACKET_SIZE];

                USBPacket[USB_REPORT_ID_POS] = USB_CMD_ID;
                USBPacket[USB_CMD_POS]       = USB_CMD_START_CAPTURE;

                int Value = Frequencies.SelectedIndex;
                USBPacket[CAPTURE_SYNC_OFFSET]    = CAPTURE_SYNC_INTERNAL;
                USBPacket[CAPTURE_TIM_PSC_OFFSET] = CaptureTimPsc[Value];
                USBPacket[CAPTURE_TIM_ARR_OFFSET] = CaptureTimArr[Value];
                DescretTimeIndex = Value;

                SamplesToCapture = SampleCount[Samples.SelectedIndex];
                USBPacket[CAPTURE_SAMPLE_OFFSET]     = (byte)SamplesToCapture;
                USBPacket[CAPTURE_SAMPLE_OFFSET + 1] = (byte)(SamplesToCapture >> 8);
                if (TriggerActivationCheckBox.IsChecked == true)
                {
                    USBPacket[CAPTURE_TRIGGER_ENABLE_OFFSET] = CAPTURE_TRIGGER_ENABLE;
                    USBPacket[CAPTURE_TRIGGER_MODE_OFFSET]   = CAPTURE_TRIGGER_MODE_CHANNELS;
                    for (int TrigByte = 0; TrigByte < CAPTURE_TRIGGER_BYTES_COUNT; TrigByte++)
                    {
                        USBPacket[CAPTURE_TRIGGER_SET_OFFSET + TrigByte] = (byte)((Array.IndexOf(TriggersString, Channels[2 * TrigByte + 1].Trigger) << 4) | (Array.IndexOf(TriggersString, Channels[2 * TrigByte].Trigger)));
                    }
                    if ((USBPacket[CAPTURE_TRIGGER_SET_OFFSET] == 0) && (USBPacket[CAPTURE_TRIGGER_SET_OFFSET + 1] == 0) &&
                        (USBPacket[CAPTURE_TRIGGER_SET_OFFSET + 2] == 0) && (USBPacket[CAPTURE_TRIGGER_SET_OFFSET + 3] == 0))
                    {
                        USBPacket[CAPTURE_TRIGGER_ENABLE_OFFSET] = CAPTURE_TRIGGER_DISABLE;
                    }
                }

                else
                {
                    USBPacket[CAPTURE_TRIGGER_ENABLE_OFFSET] = CAPTURE_TRIGGER_DISABLE;
                }

                bool USBSuccess = USB_device.Write(USBPacket);

                byte[] InputData = new byte[SamplesToCapture];

                Value = SamplesToCapture / USB_CMD_PACKET_SIZE;

                for (int i = 0; i < Value; i++)
                {
                    USBSuccess = USB_device.Read(USBPacket);
                    USBPacket.CopyTo(InputData, i * USB_CMD_PACKET_SIZE);
                }

                PointCollection[] NewChannelsData = new PointCollection[CHANNEL_COUNT];
                for (int chnl = 0; chnl < CHANNEL_COUNT; chnl++)
                {
                    NewChannelsData[chnl] = new PointCollection();
                }

                for (int PointIndex = 0; PointIndex < SamplesToCapture; PointIndex++)
                {
                    for (int chnl = 0; chnl < CHANNEL_COUNT; chnl++)
                    {
                        Value = START_Y;
                        if ((InputData[PointIndex] & (1 << chnl)) == (1 << chnl))
                        {
                            Value += PULSE_HEIGHT;
                        }
                        NewChannelsData[chnl].Add(new Point(PointIndex, Value));
                    }
                }

                //если активированы триггеры, в начало графика добавляются 2 точки,
                //соответствующие триггеру канала;
                //если у канала нет триггера, добавленные точки повторяют начальную точку канала
                if (TriggerActivationCheckBox.IsChecked == true)
                {
                    for (int chnl = 0; chnl < CHANNEL_COUNT; chnl++)
                    {
                        for (int PointIndex = 0; PointIndex < SamplesToCapture; PointIndex++)
                        {
                            NewChannelsData[chnl][PointIndex] = new Point(NewChannelsData[chnl][PointIndex].X + EXTRA_POINTS_COUNT_FOR_TRIGGER, NewChannelsData[chnl][PointIndex].Y);
                        }
                    }

                    SamplesToCapture += EXTRA_POINTS_COUNT_FOR_TRIGGER;

                    for (int chnl = 0; chnl < CHANNEL_COUNT; chnl++)
                    {
                        switch (Array.IndexOf(TriggersString, Channels[chnl].Trigger))
                        {
                        case TRIGGER_NONE:
                            NewChannelsData[chnl].Insert(0, new Point(1, NewChannelsData[chnl][0].Y));
                            NewChannelsData[chnl].Insert(0, new Point(0, NewChannelsData[chnl][0].Y));
                            break;

                        case TRIGGER_LOW_LEVEL:
                            NewChannelsData[chnl].Insert(0, new Point(1, PULSE_LOW));
                            NewChannelsData[chnl].Insert(0, new Point(0, PULSE_LOW));
                            break;

                        case TRIGGER_HIGH_LEVEL:
                            NewChannelsData[chnl].Insert(0, new Point(1, PULSE_HIGH));
                            NewChannelsData[chnl].Insert(0, new Point(0, PULSE_HIGH));
                            break;

                        case TRIGGER_RISING_EDGE:
                            NewChannelsData[chnl].Insert(0, new Point(1, PULSE_HIGH));
                            NewChannelsData[chnl].Insert(0, new Point(0, PULSE_LOW));
                            break;

                        case TRIGGER_FALLING_EDGE:
                        case TRIGGER_ANY_EDGE:
                            NewChannelsData[chnl].Insert(0, new Point(1, PULSE_LOW));
                            NewChannelsData[chnl].Insert(0, new Point(0, PULSE_HIGH));
                            break;
                        }
                    }
                }

                for (int chnl = 0; chnl < CHANNEL_COUNT; chnl++)
                {
                    Channels[chnl].CaptureData(NewChannelsData[chnl]);
                }

                for (int decoder = 0; decoder < IAnalyzers.Count; decoder++)
                {
                    GetPointsAndAnalyze(decoder);

                    if (decoder == InterfaceComboBox.SelectedIndex)
                    {
                        InterfaceItemsListView.ItemsSource = IAnalyzers[decoder].InterfaceParts;
                    }
                }

                ScaleXIndex = 1;
                Zooming(ZOOM_OUT);
            }
        }
Exemplo n.º 2
0
        public MainWindow()
        {
            InitializeComponent();

            Channels   = new AnalyzerChannel[CHANNEL_COUNT];
            IAnalyzers = new ObservableCollection <IHardwareInterface>();

            for (byte i = 0; i < CHANNEL_COUNT; i++)
            {
                Channels[i]             = new AnalyzerChannel();
                Channels[i].Index       = i;
                Channels[i].Name        = "канал " + i.ToString();
                Channels[i].Trigger     = TriggersString[0];
                Channels[i].Start_Y     = START_Y;
                Channels[i].PulseHeight = PULSE_HEIGHT;
            }

            GraphsCanvas.MouseMove += GraphsCanvas_MouseMove_Panning;
            //demo starts

/*
 *          byte BitCnt = 0;
 *          for (byte Chnl = 1; Chnl < CHANNEL_COUNT; Chnl++)
 *          {
 *              BitCnt = Chnl;
 *              if (Chnl > 3)
 *                  BitCnt -= 4;
 *
 *              PointCollection RawData = new PointCollection();
 *
 *              for (UInt32 i = 0; i < POINTS_COUNT; i++)
 *              {
 *                  if (BitCnt <= 1)
 *                  {
 *                      Point NewPoint1 = new Point(i * ScaleX[ScaleXIndex], START_Y);
 *                      RawData.Add(NewPoint1);
 *                  }
 *                  else
 *                  {
 *                      Point NewPoint2 = new Point(i * ScaleX[ScaleXIndex], START_Y + PULSE_HEIGHT);
 *                      RawData.Add(NewPoint2);
 *                  }
 *
 *                  BitCnt++;
 *                  if (BitCnt == 4)
 *                      BitCnt = 0;
 *              }
 *
 *              Channels[Chnl].CaptureData(RawData);
 *          }
 *
 *          PointCollection CapturedRawData = new PointCollection();
 *          for (UInt32 i = 0; i < POINTS_COUNT; i++)
 *              CapturedRawData.Add(new Point(i * ScaleX[ScaleXIndex], START_Y + PULSE_HEIGHT));
 *          CapturedRawData[120] = new Point(120 * ScaleX[ScaleXIndex], START_Y);
 *          Channels[0].CaptureData(CapturedRawData);
 */
            //demo ends

            ChnlInfo.ItemsSource                = Channels;
            Samples.ItemsSource                 = SampleCount;
            Frequencies.ItemsSource             = FreqStrings;
            InterfaceComboBox.ItemsSource       = IAnalyzers;
            InterfaceComboBox.DisplayMemberPath = "Name";
            UpdateFrameParameters();

            ChnlsTrigHelpTextBox.Text = TriggerHelp;

            USBDevDetected = USB_device.Open();

            if (USBDevDetected)
            {
            }
        }