Newer
Older
TIASshot / TIASshot / LightSource.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Management;
using System.Diagnostics;

namespace TIASshot {
    internal class LightSource {
        SerialPort _serial;
        public bool IsOpen { get { return _serial.IsOpen; } }

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public LightSource() {
            _serial = new SerialPort();
        }

        /// <summary>
        /// ポートを探す
        /// </summary>
        /// <param name="deviceName"></param>
        /// <returns></returns>
        private string FindPort(string deviceName) {
            var portname = "";
            var mcW32SerPort = new ManagementClass("Win32_SerialPort");
            foreach (var port in mcW32SerPort.GetInstances()) {
                var devName = port.GetPropertyValue("Caption").ToString();
                Debug.WriteLine(devName);
                if (devName.Contains(deviceName)) {
                    portname = port.GetPropertyValue("DeviceID").ToString();
                }
            }
            return portname;
        }

        /// <summary>
        /// 接続
        /// </summary>
        /// <returns></returns>
        public bool Open() {
            var portName = FindPort(Config.GetString("LightSource/Device"));
            if (portName == "") return false;
            _serial.PortName = portName;
            _serial.BaudRate = Config.GetInt("LightSource/BaudRate");
            _serial.DataBits = 8;
            _serial.StopBits = StopBits.One;
            _serial.Parity = Parity.None;
            _serial.Open();
            return true;
        }

        public void TurnOff() {
            byte[] buf = new byte[] { 0x02, 0x44, 0x41, 0x58, 0x32, 0x3A, 
                0x44, 0x41, 0x20, 0x30, 0x03, 0x31, 0x45, 0x04 };
            var str = Encoding.ASCII.GetString(buf);
            _serial.Write(str);
        }

        public void SetLight() {
            byte[] buf = new byte[] { 0x02, 0x44, 0x41, 0x58, 0x32, 0x3A, 0x44, 
                0x45, 0x46, 0x20, 0x33, 0x30, 0x37, 0x32, 0x03, 0x30, 0x34, 0x04 };
            var str = Encoding.ASCII.GetString(buf);
            _serial.Write(str);
        }
    }
}