Ejemplo n.º 1
0
 private void Minipc_type_DropDownClosed(object sender, EventArgs e)
 {
     log_box.Text = "MiniPC Type: " + combobox_type.Text;
     if (combobox_type.Text.Length == 0)
     {
         return;
     }
     if (gpio == null)
     {
         gpio         = new SuperIO();
         dirverStatus = InitGPIODriver();
     }
     gpio.MinipcType = combobox_type.Text;
     if (!dirverStatus)
     {
         return;
     }
     else
     {
         model_btn.IsEnabled = true;
         val_btn.IsEnabled   = true;
         TypeEnum type = (TypeEnum)Enum.Parse(typeof(TypeEnum),
                                              combobox_type.SelectedItem.ToString(), false);
         gpio.InitSuperIO();
         gpio.InitLogicDevice();
         LoadGpioData(type);
         gpio.ExitSuperIo();
     }
 }
Ejemplo n.º 2
0
        //设定喂狗时间
        private void Feed_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            //WDT的可编程超时范围为1~65535秒/分
            ushort time = 60;

            try
            {
                time = Convert.ToUInt16(time_val.Text);
                if (time < 10 || time > 65535)
                {
                    MessageBox.Show("请输入10~65536之间的整数!");
                    return;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("请输入10~65536之间的整数!");
                return;
            }

            if (watchdog == null)
            {
                MessageBox.Show("未选择迷你电脑型号!");
                return;
            }
            interval.Text = "喂狗间隔:" + time + "s";
            feedTime      = time;
            wtimer        = Convert.ToUInt16(Math.Ceiling(time * 0.8));//定时器必须提前喂狗
            Console.WriteLine("feedTime:{0} wtimer:{1}", feedTime, wtimer);

            watchdog.InitSuperIO();
            watchdog.InitLogicDevice();//LDN 07

            if (watchdog.MinipcType.Equals("Q500"))
            {
                //SMI# Control Register 2 (Index=F1h, Default=00h)
                //bit 6:触发方式 0边沿触发/1电平触发
                //bit 2 SMI# WDT功能开关 1开/0关
                if (timeUint == 0)
                {
                    watchdog.EnableWatchDog(0xf1, 0x44);//0100 0100
                }
            }
            else
            {
                //Watch Dog Timer Configuration Register (Index=72h, Default=001s0000b)
                //bit 7:喂狗时间单位 1秒/0分
                //bit 4:WDT功能开关 1开/0关
                if (timeUint == 0)
                {
                    watchdog.EnableWatchDog(0x72, 0x90);//1001 0000
                }
            }
            watchdog.ExitSuperIo();

            //看门狗管理器
            //先清除已存在的看门狗,如果存在
            WatchDogManager tm = WatchDogManager.Instance;

            if (tm.Timer != null)
            {
                Console.WriteLine("关闭之前的定时器!");
                tm.Timer.Stop();
                tm.Timer    = null;
                tm.WatchDog = null;
            }

            //设定喂狗时间,即在设定时间内必须喂狗,否则会自动重启
            watchdog.FeedDog(feedTime);
            if (!wdttimer.IsEnabled)
            {
                wdttimer.Interval = TimeSpan.FromMilliseconds(wtimer * 1000);
                wdttimer.Start();
            }

            tm.Timer    = wdttimer;
            tm.WatchDog = watchdog;
        }