using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LibUsbDotNet;
using LibUsbDotNet.Info;
using LibUsbDotNet.Main;
namespace USB
{
public partial class Form1 : Form
{
public static UsbDevice usbDevice;
public static UsbRegistry [] usbRegistry;
public static int nIdx;
public UsbEndpointReader reader;
delegate void txtBox(RichTextBox tb, string text);
public Form1()
{
InitializeComponent();
//컴퓨터에 연결된 USB 모든장치 로드
UsbRegDeviceList allDevice = UsbDevice.AllDevices;
usbRegistry = new UsbRegistry[allDevice.Count];
int cntUsb = 0;
//장치들을 하나씩 돌아가면서 조회
foreach (UsbRegistry tmpUsbRegistry in allDevice)
{
//해당 USB가 정상적으로 열리면
if(tmpUsbRegistry.Open(out usbDevice))
{
//항목들을 하나씩 리스트박스에 추가
usbRegistry[cntUsb] = tmpUsbRegistry;
listBox1.Items.Add(usbRegistry[cntUsb].FullName);
}
cntUsb++;
}
UsbDevice.Exit();
}
public void setText(RichTextBox txt, string str)
{
if (richTextBox1.InvokeRequired)
{
txtBox ci = new txtBox(setText);
richTextBox1.Invoke(ci, richTextBox1, str);
}
else
{
richTextBox1.Text = str + "\r\n" + richTextBox1.Text;
}
}
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
//리스트박스에서 선택된 USB 인덱스
nIdx = ((System.Windows.Forms.ListBox)(sender)).SelectedIndex;
fldManufacturer.Text = (usbRegistry[nIdx].Device).Info.ManufacturerString;
fldRev.Text = usbRegistry[nIdx].Rev.ToString();
fldProduct.Text = (usbRegistry[nIdx].Device).Info.ProductString;
fldSerial.Text = (usbRegistry[nIdx].Device).Info.SerialString;
fldProductID.Text = usbRegistry[nIdx].Pid.ToString();
fldVendorID.Text = usbRegistry[nIdx].Vid.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
//데이터 수신 준비
IUsbDevice wholeUsbDevice = usbDevice as IUsbDevice;
//USB에서 들어오는 신호를 받기위해 EndPoint 설정
reader = usbDevice.OpenEndpointReader(ReadEndpointID.Ep02);
ReadEventinitStart();
if (!ReferenceEquals(wholeUsbDevice, null))
{
wholeUsbDevice.SetConfiguration(1);
wholeUsbDevice.ClaimInterface(0);
}
}
public void ReadEvent(object sender, EndpointDataEventArgs e)
{
//USB에서 신호가 들어오면 활성화 되는 이벤트
//string str = UnicodeEncoding.ASCII.GetString(e.Buffer, 0, e.Count);
string str = BitConverter.ToInt64(e.Buffer, 0).ToString();
try
{
//받아온 데이터를 기록한다.
setText(richTextBox1, str);
}
catch (System.Exception ex)
{
}
}
public void ReadEventinitStart()
{
//리더 활성화
reader.DataReceivedEnabled = true;
//이벤트 핸들러 연결
reader.DataReceived += (ReadEvent);
}
}
}
'IT > Visual Studio' 카테고리의 다른 글
원문자 키 값 표 (0) | 2020.05.21 |
---|---|
[C#] 인터넷 날짜와 시간 가져오기 (0) | 2019.03.26 |
엔티티프레임워크에서 linq 형 변환 방법 (0) | 2019.02.14 |
[C#] RS232 통신 샘플 코드 (0) | 2018.07.27 |
JSon 문자열을 C# DataTable로 변환 코드 (0) | 2018.05.02 |
[VisualStudio] 사용자 지정 이벤트 로그를 만들 수 있는 권한 부여 (0) | 2018.04.10 |
[Visual Studio] 강력키 생성방법 (0) | 2018.04.07 |
[Visual Studio] vs2005설치후 vs2003설치시 주의할 점 (0) | 2018.04.03 |