Arkadaşlar bilgisi olan arkadaşlardan cevaplamalarını rica ediyorum. C# da bir arayüz yaptım ve pic 4550 haberleştirdim. Bağlantıda ve veri alışverişinde hiç bir problem yok. Bir süre sonra arayüzden bağlantıyı kesmeden HID cihazı çıkarınca programın bunu yakalayarak bağlantı kesildi demesini istiyorum. Şu an cihaz hala bağlantı var gibi kabul edip pipe ye veri gönderiyor.
C# bilmiyorum. Delphi ye sonradan eklenen USB komponentinde Attach ve detach fonksiyonları var.
USB cihazı taktığında ve söktüğünde otomatik olarak çalışıyor.
Evet C#da da aynı komutlar var. OnDeviceAttached ve OnDeviceDeteched ama bu komutları çalıştıramadım.
Kurulumda event olarak += şeklinde ekleme yapmalısın yani event kurmalısın. Kurulu gelmiyor.
hocam şöyle bir kod işinize yarayacaktır.
ben böyle kontrol ediyorum.
tabi kullanığınız referansa göre değişiklik gösterebilir.
private void OnChangeDeviceState(object sender, DeviceStateChangeEventArgs e)
{
if (e.CurrentState == DeviceState.Closed)
{
// Bağlantı Kesildi
}
}
Z ve SpeedyX ilgilendiğiniz için teşekkür ederim. SpeedyX ben c# 2010 express sürümünü kurmuştum. Orada böyle bir ayar dikkatimi çekmedi. Bunu ayrı bir toolbox olarak yükleyebiliyormuyuz. yktronik yazdığım kod aşağıda . Burada senin dediğin kısım benim kodda da var. İlginç bir durum olarak o kısım bağlan butonuna bastığımda çalışıyor. Ama daha sonra cihazı çıkardığımda çalışmıyor. Aynı şekilde diğer event lerde ne cihaz takıldığında ne de çıkarıldığında çalışıyor.
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 USBManagement;
using System.IO;
//using System.Threading;
namespace BileklikUSB
{
public partial class Form1 : Form
{
UsbHidDevice dev = new UsbHidDevice();
const short VendorID = 0x1111;
const short ProductID = 0x1111;
int index;
byte[] gonder = new byte[64];
public Form1()
{
InitializeComponent();
dev.DeviceStateChanged += new DeviceStateChangeEventHandler(OnChangeDeviceState);
}
private void Form1_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
label1.Text = "BAĞLANTI BEKLENİYOR....";
}
private void OnChangeDeviceState(object sender, DeviceStateChangeEventArgs e)
{
if (e.CurrentState == DeviceState.Opened)
{
label1.Text = "BAĞLANTI KURULDU";
}
else if (e.CurrentState == DeviceState.Closed)
{
label1.Text = "BAĞLANTI KESİLDİ";
}
else if (e.CurrentState == DeviceState.Waiting)
{
label1.Text = "BAĞLANTI BEKLENİYOR...";
}
else if (e.CurrentState == DeviceState.Ready)
{
label1.Text = "BAĞLANTI HAZIR";
}
else
{
label1.Text = "BAĞLANTI YOK";
}
}
private void OnDeviceAttached(object sender, EventArgs e)
{
bool Success;
richTextBox1.Text += "Atached Device" + "\n";
Success = dev.OpenPipe(VendorID, ProductID);
if (Success)
{
richTextBox1.Text += "Bağlantı kuruldu" + "\n";
}
}
private void OnDeviceDetached(object sender, EventArgs e)
{
richTextBox1.Text += "Detached Device" + "\n";
if (dev.IsOpen) dev.ClosePipe();
richTextBox1.Text += "Cihaz ile bağlantı kesildi" + "\n";
}
//private void Form1_FormClosing(object sender, FormClosingEventArgs e)
//{
// try
// {
// if (dev.IsOpen)
// if (dev.ClosePipe())
// richTextBox1.Text += "Akis borusu kapatildi"+"\n";
// else
// richTextBox1.Text += "Baglanti kapatilamiyor.."+"\n";
// if (dev.IsRegistered) dev.UnRegisterDevice();
// }
// catch (Exception err)
// {
// MessageBox.Show(err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
// }
//}
//public delegate void okuhandler ();
private void button1_Click(object sender, EventArgs e)
{
if (!dev.IsOpen)
{
if (dev.OpenPipe(VendorID, ProductID))
{
richTextBox1.Text += "Aygıt bağlı. Veri bekleniyor..." + "\n";
////Thread thread1 = new Thread(new ThreadStart(BaglantiKontrol));
////thread1.Start();
////richTextBox1.Text += "Thread çalıştı" + "\n";
//System.Threading.Thread tryRead = new System.Threading.Thread(new System.Threading.ThreadStart(VeriBekle));
//tryRead.Start();
}
else
{
richTextBox1.Text += "Aygıt bağlı değil..." + "\n";
}
}
}
Hangi dll'i kullandiginizi bilmiyorum fakat şuradaki (http://www.bashewa.com/wmr200-usb-dll.php?lang=pt) dll mukemmel çalisiyor.
umng.dll kütüphanesini kullanıyorum. Linkini verdiğiniz UsbLibrary.dll elimde vardı ama hiç kullanmadım. Hemen deniyorum.
umng.dll sök-tak olaylarını desteklemiyor.
umng.dll kullanarak çalışıyorum ve eventler benimkiyle aynı.
tam olarak probleminiz nedir bilmiyorum ama ben de sorunsuz çalışıyor.
umng.dll yi başka bir yerden bulup kullanmanı önerebilirim.
olmadı hocamın da dediği gibi
USBLibrary.dll de alternatif olabilir. aynı mantıkla çalışıyor zaten.
umng.dll'de cihazın bağlanması ve sökülmesi halinde event oluşturabiliyor musunuz @yktronik?
evet ben oluşturabiliyorum. bir sıkıntım olmadı şu ana kadar.
hatta buraya yükledim. ben bunu sorunsuz kullanabiliyorum. bunu referans olarak dener misiniz ?
http://yadi.sk/d/_ptP38MCKuEwq (http://yadi.sk/d/_ptP38MCKuEwq)
Ben bütün herşeyi denememe rağmen o eventları çalıştıramadım. Eğer mümkünse çalışan basit bir proje dosyası gönderebilir misiniz?
.dll dosyasını ekledim, şu an da biraz meşgulüm, eğer çalıştıramazsanız ilerleyen saatlerde ekleyebilirim.
Bu dll benim kullandığım ile aynı. Yine de değiştirerek denedim. Fakat bağlantı sağlandığında otomatik olarak bunu algılayan event yine çalışmadı. İllaki ben usb soketine cihazı taktığımda butona basarak iletişimi başlatıyorum. Cihazın takıldığını otomatik olarak algılamıyor.
Evet umng.dll kütüphanesinde bende de aynı problem oluyor. Bir butona basmadan bağlantıyı kuramıyor veya kesemiyorum. HID cihaz takıldığında yada aniden çıkarıldığında program yakalayamıyor bağlantı devam ediyor gibi davranıyor.
Sayın @yktronik sizin yüklediğiniz umng.dll kütüphanesini de denedim. Gene aynı o eventlar çalışmıyor. @LukeSkywalker' nin de dediği gibi mümkünse çalışan basit bir proje yükleyebilirmisiniz?
Sayın @LukeSkywalker hocam UsbLibrary.dll kütüphanesinde nasıl data gönderiyoruz?
Bende bir zamanlar aradım. Umng denedim eventleri çalışmıyor. Bir tane daha vardı Vendor id si ancak 0 değerinde çalışıyordu başka değer atınca çalışmıyordu..Doğru düzgün çalışan bir dll bulursak sevineceğim.
#rree mesaj attığınız sırada sizin eski konularınızı inceliyordum:) evet sizde bir sonuç elde edememişsiniz..
hocam şu an denedim program hata veriyor simülasyonda. Simülasyonu durdurduğumda program çalışmayı durduruyor.
Birden fazla .dll ile çalışmıştım. Sanırım usblibrary.dll ile sonuç alıyordum. Kusura bakmayın karıştırmışım, benim hatam.
Önceki örneklerde usblibrary.dll kotlar ile monte şeklinde görülüyor gibiydi ama esas nesne eklentisinden çalışıyordu. nesne özelliklerinden Vendorid=0 ProductID=0 dı. Bunları bir değer attığınızda çalışmıyordu kontrol edin.
Vedorid, productid değerlerine 0 değerini de verdim genede bağlayamadım. #LukeSkywalker hocam siz usblibrary.dll kütüphanesini tavsiye etmiştiniz. Varsa elinizde eventlerin çalıştığı basit bir proje paylasabilirmisiniz?
Verdigim link usblibrary.dll'in son versiyonunu barindiriyor. Bütün işletim sistemlerinde calisiyor. (32-64). Vid pid değerleri farketmiyor, sorunsuz.
Cümle olarak yazığımı bir de kod olarak yazayım, belki anlaşılır.
USBPort.USBDeviceAttached += new USBClass.USBDeviceEventHandler(USBPort_USBDeviceAttached);
USBPort.USBDeviceRemoved += new USBClass.USBDeviceEventHandler(USBPort_USBDeviceRemoved);
@LukeSkywalker Hocam sizin verdiğiniz linkteki kütüphaneyi kullandım sayfadaki anlatımlarıda okudum ama gene HID cihazla bağlantıyı sağlayamadım. umng.dll kütüphanesinde bağlantı sağlayabiliyor veri alışverişi yapabiliyor ama eventları yakalayamıyordum. Rica etsem sadece bağlantının ve eventların olduğu çalışır bir proje yükleyebilirmisiniz?
Arkadaşlar aşağıda gönderdiğim koda bakabilir misiniz? UsbLibrary.dll kütüphanesini kullandım. HID cihaz bağlandığında program tepki vermiyor. Acaba nerede bir yanlışlık var?
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 UsbLibrary;
namespace Deneme
{
public partial class Form1 : Form
{
bool durum = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.usbHidPort1.ProductId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
this.usbHidPort1.VendorId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
usbHidPort1.CheckDevicePresent();
if (durum)
{
richTextBox1.Text += "USB Bağlantısı Kuruldu" + "\n";
}
else
{
richTextBox1.Text += "USB Bağlantısı Bekleniyor"+"\n";
}
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
usbHidPort1.RegisterHandle(Handle);
}
protected override void WndProc(ref Message m)
{
usbHidPort1.ParseMessages(ref m);
base.WndProc(ref m);
}
private void usbHidPort1_OnDeviceArrived(object sender, EventArgs e)
{
richTextBox1.Text += "USB Bağlantısı Kuruldu" + "\n";
durum = true;
}
private void usbHidPort1_OnSpecifiedDeviceArrived(object sender, EventArgs e)
{
richTextBox1.Text += "USB Bağlantısı Kuruldu" + "\n";
durum = true;
}
}
}
Gönderdiğim kodla ilgili bir fikri olan yok mu?
Arkadaşlar konuyu ilk açtığımda c# USB HID uygulamasında kullandığım umng.dll kütüphanesinde event yakalama problemi olduğunu cihazın takılıp çıkarılma durumlarında algılamadığından bahsetmiştim. Sağolsun cevap veren arkadaşlar bu kütüphanede eventların çalışmadığını bunun yerine usblibrary.dll kütüphanesini kullanmamı tavsiye ettiler. Ama umng.dll kütüphanesini ben daha kullanışlı buluyorum. Bunu için iki kütüphaneyi beraber kullanma kararı verdim bilmiyorum daha önce deneyen var mı ama denedim. Evet ikisi beraber çalıştı. Cihaz takıldığında, çıkarıldığında ve data geldiğinde oluşan eventları usblibrary.dll ile cihaz ile bağlantı kurma, kesme(open pipe,close pipe) ve data alışverişini umng.dll kütüphanesi ile yaptım. Bir sorun gözlemlemedim. Acaba ileride şu an farketmediğim problemler çıkabilir mi? veya bu şekil bir kullanım mantıklı mı? Birde usblibrary.dll kütüphanesini çalışan bri uygulama üzerinde değişiklik yaparak kullanabiliyorum. Yeniden yaptığımda herşey birebir aynı olsa bile çalışmıyor. Bunu hakkında bir bilgisi olan var mı?
umng.dll'de veri geldiğinde de event oluşmuyor. Bu yüzden kullanışlı değil.
Yanlis hatirlamiyorsam umng.dll interrupt transferi yapamiyordu. (Yada enumaration sonrasi kontrol transferi yapamiyordu).
Aklimda oyle kalmis.
Evet umng.dll de veri geldiğinde event oluşmuyor umng.dll ile usblibrary.dll yi beraber kullanınca veri geldiğinde event yakalamış oluyorum:) Açıkcası usblibrary.dll yi çalıştıramadığım için ikisini beraber kullanmak zorunda kaldım. Bir de usblibrary.dll de önce HID cihaz bilgisayara bağlanılıp sonra arayüz açıldığında bilgisayara bir HID cihazın bağlı olduğunu programa nasıl anlatırım? HID cihazı çıkarıp tekrar takmadan yapamıyorum bunu
Bende direk algiliyor
@LukeSkywalker Hocam bende algılamıyor malesef. Ayrıca daha önce vermiş olduğunuz linkteki kütüphaneyi de indirip program hazırladım üzerindede baya uğraştım ama başaramadım. Rica etsem bana çalışıyor dediğiniz uygulamayı gönderirmisiniz? Nerede yanlış yaptığımı karşılaştırmak istiyorum. Üç dört gündür ciddi vakit ayırıp uğraştım ama hatamı bulamadım.
Peki yeri gelmişken sormak istiyorum bu kadar HID ile haşır neşir olan arkadaşlara.Mikroc veya CCs gibi XC8'de kendisine has USB HID kütüphanesi varmı ? Yani fonksiyonları çağırıp direk haberleşebileceğim bir kütüphane.
Teşekkürler.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044 (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044)
mesaj birleştirme:: 23 Mart 2014, 20:00:52
http://18f4550.com/updated_USB_demo_board/updated_USB_demo_board.html (http://18f4550.com/updated_USB_demo_board/updated_USB_demo_board.html)
@LukeSkywalker Hocam mesajlarımın yayınlanması için moderatörlerin onayını beklediğim için mesajlarım geride kalıyor. Belki okuyamamışsınızdır diye mesajımı tekrar gönderiyorum:
@LukeSkywalker Hocam bende algılamıyor malesef. Ayrıca daha önce vermiş olduğunuz linkteki kütüphaneyi de indirip program hazırladım üzerindede baya uğraştım ama başaramadım. Rica etsem bana çalışıyor dediğiniz uygulamayı gönderirmisiniz? Nerede yanlış yaptığımı karşılaştırmak istiyorum. Üç dört gündür ciddi vakit ayırıp uğraştım ama hatamı bulamadım.