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); } }
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) { } }