Newer
Older
Correlator / PipeGallery / View / AuditionView.xaml.cs
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PipeGallery.Correlator;
using PipeGallery.Manage;
using PipeGallery.ViewModel;

namespace PipeGallery.View
{
    /// <summary>
    /// AuditionView.xaml 的交互逻辑
    /// </summary>
    public partial class AuditionView : UserControl
    {
        private DrawingBrush _gridBrush;

        public AuditionView()
        {
            InitializeComponent();
            this.DataContext = AuditionViewModel.Instance;

            this.Loaded += AuditionView_Loaded;
            this.btnReturn.Click += btnReturn_Click;
            this.btnMute.Checked += btnMute_Checked;
            this.btnMute.Unchecked += btnMute_Unchecked;
            //this.btnUp.Click += btnUp_Click;
            //this.btnDown.Click += btnDown_Click;

            this.btnRed.Click += btnRed_Click;
            this.btnBlue.Click += btnBlue_Click;
        }

        void AuditionView_Loaded(object sender, RoutedEventArgs e)
        {
            DataFactory.InitalAuditionData(canvasCoordinates, gridChartContainer);

            //Thumb thumb = (slider1.Template.FindName("PART_Track", slider1) as Track).Thumb;
            //thumb.DataContext = slider1;
        }

        void btnReturn_Click(object sender, RoutedEventArgs e)
        {
            Border bdr = this.Parent as Border;
            if (bdr != null)
            {
                HomePageView homePageView = new HomePageView();
                bdr.Child = homePageView;
            }

            if (this.btnRed.IsChecked == true)
            {
                SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1);
            }

            if (this.btnBlue.IsChecked == true)
            {
                SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2);
            }
        }

        private const byte VK_VOLUME_MUTE = 0xAD;
        private const byte VK_VOLUME_DOWN = 0xAE;
        private const byte VK_VOLUME_UP = 0xAF;
        private const UInt32 KEYEVENTF_EXTENDEDKEY = 0x0001;
        private const UInt32 KEYEVENTF_KEYUP = 0x0002;

        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, UInt32 dwFlags, UInt32 dwExtraInfo);

        [DllImport("user32.dll")]
        static extern Byte MapVirtualKey(UInt32 uCode, UInt32 uMapType);

        void btnMute_Unchecked(object sender, RoutedEventArgs e)
        {
            //非静音
            keybd_event(VK_VOLUME_MUTE, MapVirtualKey(VK_VOLUME_MUTE, 0), KEYEVENTF_EXTENDEDKEY, 0);
            keybd_event(VK_VOLUME_MUTE, MapVirtualKey(VK_VOLUME_MUTE, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }

        void btnMute_Checked(object sender, RoutedEventArgs e)
        {
            //静音
            keybd_event(VK_VOLUME_MUTE, MapVirtualKey(VK_VOLUME_MUTE, 0), KEYEVENTF_EXTENDEDKEY, 0);
            keybd_event(VK_VOLUME_MUTE, MapVirtualKey(VK_VOLUME_MUTE, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }

        private void btnRed_Click(object sender, RoutedEventArgs e)
        {
            if (!CalculteSatus.msp.Sp.IsOpen)
            {
                this.btnRed.IsChecked = false;
                new PopupWindow("未插入串口!").ShowDialog();
                return;
            }

            if (this.btnRed.IsChecked == false || this.btnRed.IsChecked == null)
            {
                SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1);

                String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json",
                    Encoding.UTF8);
                JObject jo = JObject.Parse(josnString);
                jo["listen"] = ++CorrelatorDataSaveThread.Listen;

                StreamWriter sw = new StreamWriter(System.AppDomain.CurrentDomain.BaseDirectory + "number.json");
                sw.Write(JsonConvert.SerializeObject(jo));
                sw.Flush();
                sw.Close();
            }
            else
            {
                if (this.btnBlue.IsChecked == true)
                {
                    SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2);
                    this.btnBlue.IsChecked = false;
                }

                AuditionViewModel.Instance.SensorAIsEnable = false;
                AuditionViewModel.Instance.SensorBIsEnable = false;
                new Thread(new ParameterizedThreadStart(sendSoundCollectCmd))
                    { IsBackground = true }.Start(DevCode.Dev1);
            }
        }

        private void btnBlue_Click(object sender, RoutedEventArgs e)
        {
            if (!CalculteSatus.msp.Sp.IsOpen)
            {
                this.btnBlue.IsChecked = false;
                new PopupWindow("未插入串口!").ShowDialog();
                return;
            }

            if (this.btnBlue.IsChecked == false || this.btnBlue.IsChecked == null)
            {
                SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2);

                String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json",
                    Encoding.UTF8);
                JObject jo = JObject.Parse(josnString);
                jo["listen"] = ++CorrelatorDataSaveThread.Listen;

                StreamWriter sw = new StreamWriter(System.AppDomain.CurrentDomain.BaseDirectory + "number.json");
                sw.Write(JsonConvert.SerializeObject(jo));
                sw.Flush();
                sw.Close();
            }
            else
            {
                if (this.btnRed.IsChecked == true)
                {
                    SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1);
                    this.btnRed.IsChecked = false;
                }

                AuditionViewModel.Instance.SensorAIsEnable = false;
                AuditionViewModel.Instance.SensorBIsEnable = false;
                new Thread(new ParameterizedThreadStart(sendSoundCollectCmd))
                    { IsBackground = true }.Start(DevCode.Dev2);
            }
        }

        private void sendSoundCollectCmd(object devcode)
        {
            PlayWav playwav = PlayWav.getInstance();
            playwav.Stop();
            playwav.initWaveOut();

            CalculteSatus.CanGetSignal = false; //停止状态采集指令的发送
            Thread.Sleep(3000);
            SenderClass.sendSoundCollectCmd(CalculteSatus.msp.Sp, devcode as string);
            Thread.Sleep(2000);
            CalculteSatus.isListening = true;
            new Thread(new ThreadStart(timer)) { IsBackground = true }.Start();

            AuditionViewModel.Instance.SensorAIsEnable = true;
            AuditionViewModel.Instance.SensorBIsEnable = true;
        }

        private void timer()
        {
            while (CalculteSatus.isListening)
            {
                Thread.Sleep(1000);
                if (++CalculteSatus.elapseTime >= 10)
                {
                    MessageBox.Show("接收不到数据,请重启软件");
                    break;
                }
            }

            CalculteSatus.elapseTime = 0;
        }
    }
}