Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: fthsev - 20 Mart 2014, 11:48:27

Başlık: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 11:48:27
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: z - 20 Mart 2014, 13:21:22
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 14:08:56
Evet C#da da aynı komutlar var. OnDeviceAttached ve OnDeviceDeteched ama bu komutları çalıştıramadım.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: SpeedyX - 20 Mart 2014, 14:46:19
Kurulumda event olarak += şeklinde ekleme yapmalısın yani event kurmalısın. Kurulu gelmiyor.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: yusuffyk - 20 Mart 2014, 14:48:56
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
            }

}
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 15:00:00
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";
                }
            }
           
        }
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 20 Mart 2014, 18:28:48
Hangi dll'i kullandiginizi bilmiyorum fakat şuradaki (http://www.bashewa.com/wmr200-usb-dll.php?lang=pt) dll mukemmel çalisiyor.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 18:40:07
umng.dll kütüphanesini kullanıyorum. Linkini verdiğiniz UsbLibrary.dll elimde vardı ama hiç kullanmadım. Hemen deniyorum.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 20 Mart 2014, 19:32:19
umng.dll sök-tak olaylarını desteklemiyor.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: yusuffyk - 20 Mart 2014, 19:44:01
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 20 Mart 2014, 19:48:50
umng.dll'de cihazın bağlanması ve sökülmesi halinde event oluşturabiliyor musunuz @yktronik?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: yusuffyk - 20 Mart 2014, 20:39:22
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)
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 20 Mart 2014, 20:45:23
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?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: yusuffyk - 20 Mart 2014, 20:49:24
.dll dosyasını ekledim, şu an da biraz meşgulüm, eğer çalıştıramazsanız ilerleyen saatlerde ekleyebilirim.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 20 Mart 2014, 21:16:35
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 21:26:17
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 21:37:25
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?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 22:37:25
Sayın @LukeSkywalker hocam UsbLibrary.dll kütüphanesinde nasıl data gönderiyoruz?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: rree - 20 Mart 2014, 22:40:11
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 20 Mart 2014, 23:15:20
#rree mesaj attığınız sırada sizin eski konularınızı inceliyordum:) evet sizde bir sonuç elde edememişsiniz..
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: yusuffyk - 20 Mart 2014, 23:53:19
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: rree - 21 Mart 2014, 00:55:22
Ö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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 21 Mart 2014, 01:03:24
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?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 21 Mart 2014, 06:36:43
Verdigim link usblibrary.dll'in son versiyonunu barindiriyor. Bütün işletim sistemlerinde calisiyor. (32-64). Vid pid değerleri farketmiyor, sorunsuz.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: SpeedyX - 21 Mart 2014, 08:08:15
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);
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 21 Mart 2014, 11:47:26
@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?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 21 Mart 2014, 17:01:16
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;
        } 
   
    }
}
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 22 Mart 2014, 14:40:02
Gönderdiğim kodla ilgili bir fikri olan yok mu?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 23 Mart 2014, 15:22:27
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ı?
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 23 Mart 2014, 17:52:10
umng.dll'de veri geldiğinde de event oluşmuyor. Bu yüzden kullanışlı değil.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: z - 23 Mart 2014, 18:28:31
Yanlis hatirlamiyorsam umng.dll  interrupt transferi yapamiyordu. (Yada enumaration sonrasi kontrol transferi yapamiyordu).

Aklimda oyle kalmis.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 23 Mart 2014, 19:02:36
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   
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 23 Mart 2014, 19:26:17
Bende direk algiliyor
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 23 Mart 2014, 19:40:26
@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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: Mr.Java - 23 Mart 2014, 19:50:30
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.
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: LukeSkywalker - 23 Mart 2014, 19:58:17
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)
Başlık: Ynt: USB HID uygulamada bağlantı koptuğunda event yakalama
Gönderen: fthsev - 23 Mart 2014, 22:27:04
@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.